Рассмотрим теперь пример чтения уже существующего файла, в качестве файла используем созданный в предыдущем примере файл text.txt.
ProgramTextIn;
UsesCRT;
const name = 'text.txt'; // имя файла в текущем каталоге
varf : text; // файловая переменная
a,b : integer; // переменные для чтения
begin
assign (f,name); // связывание файловой переменной с именем файла на диске
reset (f); // открытие существующего файла на чтение
repeat
readln(f,a,b); // чтение из файла информации из целой строки
writeln(a:5,b:5); // вывод в окно CRT
untilEof (f); // Функция eof возвращает true при достижении конца файла
close (f); // закрытие файла
end.
В этом пример надо обратить внимание на следующее: 1. reset (f) – открытие существующего файла на чтение, если файла нет, то произойдет ошибка выполнения программы;
2. readln (f,…) – оператор чтения из файла, при работе с файлами действие операторов read (f,…) и readln (f,…) различно, первый прочитает необходимую информацию посредине строки, так что следующий оператор чтения продолжит чтение со средины строки. Оператор readln после чтения информации пропустит все оставшиеся до конца строки символы, таким образом следующий оператор чтения начнет ввод с начала следующей строки;
3. Функция eof (f) возвращает всегда ложное значение, кроме одного единственного случая: достигнут конец строки. Для того, чтобы обойти всякие тонкие случаи, когда в конце файла есть несколько символов «конец строки» или лишние пробелы и символы табуляции, рекомендуются использовать функцию SeekEof (f) – ее действие аналогично eof, но она возвращает true, если до конца файла есть только «пустые» символы: конец строки, табуляция и пробелы [14] В ABC Pascal существуют две аналогичные функции Eoln и SeekEoln, которые вместо конца файла ищут конец строки.
.
Задание 14
1. Напишите программу, создающую таблицу умножения в файле mult .txt. Для ее создания используйте вложенные циклы for(стр. 20). Откройте получившийся файл в текстовом редакторе (3балла)
2. Напишите программу чтения файла, созданного в упражнении 14.1 (2 балла)
- 40 -
Тема №15 Работа со строками символов
В языке Pascal присутствуют два типа для работы с символьной информацией. Переменные типа char могут принимать значение одного из 256 символов стандартной таблицы кодировки. Константы типа char записываются в виде одного символа в апострофах. Символьные переменные можно вводить оператором readln, но при этом придется еще нажимать Enter для подтверждения ввода. В модуле CRT есть очень удобная функция ReadKey, которая вводит символьную переменную без подтверждения ввода.
Пример :
var c : char;
…
c:='a';
readln(c);
c:=ReadKey;
|
Для работы с символьными переменными в языке Pascal есть две специальные функции: ord и chr. Первая функция возвращает код (порядковый номер в таблице кодировки) символа, например ord('A') вернет значение 65. Вторая функция имеет обратный смысл, по коду, возвращает символ, т.е. chr(65) будет символ 'A'. Следующий пример выводит все символы кодовой таблицы, начиная с кода 32 [15] Коды с 0 по 31 являются служебными и в таблице ANSI им не соответствуют никакие печатные символы.
и заканчивая кодом 255. Оператор ifв цикле производит переход на новую строку после вывода линейки из 32 символов. Результат работы программы приведен ниже.
ProgramANSI;
UsesCRT;
varc : char;
i : integer;
begin
fori:=32 to255 do
begin
write(Chr (i));
if(i+1) mod 32 = 0 thenwriteln;
end;
end.
В языке Turbo Pascal появился специальный тип string, который имеет черты массива символов, а также некоторые дополнительные удобные возможности. Тип string реализован и в языке ABC Pascal.
Строки в Pascal ABC имеют тип string и состоят из не более чем 255 символов. При описании var s: string; под переменную s отводится 256 байт, при этом в нулевом байте хранится длина строки.
Для экономии памяти предусмотрено описание вида var s1: string [40]; В этом случае под строку отводится 41 байт (нулевой байт – под длину строки). В случае присваивания переменной s1 строки из более чем 40 символов лишние символы отсекаются, и длина строки s1 полагается равной 40.
Читать дальше