Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Delphi_Ч2.doc
Скачиваний:
15
Добавлен:
02.11.2018
Размер:
1.7 Mб
Скачать
      1. Чтение данных из файла

Чтение данных из текстового файла возможно в случае открытия файла с помощью процедуры Reset. При открытии файла с помощью этой процедуры текущая позиция файла находится в начале файла

После того, как файл открыт, можно осуществить чтение данных из файла при помощи инструкций read или readLn.

В общем виде эти инструкции будут иметь вид:

read ( f, a1, a2, … , an);

readLn (f, a1, a2, … , an);

В этой записи f – файловая переменная; a1 , a2 .. an – это список параметров ввода. Параметром ввода может быть только переменная одного из простых типов (Char, String, Integer, Real).

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

Количество считываемых символов для каждого параметра ввода зависит от типа этого параметра.

После считывания последовательности символов производится автоматическое преобразование последовательности символов в значение заданного типа. Следует заметить, что преобразования требуют даже данные типа String. Если преобразование не удается, фиксируется ошибка ввода-вывода, которая может быть обработана, например, с помощью конструкции try … except … end.

После завершения считывания информации файловая позиция устанавливается на первом непрочитанном символе.

Рассмотрим пример. Пусть текущая позиция файла перед выполнением инструкции read находится в положении, показанном на рисунке 12.1.

Рисунок 12.1 – Образное представление текстового файла и места текущей позиции до операции чтения

После выполнения фрагмента кода:

var s1, s2: String[4]; i: integer;

begin

read( f , s1, i, s2) ;

. . .

Значения переменных будут следующими:

s1 = 'Вам ’

i = 17

s2 = ‘лет ’

Текущая позиция файла в результате считывания информации примет положение, показанное на рисунке 12.2.

Рисунок 12.2 – Образное представление текстового файла и места текущей позиции после операции чтения read

Процедура readLn отличается от read только тем, что после чтения информации из файла для всех параметров ввода, переводит файловую позицию на новую строку, независимо от того, закончилась текущая строка или нет.

Если в процедуре readLn список параметров ввода пуст, то она просто переводит файловую позицию к началу следующей строки.

Например, если бы в предыдущем примере вместо процедуры read использовалась процедура readLn, то значения переменных s1, i, s1 не изменились бы, но положение текущей позиции приняло бы положение, показанное на рисунке 12.3.

Рисунок 12.3 – Образное представление текстового файла и текущей позиции после операции readLn

Особенности чтения чисел из текстового файла

При обработке параметра ввода, которому соответствует числовой тип, процедура read или readLn выполняет следующие действия:

  • пропускаются пробелы, символы табуляции, маркеры конца строк, которые считаются незначащими символами-разделителями;

  • считывается последовательность значащих символов до появления нового незначащего символа-разделителя (пробела, конца строки, символа табуляции);

  • выделенная таким образом подстрока рассматривается как символьное представление числа соответствующего типа и преобразуется в число;

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

Рассмотрим пример. Пусть текстовый файл ‘c:\numbers.txt’ содержит следующие строки:

24 15 32

45 28

56 71 34

Тогда, в результате выполнения последовательности инструкций:

AssignFile( f ,c:\numbers.txt’);

Reset( f );

Read( f , a, b );

Readln( f , c , d );

Read( f , p );

Значения переменных будут следующими:

a = 24, b = 15, c = 32, d = 45, p = 56.

Число 28 будет пропущено, так как процедура readLn( f , c , d ) после считывания чисел 32 и 45 перевела файловую позицию в новую строку.