Определение количества элементов в файле
Функция
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.