Примечание. Если Vi типа string или char, после считывания строки функцией Read перевод на новую строку не происходит. Указатель файла не перемещается за символами возврата коретки и перенос строки, таким образом при последующем обращении к read будет считана пустая строка. Для избежания этой ситуации используйте функцию Readln.

WRITE (Var f: text; V1, V2,…,Vn)

Процедура предназначена для записи информации в текстовые файлы. Выводит значение первых V1, V2,…,Vn, при этом Vi - char, real, integer, string, boolean. Ширина 10 знаков.

WRITELN – то же самое, что и WRITE, только после ввода значений Vn в файл будут записываться 2 символа CHR(13), CHR(10).

EOF(f) = TRUE – если конец файла

EOLN(f)=TRUE – если конец строки

SEEK OF (Var f: Text)boolean – предназначен для определения конца файла. Аналог EOF(f), но игнорируются все пробелы, табуляция и символы конца.

SEEK EOLN(N) – игнорирует пробелы и знаки табуляции.

Особенности работы с типизированными файлами

Ввод и вывод данных производится таким же способом, как и в текстовом файле, далее следуют переменные Vi. Причем они должны иметь тот же тип, что и компоненты файла. Если при считывании текущая позиция находится на конце файла, то возникает ошибка ввода-вывода. Если при выводе в файл текущая позиция – конец файла, то файл расширяется. Кроме указанных функций ввода-вывода в типизированных файлах можно использовать следующие стандартные процедуры и функции ввода-вывода:

File Pos(Var f): longint

Возвращает указатель на текущую позицию, указывает номер текущего байта в файле.

НЕ нашли? Не то? Что вы ищете?

File Size(Var f): longint

Функция возвращает число, которое является размера файла в байтах(если в файле хранятся байтовые переменные, а в общем случае возвращает количчество компонент в файле).

Seek(Var f, N : longint)

Процедура перемещает указатель файла на компоненту с номером n(первая компонента имеет номер 0).

Trun Cate (Var f)

Уничтожает все записи в файле после текущей.

Замечание. Для типизированных и нетипизированных файлов процедура Reset открывает файл как для ввода, так и для вывода в отличие ио текстовых файлов.

GetDir(D: byte; Var S: string)

Возвращает в строку S имя текущего каталога. При этом переменная d обозначает, для какого дискового устройства будет выдан текущий каталог.

D=0, текущее устройство

D=1, текущий каталог диска А

D=2, текущий каталог диска В

D=3, текущий каталог диска С

ChDir(S: string)

Устанавливает в качестве текущего каталога, тот что задан в строке S.

MKDir(S: string)

Создает указанный в строке S.

RMDir(S:string)

Удаляет пустой каталог, имя которого указано в строке S.

Замечание. Функция RMDir не зависит от типа, а является функцией файловой системы.

Особенности работы с нетипизированными файлами

Чтение данных в нетипизированных файлах осуществляется следующей процедурой:

BLOCK READ(Var f: File; Var Buf: dword; count: word; [Var result: word])

Здесь файл переменных нетипизированного типа, из которого читается информация.

Buf - некоторая переменная, задающая адреса памяти, с которого начинается запись информации, считанной из файла.

Count - указывает количество записей в файле, которое должно быть считано, причем если в файле count записей – будут считаны все записи.

Result – присваивается значение полностью считанных записей. ВАЖНО! Если параметр result при вызове процедуры не указан, то считывание записей параметра Count вызывает ошибку ввода-вывода.

Блок памяти может максимально иметь размер: Count* Recsize, где Recsize – размер в байтах считываемой записи. Если это значение меньше 65 535 байт(64 Кб), то это приходит к ошибке ввода-вывода. Если считан весь блок, то значение Count и Result должны совпадать.

После обращения к процедуре блок read текущая позиция в файле увеличивается на величину Result. При обращении к блоку read файл должен быть предварительно открыт.

BLOCK WRITE(Var f: File; Var Buf; count: word; [Var result: word])

Осуществляет запись информации в нетипизированный файл. Неполный перенос блока может быть может быть при переполнении диска. Вся остальные параметры имеют тот же смысл, что и BLOCK READ :

F – файл

Buf – буфер, где запасаются данные

Count – сколько переменных

Должны совпадать:

Result – возвращает количество записанных записей

Рассмотрим задачу копирования файлов с использованием BLOCK WRITE и BLOCK READ:

Пусть имена файлов из которого и в который происходит копирование будут передаваться в качестве параметров командной строки.

