Текстовые файлы

Файловый тип. Режимы доступа
Текстовые файлы предназначены для хранения символов. При записи информации в текстовый файл данные преобразуются к символьному типу. Последовательность символов образуют строку файла. Каждая строка завершается управляющими символами конца строки, а конец файла символами признака конца файла. Специальные логические функции eoln и eof позволяют определить конец строки или конец файла (соответственно). Текстовые файлы являются файлами последовательного доступа. Это означает, что работа с данными осуществляется путем построчного чтения/записи, последовательно, начиная с первой строки. Для работы с текстовым файлом необходимо в разделе описания определить файловую переменную, а в основной программе связать эту переменную с конкретным файлом с помощью процедуры assign.

var
    f:text;
...
begin
    assign(f, '<путь к файлу>')
...

Существует три режима доступа к файлу с помощью соответствующих процедур:

  • rewrite(<Файловая переменная>)
  • Файл открыт для записи. Если файл не существует, то он будет создан (как определено в процедуре assign). Если файл существует, то содержимое файла удалится, а указатель будет установлен вначале.

  • reset(<Файловая переменная>)
  • Файл открыт для чтения. Файл должен существовать и права (для чтения) должны быть установлены.

  • append(<Файловая переменная>)
  • Открывает существующий файл для добавления данных в конец файла. существующие данные сохраняются. Если файл ранее уже был открыт с помощью reset или rewrite, то использование append приведет к закрытию этого файла и открытию его вновь, но уже для добавления элементов.

Работа с файлом в текущем режиме завершается процедурой close(<Файловая переменная>). Эта процедура не закрывает связь файловой переменной с файлом, с которым определена связь ранее в процедуре assign.
Процедуры чтения и записи
  • readln
  • readln(f, x1, x2, x3, ..., xn);
    

    Процедура readln читает (вводит) из файла элементы x1, x2, x3, …, xn (имена переменных разных типов) и переводит указатель на новую строку. readln без параметров (в качестве параметра выступает только файловая переменная) переводит указатель на новую строку без чтения элементов.

  • writeln
  • writeln(f, x1, x2, x3, ..., xn);
    

    Процедура writeln записывает (выводит) в файл элементы x1, x2, x3, …, xn (имена переменных разных типов) и переводит указатель на новую строку. Элементы автоматически преобразуются к символьному типу.

  • Следует обратить внимание на то, что процедуры чтения/записи позволяют работать с переменными разных типов. При чтении последовательности символов (обычно эти данные разделены пробелами) происходит автоматическое преобразование к значению того типа, которому принадлежит переменная используемая в списке ввода. Если преобразование невозможно (ожидаемая последовательность символов не может быть преобразована к соответствующему типу) будет выдана ошибка ввода/вывода.
Пример 1
Создать файл (input1) в который записать 10 строк. В каждой строке записать три целых числа разделенные пробелами. Создать другой файл (input2) в который записать в каждой строке среднее арифметическое по данным строкам исходного файла (input1).

uses
	crt;
var
	i,a,b,c:shortint;
	s:real;
	f1,f2:text;
begin
	clrscr;
	assign(f1,'input1');
	assign(f2,'input2');
	i:=0; rewrite(f1);
	randomize;
	while i <= 10 do
	begin
		inc(i);
		// Запись трех случайных чисел в файл input1
		writeln(f1, random(10), ' ', random(10), ' ', random(10))
	end;
	close(f1);
	rewrite(f2); reset(f1);
	// Использование логической функции eof для последовательного чтения
	// файла input1 пока не будет достигнут конец файла
	while not(eof(f1)) do
	begin
		// Вводим переменные a, b, c из файла input1
		readln(f1,a,b,c);
		s:=(a+b+c)/3;
		// Выводим среднее арифметическое в файл input2 с форматом вывода
		writeln(f2,s:6:2);
	end;
	close(f1); close(f2);
end.

Содержимое файла input1

3 5 9
3 3 7
1 9 6
9 5 9
6 3 3
4 6 0
4 5 9
6 7 5
7 3 3
8 6 2
3 0 9

Содержимое файла input2

  5.67
  4.33
  5.33
  7.67
  4.00
  3.33
  6.00
  6.00
  4.33
  5.33
  4.00

Добавить комментарий