Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Delphi_Ч2.doc
Скачиваний:
15
Добавлен:
02.11.2018
Размер:
1.7 Mб
Скачать

Создание нового файла

Первый способ заключается в том, что файл создается заново, независимо от того, существовал он ранее или нет. Используя этот способ, нужно помнить, что если открываемый файл содержал какие-то данные, то они будут безвозвратно потеряны. Учитывая то обстоятельство, что в текстовом файле информация может обрабатываться только последовательно, можно прийти к выводу, что при открытии файла таким способом в него можно только писать. Читать из него просто нечего.

Реализуется такой способ открытия файла процедурой Rewrite.

Обращение к этой процедуре выглядит так:

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

Ниже приведен пример вызова процедуры Rewrite:

Rewrite (f1) ;

Открытие файла для чтения

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

Реализуется такой способ открытия файла процедурой Reset.

Обращение к этой процедуре выглядит так:

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

Ниже приведен пример вызова процедуры Reset:

Reset (f1) ;

Процедура Reset устанавливает файл в начало, поэтому эту процедуру часто применяют для уже открытых файлов с тем, чтобы начать чтение файла с начала.

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

Открытие файла для дополнения

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

Реализуется такой способ открытия файла процедурой Append.

Обращение к этой процедуре выглядит так:

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

Ниже приведен пример вызова процедуры Append:

Append (f1) ;

Следует заметить, что при работе с типизированными файлами процедура Append не используется. В этом нет необходимости, так как для добавления записей в конец типизированного файла достаточно указатель файловой позиции переместить в конец файла и после этого производить запись, независимо от режима открытия файла.

      1. Текущая позиция файла

При работе с текстовым файлом, так же как и при работе с типизированным, используется понятие «текущая позиция файла». В текстовом файле под «текущей позицией файла» подразумевается то место в файле, откуда будет продолжаться чтение, или откуда начнется запись при очередном обращении к файлу. Фактически, это номер очередного байта в файле, но в Object Pascal нет доступа к этой позиции текстового файла.

      1. Записи данных в файл.

Как было сказано выше, запись данных в текстовый файл возможна в случае открытия файла с помощью процедур Rewrite или Append. Напомним, что при открытии файла с помощью процедуры Rewrite текущая позиция файла находится в начале файла, а при открытии с помощью процедуры Append текущая позиция находится в конце файла.

Запись данных в текстовый файл осуществляется при помощи инструкций write и writeln.

В общем виде запись этих инструкций выглядит так:

write( f , a1 , a2 .. an );

writeLn( f , a1 , a2 .. an );

В этой записи f – файловая переменная; a1 , a2 .. an – это список параметров вывода. Параметром вывода может быть переменная одного из простых типов, константа или выражение. Каждый параметр может иметь спецификаторы вывода, которые определяют количество позиций выделяемых в файле для выводимого параметра и способ вывода значений параметров. Спецификаторы в виде целых числе записываются после параметра через вертикальные двоеточия.

В общем случае параметр вывода со спецификаторами может иметь такую форму:

<выводимое выражение>[: <minWidth>[:<decPlaces>]] , где minWidth, если присутствует, то указывает минимальную ширину поля вывода, а decPlaces используется для вывода значений вещественных чисел и задает количество знаков после запятой.

Использование спецификаторов в процедуре write подобно использованию спецификаторов в функции format.

Рассмотрим простейший пример:

v := 12,456

write(f, v : 6: 2);

Эта инструкция запишет значение переменной v в текстовый файл в таком виде: 12,45 – т.е. для строкового представления этого числа отведется 6 позиций и для десятичных знаков после запятой – 2 позиции.

Ниже приводится еще один пример использования процедуры write со спецификаторами для вывода значения числа π, его квадрата и корня из этого числа.

write (t,'-пи =',-pi,', его квадрат =',sqr(pi):6:2,', и корень =',sqrt(pi):3);

Результатом выполнения этой процедуры будет строка символов, приведенная ниже.

-пи =-3.14159265358979E+0000, его квадрат = 9.87, и корень = 1.8E+0000

Проанализировав эту строку, можно заметить влияние спецификаторов на способ вывода чисел.

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

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

При выводе в текстовый файл параметров может быть сколько угодно и каждый из них перед выводом вычисляется и преобразуется в текст. Преобразование производится так как, например, для вещественных чисел вызывается функция floatToStr или функция format.

Различие между инструкциями write и writeLn состоит в том, что инструкция writeLn после занесения в файл всех значений, указанных в списке параметров, записывает в файл символ перехода на новую строку - EOLN (новая строка).

При вызове процедуры writeLn список параметров может быть пустым. В этом случае в файл передается пустая строка

Фрагмент кода, в котором осуществляется запись содержимого поля Memo1 в файл с именем ‘Primer.txt’ в режиме перезаписи, с использованием процедуры writeLn представлен ниже.

begin

assignFile(f, ‘Primer.txt’);

rewrite(f); // открыть для перезаписи

// Запись в файл

for i:=0 to Memo1.Lines.Count do writeln(f, Memo1.Lines[i]);

closeFile(f);

End;

После выполнения этого фрагмента кода в текстовом файле появится копия содержимого компонента Memo.