<<
>>

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

Текстовый файл - это файл, компонентами которого являются символьные строки переменной длины, заканчивающиеся специальным маркером конца строки (рис.

6.4).

Примечание. Маркер конца строки - это последовательность из двух специальных символов по таблице ASCII «#13, #10». Символ с кодом 13 интерпретируется в компьютере как команда установки курсора в начало строки, а символ с кодом 10 - как команда перехода на следующую строку. Как уже упоминалось ранее, такая комбинация кодов вводится при нажатии клавиши ENTER.

Текстовый файл можно открыть для записи, чтения и добавления записей в конец (см. параграф 6.2). Файл, открытый для записи, не может использоваться для чтения и наоборот. При открытии файла для добавления система проверяет, не был ли файл открыт для чтения или записи, и если такое открытие имело место, то производится сначала закрытие файла, а затем уже открытие для добавления.

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

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

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

1. Функция EOLn( [Var f\): boolean - возвращает TRUE, если во входном текстовом файле достигнут маркер конца строки; при отсутствии файловой переменной проверяется стандартный файл INPUT, который обычно связан с клавиатурой.

Примечание. Функция EOLn, как и EOF, по-разному работает с дисковыми файлами и логическими устройствами.

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

2. Процедура Read( [Var f:text;\ vl, v2,.„ vn) - обеспечивает ввод символов, строк и чисел. Список ввода представляет собой последовательность из одной или более переменных типа CHAR, STRING, а также любого целого и вещественного типа. При отсутствии файловой переменной ввод осуществляется из стандартного файла INPUT.

При вводе значений переменных типа CHAR выполняется чтение одного символа из файла, считанное значение присваивается очередной переменной из списка ввода. Как уже упоминалось в параграфе 2.6, символы вводятся подряд, а не через пробел, как числа. Если перед выполнением чтения указатель файла достиг конца очередной строки, то результатом чтения будет символ #13, а если был достигнут конец файла, то - символ #26.

При вводе переменных типа STRING количество считанных процедурой и помещенных в строку символов равно максимальной длине строки, если раньше не встретились маркеры конца строки или конца файла, которые в строку не включаются. Символы, выходящие за размер максимальной длины строки, отбрасываются. Новое обращение к процедуре Read вернет пустую строку (см. также параграф 2.6). Следовательно, процедура Read не в состоянии читать последовательность строк, так как первая строка будет прочитана правильно, а все последующие окажутся пустыми.

При вводе числовых данных процедура Read пропускает все пробелы, знаки табуляции и маркеры до первого значащего символа и читает строку до пробела, знака табуляции или маркера. Полученная подстрока преобразуется из символьного во внутреннее представление в соответствии с типом значения и присваивается следующей переменной из списка. Если нарушен формат, то фиксируется ошибка ввода-вывода.

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

Ввод логических констант процедурами Read и ReadLn не предусмотрен.

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

3. Процедура ReadLnf [Var f;] vl,v2, ...,vn ) - также обеспечивает ввод символов, строк и чисел. Процедура использует те же правила ввода, что и процедура Read, но после чтения последней переменной оставшаяся часть строки до маркера конца строки пропускается, так что следующее обращение к ReadLn или Read начнется с первого символа новой строки. Процедура может быть вызвана без указания списка ввода, что приведет к пропуску всех символов текущей строки до маркера конца строки.

Процедуры Read и ReadLn могут использоваться без указания файловой переменной. Тогда операция чтения осуществляется из стандартного файла INPUT. Использование процедуры ReadLn без параметров после процедуры Read приведет к очистке буфера ввода. Применение этой же процедуры без предшествующей ей процедуры Read переводит программу в состояние ввода, т.е. выполнение программы приостанавливается до нажатия клавиши ENTER, что может использоваться для организации паузы на время просмотра содержимого экрана.

4. Процедура Write( [Var f;] vl,v2, ...,vn ) - обеспечивает вывод данных в текстовый файл или передачу их на логическое устройство. Список вывода - последовательность из одного или более выражений типа CHAR, STRING, BOOLEAN, а также целого или вещественного типов. При выводе числовых значений последние преобразуются в символьное представление. При отсутствии файловой переменной вывод осуществляется в стандартный файл OUTPUT, который обычно назначен на экран.

Любой параметр из списка вывода может иметь формат:

[: [: < целое2> ]],

где и интерпретируются в соответствии с правилами, описанными в параграфе 2.6.

5. Процедура WriteLn( [Var f;} vl,v2, ...,vn ) - обеспечивает вывод информации в текстовый файл или ее передачу на логическое устройство вывода. При отсутствии файловой переменной вывод осуществляется в стандартный файл OUTPUT, который обычно связан с дисплеем.

Процедура полностью идентична процедуре Write, за исключением того, что выводимая строка символов завершается символами #13 и #10. При вызове WriteLn допускается опускать список вывода, в этом случае в файл передается маркер конца строки (при выводе на экран это приведет к переводу курсора в начало следующей строки).

6. Функция SeekEOLnf [Var f] ):boolean - пропускает все пробелы и знаки табуляции до маркера конца строки или до первого значащего символа и возвращает TRUE при обнаружении маркера. Если файловая переменная не указана, то функция проверяет стандартный файл INPUT.

