Лабораторная работа № 4
Работа с файлами
1) Работа с типизированными файлами
Формат описания файлового типа:
Type <имя типа>= file of <тип компонент>;
Var <имя переменной>: <имя типа>;
или
Var <имя переменной>: file of <тип компонент>;
Например:
Var f1: file of integer;
f2: file of real;
f3: file of char;
Процедуры и функции работы с файлами:
1. AssignFile(f, fname) – связывание файловой переменной f с именем файла fname. В дальнейшем обращение к файлу происходит через файловую переменную f. Этой процедурой всегда начинается любая работа с файлом.
2. Rewrite(f) – создание нового файла. Если файл с заданным именем был непустой, то его содержимое уничтожается. Вновь созданный файл открывается для записи.
3. Reset(f) – открывает файл и устанавливает указатель в начало файла. Содержимое файла не изменяется, а сам файл открывается для чтения.
4. Read(f,х1[,х2,…,хn]) – чтение из файла текущей компоненты в переменную P1. Указатель при этом перемешается на следующую компоненту файла.
5. Write(f,х1[,х2,…,хn]) – запись значения переменной p1 в файл на то место, где стоит указатель. После записи указатель перемешается к следующей компоненте.
|
|
6. CloseFile(f) – закрывает файл.
7. Eof(f) – логическая функция – возвращает true, если указатель файла находится в конце файла и false в противном случае;
8. IOResult(f) – проверяет результат последней операции с файлом, выдает 0, если не было ошибок, и номер ошибки ввода-вывода, если она произошла.
9. FilePos(f) – возвращает текущую позицию в файле.
Пример 1. Записать таблицу квадратов целых чисел в файл с именем PRIMER.DAT.
Const n=100;
procedure TForm1. Button1Click(Sender: TObject);
Var F: file of integer;
i,a:integer;
Begin
AssignFile(f, 'c:\stud\f1\primer.dat');
Rewrite(f); //создание нового файла
For i:=1 to n do begin
a:=i*i;
Write(f,i,a); //запись таблицы в файл
end;
CloseFile(f); //закрытие файла
End;
Проверить наличие файла primer.dat.
Пример 2. Просмотреть таблицу квадратов, записанную в файле primer.dat.
Для просмотра содержимого файла можно использовать компонент Listbox.
procedure TForm1.Button2Click(Sender: TObject);
var f: file of integer;
a,b:integer;
st1,st2: string;
Begin
AssignFile(f,'primer.dat');
Reset(f); //открываем для чтения
While not eof(f) do begin //пока нет конца файла выполнять
read(f,a,b); //читаем две компоненты - число и его квадрат
Str(a:3,st1);
Str(b:8,st2);
Listbox1.Items.Add(st1+st2); //выводим на экран
end;
CloseFile(f); //закрываем файл
end;
Задачи для самостоятельного решения
1. Заполнить файл случайными числами.
2. Найти количество и сумму положительных чисел в файле.
3. Найти все числа из файла, кратные данному.
4. Найти максимальный элемент файла и его порядковый номер.
5. Найти первый отрицательный элемент файла (или отметить, что он не существует).
6. Сосчитать, сколько в файле положительных, отрицательных и равных нулю чисел.
|
|
7. В файле содержатся числа от 1 до 10. Сосчитать, сколько раз встречается каждое из них.
8. Разбить данный файл на два, записав в первый из них положительные, а в другой - все остальные числа.
9. Просчитать файл и записать его элементы в массив, сосчитав количество элементов.
10. Проверить, является ли файл целых чисел упорядоченным по возрастанию.
11. Определить, встречается ли число х в данном файле целых чисел.
2) Работа с текстовыми файлами
Формат описания текстовых файлов:
Var <имя переменной>: TextFile;
Стандартный идентификатор TextFile зарезервирован и не может быть использован в других целях.
Например:
Var f,f1,f2:TextFile;
Процедуры и функции работы с текстовыми файлами.
1. AssignFile(f,fname); – связывание физического имени, содержащимся в строке fname, с логическим именем f.
2. Rewrite(f); – открытие для создания нового текстового файла (для записи).
3. Reset(f); – открытие уже существующего текстового файла (для чтения).
4. Append(f); – открытие уже существующего текстового файла (для дозаписи в конец – только для текстовых файлов).
5. CloseFile(f); – закрытие файла.
6. Readln(f,S); – чтение из файла f текущей строки и запись ее в S.
7. Writeln(f,S); – запись строки S в файл f.
8. Read(f,Ch); – чтение текущего символа ch из файла f.
9. Write(f,Ch); – запись символа ch в файл f.
Процедура Writeln(f); записывает в файл "пустую строку", а процедура Readln(f); пропускает очередную строку.
10. Eof(f); – возвращает true, если конец файла.
11. Eoln(f); – возвращает true, если указатель файла достиг маркера конца строки (только для текстовых файлов).
Пример 3: Создать текстовый файл (количество строк заранее не известно).
Var Filename: String; //строка для имени файла
F: TextFile; //файловая переменная
procedure TForm1.Button1Click(Sender: TObject);
Begin
Filename:=Edit1.Text; //получаем имя файла
AssignFile(f,FileName);
Edit2.SetFocus; //курсор помещаем в окно для ввода текста
Rewrite(f);
end;
procedure TForm1.Button2Click(Sender: TObject);
var St: string;
Begin
St:=Edit2.Text; //считываем очередную строку
If St<>''