Примечание. Если 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.
Через интерфейсную часть осуществляется связь основной программы с модулем или модуля с модулем.
![]() |

![]()
![]()
![]() |
![]()

|
В интерфейсной части указываются объекты, доступные пользователям модуля – эта часть называется открытой часть модуля.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 |





