Всякий раз при
выполнении одной и той же программы (особенно при
ее отладке) приходится заново вводить исходные
данные. Удобным способом сохранения информации,
полученной в ходе выполнения программы, служит
запись этой информации на внешний Файл –
последовательность элементов одного типа,
которые хранятся по строкам. Если программа
взаимодействует с внешними файлами, то файлы
должны быть описаны в программе либо явно в
разделе переменных VAR, либо с использованием
разделов типа TYPE. Объявление файлов в разделе
переменных имеет вид:
VAR <имя файла>: FILE OF
<базовый тип>;
Например:
Var
NewFile: file of real;
File473: text;
Определение
данных с использованием раздела описания типов
TYPE делает программу более универсальной и
упрощает отладку программы. Объявление файлов в
этом случае имеет вид:
TYPE имя типа= FILE OF
базовый тип;
VAR имя файла: имя типа;
Например:
Type T1: file of real;
T2: Text;
Var FT: T1
F3: T2;
Файловые
переменные имеют специфическое применение. Над
ними нельзя выполнять никаких операций
(присваивать значения, сравнивать и т.д.). Их можно
использовать для выполнения операций с файлами
(чтения, записи, удаления файла и т.д.).
При работе с файлами автоматически
проверяются ошибки ввода-вывода. Если проверка
ошибки включена (по умолчанию или с помощью ключа
компилятора {$I+}, то при возникновении ошибки
выполнение программы автоматически завершается,
если же проверка ошибки отключена (с помощью
ключа {$I-}), программа продолжает выполняться и
можно проверить результат ввода-вывода с помощью
функции IOResult.
Стандартные
процедуры и функции для всех файлов:
Assign(F, Name)
связывает
файловую переменную
F с
внешним файлом, имеющим имя Name. Имя типа должно быть написано в
соответствии с правилами MS DOS, может включать путь и не должно
превышать 79 символов.
Reset(F)
Открывает
существующий файл, с которым связана файловая
переменная
F.
Rewrite(F)
Открывается
новый пустой файл, и ему присваивается имя,
заданное процедурой
Assign. Если
файл с таким именем уже существует, то он
уничтожается.
Close(F)
Закрывает
внешний файл,
с которым
связана файловая переменная F.
Eof(F)
Конец
файла. (Принимает значение
True или
False).
Erase(F)
Уничтожается
внешний файл, с которым связана файловая
переменная
F.
Rename(F,NewName)
Внешний
файл, с которым связана файловая переменная
F,
получает новое имя NewName. Процедура Rename применима только к закрытым
файлам.
MkDir(N, S)
Создается
новый катало, путь до которого указан параметром
Path.
GetDir(N,S)
В
переменную
S типа String записывается текущий каталог
накопителя, номер которого указан параметром N.
Параметр N имеет
следующее значение: 0 - текущий накопитель, 1 -
накопитель А:, 2 - накопитель В: и т.д.
IOResult
Функция
предназначена для поиска ошибок, возникающих при
работе с файлами. Результат последней операции
ввода-вывода.
Возвращает
число 0, если операция ввода-вывода завершилось
успешно, и другое число - в противном случае.
Стандартные
процедуры и функции для текстовых файлов:
Read(F,<список
вывода>)
Из
файла, с которым связана файловая переменная
F,
читаются значения для одной или
нескольких переменных списка ввода. Эти значения преобразуются
автоматически в тот тип данных, который имеет
переменная.
ReadLn(F,<список
вывода>)
То же,
что и процедура
Read, но
непрочитанная часть строки, включая признак
конца строки, пропускается.
Write(F,<список
вывода>)
В файл,
с которым связана файловая переменная
F, записываются значения выражений
списка вывода.
WriteLn(F,<список
вывода>)
То же,
что и процедура
Write, но
выводимая информация завершается признаком
конца строки.
Append(F)
Открытие
файла для добавления в конец информации.
EoLn(F)
Конец
строки файла. (Принимает значение
True или False).
SeekEof(F)
Отличается
от
Eof(F) тем, что стоящие в
конце файла символы пробела и табуляции
пропускаются.
SeekEoLn(F)
Отличается
от
EoLn(F) тем, что стоящие в
конце строки символы пробела и табуляции
пропускаются.
Пример
чтения и записи данных в файл
При
использовании файлов нельзя одновременно
открывать один и тот же файл для чтения и записи.
В файле Info1.txt
записаны целые числа в нескольких строках. Нужно
вычислить сумму элементов каждой строки и
результаты вместе с исходными данными записать в
существующий файл Info2.txt.
Program ReadWrite;
Uses Crt;
Var F1, F2: Text; S, Sum: integer;
Begin ClrScr;
Assign(F1,'C:/Info1.txt'); Reset(F1);
Assign(F2,'Info2.txt'); Rewrite(F2);
While not Eof(F1) do
Begin Sum:=0;
While not Eoln(F1) do
Begin Read(F1,S); Write(F2,S:2);
Sum:=Sum+S; end;
WriteLn(F2,' ':3,'summa = ',Sum:4);
Readln(F1); end;
Write(' результат находится в файле Info2.txt');
Close(F1); Close(F2);
end.
Исходные данные в
файле Info1.txt
Результат в файле
Info2.txt
3 5 3 8 3 9
3 7 3 7 0 6
3 9 0 1 8 7
3 5 3 8 3 9 summa = 31
3 7 3 7 0 6 summa = 26
3 9 0 1 8 7 summa = 28
Предлагаем
Вам самим выбрать ТЕМУ для следующей рассылки.
Если у Вас есть какие-либо вопросы по
программированию в Pascal или же Вы наоборот хотите
поделиться своими навыками, то вот наш адрес:
Мы ответим на ВСЕ присланные сообщения. Заранее
спасибо за любые пожеланиям и рекомендациям по
поводу.
Акция: "ДОЛОЙ
ОШИБКИ!"
При компиляции
набранного кода или его выполнении программа Pascal
выполняет проверку на наличие ошибок и выдает о
них сообщения (Error...). Не все знают точно, что они
означают и как с ними "бороться". Именно для
них и предназначена эта акция. Теперь, если у Вас
что-то не получается, а программа находит ошибку,
то Вы можете прислать нам ее номер, название или
весь Ваш код целиком, не забыв указать обратный
e-mail, а мы со своей стороны обязательно
постараемся Вам помочь: