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

Особенности чтения данных типа String

При чтении из файла значения переменной типа String считывается столько символов, сколько указано в объявлении типа для данной переменной, но не больше, чем в текущей строке. Напомним, что если длина явно не задана, то она будет равна 255..

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

Мать Иванова Мария Николаевна

Отец Иванов Павел Федорович

Сын Иванов Александр Павлович

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

var f: TextFile; rodstvo: String[5]; name: String[8];

begin

assignFile( f ,c:\Family.txt’);

reset( f );

readln( f , rodstvo, name );

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

rodstvo = ‘Мать ‘

name = ‘Иванова ’

Если же последовательность инструкций будет такой:

var f: TextFile; rodstvo, name: String;

begin

assignFile( f ,c:\Family.txt’);

reset( f );

readln( f , rodstvo, name );

То значения переменных после чтения файла будут следующими:

Rodstvo = ‘Мать Иванова Мария Николаевна‘

Name = ‘ ’.

В этом примере длина переменных явно не указана, поэтому для первой переменной были прочитаны все символы первой строки, а для второй переменной символов не хватило, поэтому она оказалась пустой. Переход на новую строку был выполнен при завершении процедуры.

Рассмотренные примеры свидетельствуют о том, что чтение строковых переменных из текстовых файлов с помощью процедуры read() требует тщательной подготовки текстового файла. Необходимо учитывать заявленную длину строки и именно столько позиций отводить для нее в текстовом файле. Иногда такой ввод называют вводом по шаблону. Это не очень удобно. Еще одно неудобство состоит в том, что реальные длины строковых переменных часто меньше заявленной длины строки, и при таком способе ввода они будут дополняться пробелами справа до заявленной длины. Поэтому значения переменных типа строка символов удобнее всего располагать в текстовом файле отдельными строками и считывать их с помощью процедуры readLn().

При выводе переменных или значений выражений типа строка символов в текстовый файл допускается использовать спецификатор длины строки в виде числа отделенного от переменной двоеточием. Это число указывает, сколько позиций в файле отводится для данной переменной. Если число меньше реальной длины строки, то строка обрезается. А если длина строки меньше, то строка слева добавляется пробелами. Например.

S:=’строка’;

Write(f1,s:3); // Получим ‘стр’

Write(f1,s:10); // Получим ‘ строка’

Особенности чтения и записи символов

Если переменная, читаемая из текстового файла, имеет символьный тип, то процедура read считывает очередной символ из файла и присваивает переменной его значение, независимо от этого значения, включая и символы перевода строки.

Аналогично происходит и запись символьных переменных.

В качестве примера можно рассмотреть процедуру посимвольного переписывания текстового файла f1 в текстовый файл f2.

var ch:Char;

begin

reset(f1); rewrite(f2);

while not eof(f1) do begin

read(f1,ch);

write(f2,ch);

end;

сloseFile(f1);

сloseFile(f2);