Основы алгоритмизации и программирования. Часть четвертая. Файловая система Turbo Pascal. Асламова В.С - 11 стр.

UptoLike

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