Работа с файлами в object pascal осуществляется через файловые переменные.
Лабораторная работа № 14
Обработка файлов
Теоретические пояснения
С точки зрения Object Pascal существуют три категории файлов: текстовые, типизированные и файлы без типа.
Мы будем рассматривать только текстовые файлы.
Файлы, состоящие из строк, называются текстовыми. Компоненты таких файлов могут быть символьного, строкового и арифметического типа.
Признак конца строки (код #13) вставляется клавишей Enter при вводе строк с клавиатуры или оператором WriteLnпри записи данных из программы.
Признаком конца файла является символ #26, на экране может отображаться как ^Z.
Текстовые файлы можно обрабатывать только последовательно. Ввод и вывод нельзя осуществлять одновременно для одного и того же файла.
Работа с файлами в Object Pascal осуществляется через файловые переменные.
Такие переменные для текстовых файлов объявляются следующим образом:
Var: TextFile;
Например,
VarF1,F2: TextFile
означает, что мы можем работать одновременно с двумя текстовыми файлами, обращаясь к ним по именам F1 и F2, которые и являются файловыми переменными.
Существуют стандартные процедуры для работы с текстовыми файлами через файловые переменные:
AssignFile(, ») – связывает файловую переменную с именем файла на диске. В качестве имен файлов можно использовать стандартные имена:
— Con – консоль, т.е. клавиатура и дисплей;
— Prn – принтер;
— Nul – пустой файл. При чтении из Nul сразу же обнаруживается конец файла, а при записи ничего не происходит.
Append() – открывает существующий файл для последовательной записи (добавления) данных в конец файла. Если файл был открыт, то сначала он закрывается, а затем заново открывается.
Rewrite() – создаёт и открывает файл для записи данных. Если файл с указанным именем уже существует на диске, то он удаляется и создается новый.
Reset() – открывает существующий файл только для чтения. Если файл был открыт, то сначала он закроется, а затем заново откроется.
Read(, ) – читает информацию из файла в переменные, указанные в списке. Процедура чтения зависит от типа переменной, стоящей в списке.
— Если очередная переменная – символьного типа, то в нее помещается один следующий символ из файла (включая EOLn, EOF).
— Если очередная переменная – арифметического типа, то далее считывается арифметические символы до появления пробелов, табуляции, EOLn или EOF.
— При чтении данных в строковую переменную передаются все символы до появления маркеров EOLn или EOF, маркер в строку не заносится.
После последнего прочитанного символа запоминается текущая позиция в файле. Новый оператор Read будет читать не с начала файла, а с текущей позиции.
ReadLn(, ) – отличается от Read тем, что после чтения указанных переменных пропускаются все символы до конца строки и осуществляется переход к новой строке, начало которой становится текущей позицией.
ReadLn() без списка переменных вызывает продвижение текущей позиции в файле к началу следующей строки.
Write(,) – записывает информацию в конец файла из указанных в списке переменных. Для символьных, арифметических, строковых и логических переменных выводятся их значения в соответствие с заданным форматом.
WriteLn(, ) – отличается от Write тем, что после вывода всех переменных в файл записывает маркер конца строки – EOLn.
CloseFile() – закрывает файл и, если он был открыт для записи, – освобождает связанный с ним буфер.
Файл, открытый для записи, обязательно надо закрыть, т.к. при этом дозаписываются данные, хранящиеся в буфере. В противном случае эти данные могут быть потеряны, а буфер будет недоступен для записи новых файлов.
Пример
Пусть файл example.txt содержит текст:
Пример:
2 + 3.5Е01 равно:
Необходимо прочитать арифметические данные из второй строки, операцию между ними, вычислить результат и дописать его в третью строку.
Соответствующая часть программы будет иметь вид:
Var
N1,N2,res : Double; {для чтения данных}
StrSgn : String[3]; { для строки с операцией}
F : TextFile; {файловая переменная}
Begin
AssignFile(F,’example.txt’); {Связать переменную F с файлом example.txt}
Reset(F); {Открыть файл example.txt для чтения}
ReadLn(F); {Пропустить слово пример}
Read(F,N1,StrSgn,N2); {Прочитать данные и строку операции}
Append(F); {Закрыть и открыть файл для добавления}
WriteLn(F); {Перейти на новую (третью) строку}
CaseSgn[2] of{Взять операцию – второй символ в строке}
’+’ : res := N1+N2;
’-’ : res := N1-N2;
’*’ : res := N1*N2;
’/’ : res := N1/N2;
end;
Write(F, FormatFloat(‘#.###E+00’, res));
CloseFile(F);
end;
После работы данного блока программы содержимое файла example.txt примет вид:
Пpимеp:
2+3.5E01 равно:
3.7E+01
Статьи к прочтению:
Работа с Файлами в Pascal
Похожие статьи:
-
Концепция работы с файлами в Java включает две составляющие: Работа с файлами и папками с помощью объектов типа File. Обеспечивает работу с именами…
-
Лекция 16. Работа с файлами и каталогами различных ОС. План занятия: 1. Работа с файлами. 2. Работа с каталогами. 3. Служебные программы. 4. Особенности…