7. Функция SeekEOF( [Var /] ):boolean - пропускает все пробелы, знаки табуляции и маркеры конца строки до маркера конца файла или до первого значащего символа и возвращает TRUE при обнаружении маркера. Если файловая переменная отсутствует, то функция проверяет стандартный файл INPUT.

Рассмотрим несколько примеров.

Пример 6.1. Разработать программу, которая формирует текстовый файл из 26 строк, содержащих случайное количество соответствующих прописных букв латинского алфавита, например:

ААААА

ВВВВВ

С

DDDDDDDDDDDDDDDDDDDDD

ЕЕЕЕЕЕЕЕЕЕЕЕЕЕ и т.д.

Program formjextJile;

Var

f:text; {файловая переменная для текстового файла}

a:char; n,i:integer; fiiame,st:string[30];

Begin

WriteLn(‘Введите имя файла ’); ReadLn(jhame);

Assign(fjname); {инициализируем файловую переменную} ReWriteif); {открываем файл для записи}

Randomize; {инициализируем датчик случайных чисел}

for а:= А ’ to ‘Z’ do {формируем строки} begin st: = ”;

п: = Random (30)+1; for i:=l to n do st:-st+a;

WriteLn(f,st); {записываем строку в текстовый файл} WriteLn(st); {для контроля - выводим ее на экран} end;

Closeif); {закрываем файл}

End.

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

Пример 6.2. Разработать программу, которая удаляет из текстового файла «пустые» строки: строки, не содержащие символов, и строки, содержащие только пробелы и знаки табуляции.

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

Program ex;

Var fl J2: text; {файловые переменные текстовых файлов} st,name: string;

Begin

WriteLnf'Введите имя файла: ’); ReadLn(name);

Assignai,пате); {инициализируем файловую переменную}

{$.I-} {проверяем существование файла}

Res et (fl);

{SI+}

if IOResult=0 then {если файл с заданным именем существует} begin

Assign(ß,Четр.dat’); {инициализируем новый файл}

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

while not EOF(fl) do {пока не достигнут конец файла} begin

if SeekEOLn(fl) then ReadLn(fl,st) {если строка пустая,

то пропускаем ее}

else

begin

ReadLn(fl,st); {читаем строку}

WriteLn(f2,st); {записываем ее в новый файл} end; end;

Closeffl); {закрываем старый файл}

Close(f2); {закрываем новый файл}

Eraseffl); {удаляем старый файл} ReName(f2,name); {переименовываем новый файл} end

else WriteLn(‘

<< | >>
Источник: Иванова Г.С. Основы программирования. 2002

Еще по теме Текстовые файлы:

  1. МЕТОД КОРРЕКЦИИ ПРОШЛОГО
  2. 7.8. ВНУТРЕННИЙ ПОРЯДОК
  3. ПАМЯТЬ: РАЗЛИЧИЕ ИНДИВИДУАЛЬНОЕ
  4. Г.В. Прутцков . Введение в мировую журналистику, 2003
  5. Кудинов Ю. И., Пащенко Ф. Ф., Келина А. Ю.. Практикум по основам современной информатики: Учебное пособие., 2011
  6. Ю. И. КУДИНОВ, Ф.Ф. ПАЩЕНКО, А. Ю. КЕЛИНА. ПРАКТИКУМ ПО ОСНОВАМ СОВРЕМЕННОЙ ИНФОРМАТИКИ, 2011
  7. Навыки, хитрости, производительность
  8. Международное радиовещание в век Интернета.
  9. Интерактивность массмедиа.
  10. Установка программы Астропроцессор ZET
  11. Третью коммуникационную революцию
  12. Социальные сети
  13. Лариса Александровна Малинина Вадим Васильевич Лысенко Максим Анатольевич Беляев. Основы информатики: Учебник для вузов, 2006
  14. четвертая коммуникационная революция
  15. Осмотр средств вычислительной техники
  16. О программе Астропроцессор ZET