Определение количества элементов в файле

Функция

FileSize (<имя файловой переменной>)

возвращает количество элементов в файле.

Удаление и переименование

Файлов

Удаление файлов. Процедура

Erase (<имя фай­ловой переменной>)

удаляет файл на внешнем но­сителе, с которым связана файловая переменная.

Переименование файлов. Процедура

Rename (<имя файловой переменной>,

'<новое имя на дис­ке>')

переименовывает файл, связанный с данной фай­ловой переменной.

Пример 1

Ввести с клавиатуры и записать в файл DAN1.DAT последовательность целых чисел.

Решение

Сначала свяжем файловую переменную с конкрет­ным внешним файлом при помощи процедуры Assign. Откроем файл для записи посредством процедуры Rewrite. Признак конца последовательности чисел − ввод числа 0.

Program Example_83;

Var F: File Of Integer;

n: Integer;

Begin

Assign(F, 'DAN1.DAT');

{Связываем файловую переменную

с файлом на диске}

Rewrite(F); {Открываем файл для записи}

Writeln('Конец ввода чисел - 0');

Repeat {Пока не будет введен 0}

Writeln('Введите число ');

Readln(n) ;

{Если введено число, отличное от 0, то

записываем его в файл}

If n<>0 Then Write(F, n);

Until n=0;

{Если введен 0, то выходим из цикла}

Close(F); {Закрываем файл}

End.

Пример 2

В файле DAN1.DAT записаны целые числа (см. пре­дыдущую задачу). Вычислить сумму элементов файла и результат вместе с исходными данными записать в файл DAN2.DAT.

Program Example_84;

VarF1, F2: File Of Integer;

{Файловые переменные}

S, N: Integer;

Begin{С файловой переменной F1 связываем

файл на диске}

Assign(F1, 'DAN1.DAT');

Reset(F1); {Открываем файл F1 для чтения}

Assign(F2,'DAN2.DAT') ;

{С файловой переменной F2 связываем

файл на диске}

Rewrite(F2) ;

{Открываем файл F2 для записи}

S:=0;

While Not EOf (F1) Do

{Проверка на конец файла F1}

Begin

Read(F1, N);

{Чтение элемента из файла F1}

S:=S+N; {Накопление суммы}

Write(F2, N);

{Запись элемента в файл F2}

end;

Write(F2, S); {Запись суммы элементов

в конец файла F2}

Write('Результат находится

в файле DAN2.DAT')

Close(F1); {Закрываем файл F1}

Close(F2); {Закрываем файл F2}

Readln;

End.

Текстовые файлы

Текстовые файлы состоят из символьных строк. Стро­ки могут иметь различную длину, и в конце каждой строки стоит признак конца строки. Для описания текстовых файлов используется служебное слово Text:

Var A: Text;

Обработка текстовых файлов

Для обработки текстовых файлов используются те же процедуры и функции, что и для обработки обычных ти­пизированных файлов. Для связывания файловой перемен­ной с файлом на диске употребляется процедура Assign. Текстовые файлы могут быть открыты для чтения про­цедурой Reset или для записи процедурой Rewrite.

Для чтения данных применяется процедура Read. Если необходимо после чтения данных перейти на сле­дующую строку, то используется процедура Readln. Если необходимо просто перейти к следующей строке, то можно использовать процедуру

Readln (<имя фай­ловой переменной

текстового файла>),

кото­рая устанавливает файловый указатель на первый эле­мент следующей строки.

Процедура Write записывает данные в текущую строку. Если надо записать данные и перейти к следу­ющей строке, то можно использовать процедуру Writeln. Если требуется только перейти для записи на новую строку, то применяется процедура

Writeln (<имя файловой переменной

тексто­вого файла>),

которая записывает в файл признак конца строки и устанавливает файловый указатель на начало следующей строки.

Так как в строках может быть разное количество символов, имеется логическая функция

Еоln (<имя файловой переменной

текстового файла>),

ко­торая принимает значение True, если достигнут конец строки.

Кроме перечисленных процедур и функций, к текс­товым файлам применяется процедура

Арреnd (<имя файловой переменной

текстового файла>).

Она открывает файл для "дозаписи", помещая файловый ука­затель в конец файла.

Пример 1

Дан текстовый файл, содержащий только целые чис­ла, в каждой строке может быть несколько чисел, кото­рые разделяются пробелами. Вывести на экран все числа с учетом разбиения на строки и подсчитать количество элементов в каждой строке.

Решение

Пусть в файле содержится следующая информация:

-32    
-5 -8
-8 -12      
 
         
-1 -2 -4        
-1 -2        

Этот файл можно создать в среде Турбо Паскаль следующим образом:

¨ создайте новый файл посредством командыNewменю File;

¨ запишите все числа, разделяя их пробелами, и разбейте на строки, как указано в задании;

¨ сохраните файл, например, под именем INT1.DAT. Этот файл используется в программе, которая при­ведена ниже.

Program Example_85;

Var F: Text;

х, k: Integer;

Begin

Assign(F, 'INT1.DAT'); {Связываем

файловую переменную с файлом на диске}

Reset(F); {Открываем файл для чтения}

While Not Eof (F) Do

{Пока не достигнут конец файла}

Begin

k:=0; {Счетчик элементов строки}

While Not Eoln(F) Do

{Пока не достигнут конец строки}

Begin

Read(F, x);

{Считываем очередное число}

Write(х, ' ');

{Выводим его на экран}

Inc(k); {Увеличиваем счетчик }

End;

Writeln('В строке ', k,' элементов');

Readln(F);

{Переходим к следующей строке файла}

End;

Close(F); {Закрываем файл}

Readln;

End.

Пример 2

Дан текстовый файл, содержащий программу на язы­ке Паскаль. Проверить эту программу на соответствие числа открывающих и закрывающих круглых скобок. Считать, что каждый оператор программы занимает не более одной строки файла.

Решение

Так как по условию задачи каждый оператор зани­мает не более одной строки, то будем подсчитывать ко­личество открывающих и закрывающих скобок в каж­дой строке.

Program Example_86;

Var F: Text;

k1, k2, n: Integer;

Ch: Char;

Logic, Pp: Boolean;

Begin{С файловой переменной F связываем

файл на диске}

Assign(F, 'TEST.PAS');

Reset(F); {Открываем файл для чтения}

n:=0; {Счетчик количества строк}

Logic:=True; {Пока ошибок не было,

переменная Logic имеет значение True}

While Not EOf (F) Do

{Пока не достигнут конец файла}

Begin

Inc(n); {Увеличиваем счетчик

количества строк}

k1:=0; {Счетчик количества

открывающих скобок}

k2:=0; {Счетчик количества

закрывающих скобок}

Pp:=False; {Переменная Pp

предназна­чена для определения ошибки расста­новки скобок в строке. Она

принимает значение True, когда

обнаруживается ошибка}

While Not Eoln (F) Do {Пока не

достигнут конец текущей строки файла}

Begin

Read(F, Ch); {Читаем очередной

символ строки. Если встретили

открывающую скобку, то увеличиваем

соответствующий счетчик}

If Ch='(' Then Inc(k1);

{Если закрывающая скобка стоит

после открывающей (k1>k2), то

просто уве­личиваем счетчик. Иначе –

устанавли­ваем Pp в True}

If (Ch=')') Then

If (k1>k2) Then Inc(k2)

Else Pp:=True;

End;

{Если не все закрывающие скобки

расставлены (k1<>k2) или одна из

закрывающих скобок стоит раньше

открывающей (Pp=True), то была

ошибка расстановки}

If (k1<>k2) or Pp Then

Begin

Writeln('Ошибка в ',N,' строке');

Logic:=False;

End;

Readln(F);{Переходим на следующую

строку файла}

End;

{Если значение переменной Logic осталось

ис­тинным, то ошибок расстановки не было}

If Logic Then

Writeln('Cкобки расставлены правильно');

Close(F); {Закрываем файл}

Readln;

End.

Наши рекомендации