При выполнении вызова read(f, X) переменной X типа char присваивается доступный символ текста, каким бы он ни был, а доступным становится следующий за ним. Исключением является случай, когда доступен конец файла – тогда значением X становится символ chr(26), и он же остается доступным. Итак, при чтении символов: пробелы, символы табуляции и конца строки обрабатываются так же, как и все другие символы.
Пример:
Рассмотрим выполнение такой программы:
program eofad;
const eo=chr(26);
var f : text; ch : char;
begin
assign(f, ‘eofad.dat’);
rewrite(f);
writeln(f, ‘abc’, eo, ‘qq’); {запись 6 символоввфай
close(f);
reset (f);
while not eof(f) do begin
{в тексте есть доступный символ, и он не является chr(26)}
read(f, ch); {доступный символ читается в переменную ch}
write(ch)
end;
close(f);
readln
end.
При ее выполнении на экране будет напечатано лишь abc. Дело в том, что после того, как прочитан символ с, доступным становится chr(26). Далее выполняется вызов eof (f), из него возвращается значение true, и выполнение цикла заканчивается.
Если переменная Xстрочного типа, то при выполнении вызова read(f, X) символы до ближайшего слова eol читаются и присваиваются элементам строки х; доступным становится eol т.е. chr (13) в системе Turbo Pascal . Если символов текста до слова eol больше, чем умещается в X, то X заполняется ими до конца и доступным становится первый символ за прочитанными в X.
Если перед чтением строки Xдоступен символ eol, то он остается доступным, а значением X становится пустая строка. Вот почему мы рекомендуем не применять процедуру read при чтении строк.
Особенно опасным является применение read при вводе строк в цикле. Если после ввода строки доступным символом станет eol, то при дальнейших попытках чтения строк они будут получать значение ‘‘ (пустая строка), eol будет оставаться доступным и выполнение программы может “зациклиться”. Например, при выполнении цикла вида:
while not eof(f) do begin
read (f, x); {???}
обработка х
end
где х – переменная-строка, читаются лишь символы первой строки текста, после чего конец строки остается “доступным навсегда”. Цикл выполняется, компьютер “висит”, а пользователь программы начинает нервничать и ругаться.
Если при чтении строки доступен конец текста, он аналогично остается доступным, а переменной-строке присваивается значение ‘’ (пустая строка).
Чтение символов и строк с помощью процедуры readln аналогично чтению с помощью read, но после чтения символов остаток строки текста пропускается, т.е. доступным становится символ, следующий за ближайшим словом eol. Советуем задавать чтение строк с помощью процедуры readln.
Список имен переменных в вызове readln может быть пустым; в таком случае пропускается текущая строка текста.
6. Чтение текста со строками ограниченной длины
Во многих текстах длина строк неодинакова, но ограничена, как правило, числом, которое не превышает 255 – максимальную длину строк типа string. Использование переменных этого типа позволяет очень просто описывать чтение текстов.
Алгоритмы решения задач по обработке таких текстов часто имеют общий вид:
while not eof (f) do begin
readln (f, s) ; {s имееттип string}
обработкастроки s;
end.
Задание для самостоятельного выполнения:
Написать программу вывода содержимого текстового файла в шестнадцатиричном формате.
Экран должен быть разделён на две части: в левой – узкой, должен выводиться обычный текст, в правой – в шестнадцатиричном формате.
Обеспечить момент скроллинга, т. е. передвижение по тексту при нажатии клавиш: вверх, вниз, PageUp, PageDown – причём текст при нажатия на эти клавиши должен одновременно перелистываться в обоих окнах.
Примечание:
В данной программе нужно учесть, что не любой символ можно вывести на экран.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.