Прямой перенос(копирование ) информации из одного файла в другой невозможен, поэтому при копировании используется промежуточный буфер:

 

Для работы с параметрами командной строки в языка Паскаль имеются следующие функции:

1)  ParamCount: word - указывает количество параметров в командной строке

2)  Param str(index: word): string – функция по указанному численному индексу выдает строку, является соответствующим параметром командной строки.

Param str(1) =F1

Param str(2) = F2

ParamCount = 2

Program: <Копирование из одного файла в другой>

Var Fromf, tof : file;

Buf: array[1..2048] of char;

Numread, numwritten: word;

Begin

Assign(Fromf, paramstr(1));

Assign(Tof, paramstr(2));

Reset(Fromf, 1);

Rewrite(Tof, 1);

Writeln (‘Копирую файл!!!’);

Repeat

Blockread(FromF, Buf, Size of(Buf); Numread);

{ Size of - размер памяти а байтах выделяется для указанной переменной}

{обработка ошибок}

Blockwrite(Tof, Buf, Soze of (Buf); numwritten);

{обработка ошибок}

Until (Numread = 0) or (Numread <> numwritten);

Writeln (‘Копирование завершено!!!’);

Close(Fromf);

Close(Tof);

End.

Основные методы работы с текстовыми файлами

Для работы с текстовыми файлами используются файловая переменная:

Var F: TextFile;

Операции с файлами реализуются при помощи набора стандартных подпрограмм.

FileExists (FileName: String): Boolean – проверяет файла, имя и путь которого указаны в строке. True если существует, false если не существует.

AssignFile (F: TextFlile; FileName: String) – связывает текстовый файл с именем FileName с файловой переменной F, при этом существование указанного файла не проверяется.

Reset (F: TextFlile) – открывает текстовый файл F для чтения, при попытке открыть несуществующий файл возникнет исключительная ситуация.

Rewrite (F: TextFlile) – открывает новый файл F для записи. Если такой файл уже существовал, то он будет уничтожен и заменен создаваемым файлом.

Append (F: TextFlile) – открывает файл F для записи в него информации. Если файл существует, то новая информация записывается в конец файла, если файл не существует, то создается новый файл и в него записывается информация.

Read (F: TextFlile; V1..Vn) – читает из файла F с текущей позиции переменные V1..Vn.

Readln – после прочитывания переходит на новую строку и очищает буфер ввода.

Write (F: TextFlile; V1..Vn) – записывает в текстовый F с текущей позиции.

Writeln – с новой строки.

Eof (F) – возвращает true если достигнут конец файла F, в противном случае.

Eoln (F) – возвращает true если достигнут конец строки, в противном случае.

CloseFile(F) – закрывает открытый файл F, но не разрывает связи с ним файловой переменной.

Файл открытый для записи оформляется как файл только после закрытия.

Основные приемы работы с файлами

1) для создания нового файла обычно используется следующая типовая последовательность:

AssignFile (F, ’имя’);

Rewrite (F);

{запись данных в файл}

Close (F);

2) открытие существующего файла обычно делается следующим образом:

if FileExists (F, ‘имя файла’) then begin

AssignFile(F, ‘имя файла’);

Reset(F);

{чтение}

Close (F);

end.

3) обычный цикл чтения из текстового файла до его конца осуществляется следующим образом:

While not Eof (F) do begin

{чтение данных}

end;

4) если необходимо дозаписывать в файл информацию, то возможен использование комбинации первого и второго случая:

а) AssignFile (F, ‘имя’);

Append (F);

{запись}

Close (F);

б) AssignFile (F, ‘имя’);

Append (F);

{чтение}

Close (F);

Модули

Это средства, позволяющие организовать совместную работу отдельно от транслируемых программ (программных единиц)

С помощью этого средства модно реализовать библиотеки программ, т. е. передавать программы не в виде исходного текста, а уже готового к компановке модуля. Структура модуля аналогична структуре программы. Для модуля обязателен заголовок.

UNIT имя модуля

В отличие от программы тело модуля (раздел операторов) может отсутствовать. Раздел операторов используется для инициализации переменных модуля и исполняется перед выполнением операторов программы.

Кроме того модуль содержит ещё 2 части:

- интерфейсная часть

- исполнительная часть

Интерфейсная часть начинается со слова interface.

Через интерфейсную часть осуществляется связь основной программы с модулем или модуля с модулем.

 

Овал: Модуль 3

 

Модуль 2

 
 

В интерфейсной части указываются объекты, доступные пользователям модуля – эта часть называется открытой часть модуля.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8