ВУЗ:
Составители:
Рубрика:
21
конца строки (символ#13) или конца файла (символ#26) и False во всех про-
чих случаях. Функция как бы предчувствует результат предстоящего чтения
и анализирует его. Необходимость в EOLn (f) возникает всякий раз, когда за-
ранее неизвестно, где встретится конец строки. Пусть у нас имеется файл со
столбцами цифр:
DIGITS.DAT
12.3 13.2 14.4 5.7 126.0[13][10]
17.8 -7.6 100 456 987.6[13][10]
55.5 6.06 7.8 0.00 10.11[13][10]
Как автоматически определить число столбцов в нем и организовать
чтение? С помощью EOLn. В приведенном примере вычисляется средне-
арифметическое (S) для каждой записи файла
var
f:Text; {логический текстовый файл}
Ncol:Byte; {счетчик числа столбцов}
R:Real; {число для чтения из файла}
begin
assign(f, ′DIGIT.DAT′); {связывание файла}
reset(f); {открытие f для чтения}
Ncol:=0; {стартовое значение Ncol}
while not EOLn(f) do
begin {цикл до конца строки}
read(f,R); {чтение вправо по строке}
inc(Ncol); {увеличение счетчика столбцов}
end; {конец цикла счета столбцов}
reset(f)); {возврат на первую запись в файле}
while not EOF(f) do begin {цикл до конца файла}
S:=0;
for i :=1 to N do {цикл по числу столбцов}
begin
read(f, x); S:= S+x;
end;
S:=S/N;
writeln(S);
readln (f); {переход на следующую запись файла}
end; end.
22
Существует разновидность функции EOLn без параметров. В этом
случае считается, что ее действие относится к стандартному файлу Input, т.е.
вводу с клавиатуры. Здесь функция EOLn возвращает TRUE не перед, а после
прохождения признака конца строки: сразу после нажатия клавиши ввода.
Более того, от EOLn без параметра не дождетесь значения False. Она “подве-
шивает” программу и возвращает управление следующему оператору только
после нажатия клавиши ввода.
В руководстве языка приводится способ организации паузы до нажа-
тия клавиши ввода: Writeln(EOLn);
5) Функция SeekEOLn (VAR f: Text) : Boolean – является “ближай-
шей родственницей” функции EOLn(f). Файл f должен быть текстовым и
открытым для чтения. Функция возвращает значение TRUE, если до конца
строки (символ #13) или до конца файла (символ #26) могут быть считаны
только пробелы и (или) символы табуляции (символ #9). Значение TRUE
также вернется, если текущее положение непосредственно предшествует
символам #13 или # 26. Другими словами, SeekEOLn всегда вернет TRUE, ес-
ли EOLn на ее месте вернет TRUE. Но в отличие от EOLn функция SeekEOLn
как бы “видит” конец строки (или файла) через пробелы и знаки табуляции.
SeekEOLn ориентирована, главным образом, на работу с текстовыми
файлами чисел. Последний пример из описания EOLn можно было бы пере-
писать, заменив EOLn на SeekEOLn. От этого он заработал бы только лучше.
Действительно, чтобы EOLn вернула TRUE, нужно “упереться” в признак
конца строки. А для этого надо убедиться, что “пустопорожние” пробелы по-
сле последнего числа в строке не являются числами: “съедается” время.
SeekEOLn же игнорирует все пробелы и табуляции и “видит” конец издалека,
ускоряя обработку.
6) Функция SeekEOF(VAR f : Text) : Boolean – возвращает TRUE,
если следующим за символом является конец файла(#26), или если перед
концом файла имеются только пробелы, и (или) символы табуляции (#9), и
(или) признаки конца строки (#13). Короче говоря, символы #9, #13,
#32(пробел) для SeekEOF являются “прозрачными”, и если сквозь них “ви-
ден” конец файла #26, то функция возвращает значение TRUE. Во всех
прочих случаях вернется значение FALSE.
Функция позволяет найти смысловой конец файла, а не физический.
Это полезно при работе с числами (реже с символами). Так, цикл чтения из
файла f:
конца строки (символ#13) или конца файла (символ#26) и False во всех про- Существует разновидность функции EOLn без параметров. В этом чих случаях. Функция как бы предчувствует результат предстоящего чтения случае считается, что ее действие относится к стандартному файлу Input, т.е. и анализирует его. Необходимость в EOLn (f) возникает всякий раз, когда за- вводу с клавиатуры. Здесь функция EOLn возвращает TRUE не перед, а после ранее неизвестно, где встретится конец строки. Пусть у нас имеется файл со прохождения признака конца строки: сразу после нажатия клавиши ввода. столбцами цифр: Более того, от EOLn без параметра не дождетесь значения False. Она подве- DIGITS.DAT шивает программу и возвращает управление следующему оператору только 12.3 13.2 14.4 5.7 126.0[13][10] после нажатия клавиши ввода. 17.8 -7.6 100 456 987.6[13][10] В руководстве языка приводится способ организации паузы до нажа- 55.5 6.06 7.8 0.00 10.11[13][10] тия клавиши ввода: Writeln(EOLn); Как автоматически определить число столбцов в нем и организовать 5) Функция SeekEOLn (VAR f: Text) : Boolean является ближай- чтение? С помощью EOLn. В приведенном примере вычисляется средне- шей родственницей функции EOLn(f). Файл f должен быть текстовым и арифметическое (S) для каждой записи файла открытым для чтения. Функция возвращает значение TRUE, если до конца строки (символ #13) или до конца файла (символ #26) могут быть считаны var только пробелы и (или) символы табуляции (символ #9). Значение TRUE f:Text; {логический текстовый файл} также вернется, если текущее положение непосредственно предшествует Ncol:Byte; {счетчик числа столбцов} символам #13 или # 26. Другими словами, SeekEOLn всегда вернет TRUE, ес- R:Real; {число для чтения из файла} ли EOLn на ее месте вернет TRUE. Но в отличие от EOLn функция SeekEOLn begin как бы видит конец строки (или файла) через пробелы и знаки табуляции. assign(f, ′DIGIT.DAT′); {связывание файла} SeekEOLn ориентирована, главным образом, на работу с текстовыми reset(f); {открытие f для чтения} файлами чисел. Последний пример из описания EOLn можно было бы пере- Ncol:=0; {стартовое значение Ncol} писать, заменив EOLn на SeekEOLn. От этого он заработал бы только лучше. while not EOLn(f) do Действительно, чтобы EOLn вернула TRUE, нужно упереться в признак begin {цикл до конца строки} конца строки. А для этого надо убедиться, что пустопорожние пробелы по- read(f,R); {чтение вправо по строке} сле последнего числа в строке не являются числами: съедается время. inc(Ncol); {увеличение счетчика столбцов} SeekEOLn же игнорирует все пробелы и табуляции и видит конец издалека, end; {конец цикла счета столбцов} ускоряя обработку. reset(f)); {возврат на первую запись в файле} while not EOF(f) do begin {цикл до конца файла} 6) Функция SeekEOF(VAR f : Text) : Boolean возвращает TRUE, S:=0; если следующим за символом является конец файла(#26), или если перед for i :=1 to N do {цикл по числу столбцов} концом файла имеются только пробелы, и (или) символы табуляции (#9), и begin (или) признаки конца строки (#13). Короче говоря, символы #9, #13, read(f, x); S:= S+x; #32(пробел) для SeekEOF являются прозрачными, и если сквозь них ви- end; ден конец файла #26, то функция возвращает значение TRUE. Во всех S:=S/N; прочих случаях вернется значение FALSE. writeln(S); Функция позволяет найти смысловой конец файла, а не физический. readln (f); {переход на следующую запись файла} Это полезно при работе с числами (реже с символами). Так, цикл чтения из end; end. файла f: 21 22
Страницы
- « первая
- ‹ предыдущая
- …
- 9
- 10
- 11
- 12
- 13
- …
- следующая ›
- последняя »