- •Лабораторная работа №7а (додаткове завдання – виконання за бажанням) Тема: «Работа с файлами»
- •Assign(f:Text, Name:String) Assign(f:File,Name:String)
- •Reset(f, RecSize:Word) Пример
- •Процедура
- •Текстовый файл
- •Writeln – запись всех величин с обязательной установкой маркера конца строки в файл:
- •Параметр Size при вызове может быть опущен. В этом случае размер буфера соответствует SizeOf(Buf).
- •Типизированные файлы
- •Нетипизированные файлы
- •Задания
- •20. На диске сформирован файл, структура которого приведена в п.19.
- •На диске сформирован файл, структура которого представлена на рис.
Writeln – запись всех величин с обязательной установкой маркера конца строки в файл:
Readln(Var F:Text;V1[,V2,…,Vn]);
Writeln(Var F:Text;V1[,V2,…,Vn]);
Append(F) – открывает уже существующий файл и позиционирует указатель обработки на конец файла. Используется для дозаписи информации в уже существующий файл.
Eoln(F) - возвращает булевское значение True ,если текущая файловая позиция находится на маркере конца строки, в противном случае –False.
Eof(F) - равно True , если указатель конца файла находится сразу за последним компонентом, в других случаях – False.
Пример.
Прочитать информацию из файла D.Datдлиной 10 символов из каждой записи.
Program P_L7_2;
Var
F:Text;
I:Byte;
St:String[10];
BEGIN
Assign(F,'D.dat');
Reset(F);
While not Eoln(F) do begin
Read(F,St);
Writeln('ST= ',St);
For I:=1 to 10 do St[I]:=' ';
Readln(F);
end;
Close(F);
END.
SeekEoln(F) – возвращает True при достижении маркера конца строки, пропуская все пробелы и знаки табуляции, предшествующие маркеру.
SeekEof(F) – True, если указатель находится на маркере конца файла, пропуская все знаки табуляции и пробелы, предшествующие маркеру.
Для оптимизации времени обращений к диску – весь файл считывают в память, а затем преобразованный файл записывают на диск. Для этих целей назначают свой буфер ввода-вывода Buf:
SetTextBuf(Var F:Text; Var Buf[;Size:Word]);
Параметр Size при вызове может быть опущен. В этом случае размер буфера соответствует SizeOf(Buf).
Назначение буфера переменной F распространяется до следующего использования переменной новым внешним файлом.
Пример.
Program P_L7_3;
Uses Crt;
Var
F:Text;
Ch:Char;
Buf:Array[1..500] of Char;
BEGIN
ClrScr;
Assign(F,'D.Dat');
SetTextBuf(F,Buf);
Reset(F);
While not Eof(F) do begin
Read(F,Ch);
Write(Ch);
end;
Close(F);
END.
Для исключения потери информации следует переназначение буферов производить после вызова процедуры Assign, или сразу,- после процедуры открытия файлов до любой операции обмена.
Пример программы, которая к каждой строке исходного текстового файла присоединяет порядковый номер строки:
Program P_L7_4;
Uses Crt;
Const
Num:Integer=0;
Var
F:Text;
Strn:String;
BEGIN
ClrScr;
Assign(F,'D.Dat');
Reset(F);
While not Eof(F) do begin
Inc(Num);
Readln(F,Strn);
Writeln(Num,': ',Strn);
end;
Close(F);
End.
Типизированные файлы
К типизированным файлам относятся файлы строго определенной структуры.
Пример.
………..
Type
FileRec=record
…………
end;
Var
F:File of FileRec;
…………
Единицей измерения такого набора данных является сама запись.
Длина записи определяется как SizeOf(FileRec).
Seek(F;NumRec:LongInt) – устанавливает текущую файловую переменную
F на запись с номером NumRec. F- файловая переменная для типизированных и нетипизированных наборов данных.
Для наглядного представления отличия в представлении информации в типизированных и текстовых файлах предлагается рассмотреть рис.1 и рис.2.
1-я строка
Д |
А |
Н |
Н |
Ы |
Е |
#13 |
#10 |
2-я строка
Э |
К |
С |
П |
Е |
Р |
И |
М |
Е |
Н |
Т |
А |
#13 |
#10 |
3-я строка
-
П
В
Д
-
7
#13
#10
Рис.1Представление строк в текстовом файле.
1-я строка
-
#6
Д
А
Н
Н
Ы
Е
#0
#0
#0
#0
#0
#0
2-я строка
#12 |
Э |
К |
С |
П |
Е |
Р |
И |
М |
Е |
Н |
Т |
А |
3-я строка
#5 |
П |
В |
Д |
- |
7 |
#0 |
#0 |
#0 |
#0 |
#0 |
#0 |
#0 |
Рис.2Представление строк в типизированном файле:
Структура типизированного файла:
………………
Type
FileRec=record
N-F:String[12]
End;
Var
F:File of FileRec;
…………………
FilePos(F): LongInt – функция возвращает для файла F текущую файловую позицию (номер записи, на которую она установлена) в виде значения типа LongInt.
FileSize(F):LongInt – возвращает значение размера файла (количество записей) типа LongInt.
Для пустого файла FileSize=0.
Если файл уже создан и файловая позиция установлена по Seek( ), находится где-нибудь в начале файла (FilePos(F) < FileSize(F)), то в конец файла ее позволяет перевести вызов Seek(F,FileSize(F)).
Единица измерения файла – запись; длина записи определяется как SizeOf(FileRec).
Seek(F;NumRec:LongInt) – устанавливает текущую файловую переменную F на запись с номером NumRec; F – файловая переменная для типизированных и нетипизированных файлов.