Операции над текстовым файлом
1) Назначение файловой переменной физического файла Связь файловой переменной с файлом устанавливается с помощью процедуры Assingfile. Формат процедуры: Assingfile(файловая переменная, имя файла); Имя файла – это параметр, тип которого string. Имя файла создается по правилу операционной системы. Если файл находится в одной папке с программой, то достаточно указать только имя файла, в противном случае надо указать полный путь к файлу, например: D:\User\lab\A.txt. Когда связь с файлом установлена, его можно открыть для ввода или вывода информации. Примеры связывания файла с файловой переменной: Var F: textfile; Filename: String; Begin //Имя файла задано непосредственно в вызове процедуры Assignfile (F,’A.txt’); //Имя файла вводит пользователь в переменную Filename. Assignfile (F,Filename); End. 2) Открытие файла для чтения Существующей текстовый файл можно открыть только для чтения с помощью процедуры Reset. Формат процедуры Reset(файловая переменная); Открытие файла означает: разрешить доступ к данным связанного с файловой переменной физического файла. После открытия файла, операции чтения доступен первый компонент файла, т.е. текущая позиция в файле устанавливается на начало файла. После открытия данные файла можно читать. Если файловая переменная связана с несуществующем файлом, то система выдаст прерывание - Файл не существует. Если открывается уже открытый файл, то он сначала закроется, а затем вновь откроется. Пример процедуры открытия файла для чтения: Reset(F); 3)Открытие файла для записи (создание нового файла) Осуществляется процедурой Rewrite. Процедура rewrite создает новый внешний файл, имя которого связанно с файловой переменной. Если внешний файл с указанным именем уже существует, то он удаляется и на его месте создается новый пустой файл и для операции записи доступен первый символ. Текущая позиция файла устанавливается на начало файла. В текстовый файл, открытый процедурой Rewrite возможна только запись данных. Формат процедуры Rewrite(файловая переменная); Пример создания нового файла с именем B.txt в текущей папке: Assignfile(F,’B.txt’); Rewrite(F); 3) Открытие файла для добавления новой записи Текстовый файл – это файл с последовательной организацией, поэтому новая запись может быть добавлена в конец файла, после последней записи. Для перемещения указателя файла в конец файла используется процедура Append. В файл, открытый процедурой Append можно производить только запись данных. Формат процедуры Append(Файловая переменная); Пример открытия существующего файла B.txt для добавления новых записей: Assignfile(F,’B.txt’); Append(F);
4) Вывод данных в текстовый файл Вывод данных в текстовый файл может быть выполнен процедурами write и writeln. Форматы процедур ввода данных в файл: Write (Ф.п, список выражений); Writeln(Ф.п, список выражений); Writeln(Ф.п.); Список выражений может содержать: переменные, константы, сложные выражения. Значение списка будут записаны в текстовый файл в символьном формате, например, число 123 будет записано как последовательность из 3 символов. Процедура writeln после вывода в файл значений списка выражений запишет в файл маркер конца строки включающий символы #13(символ конца строки) и #10(перевод каретки на новую строку). Процедура Writeln(Ф.п.) записывает в файл только маркер конца строки. Пример использования процедур вывода данных в файл Var F:Textfile; Begin Assignfile(F,’A.txt’); Rewrite(F); Write(F,125,¢ ¢); Write(F,126, ¢ ¢); Writeln(F); Writeln(F,127); End. Содержимое файла A.txt после выполнения программы 125 126 #13#10127#13#10 5)Чтение данных из файла Чтение данных из текстового файла осуществляется процедурами Read или Readln. Форматы процедур Read(Ф.п., Список переменных); Readln(Ф.п., Список переменных); Readln(Ф.п.); При чтении данных из текстового файла автоматически происходить преобразование прочитанных данных из символьного формата в формат соответствующей переменной. Для корректного чтения, данные должны быть правильно подготовлены: · Числовые данные должны отделяться от других данных символами пробел или Enter или табуляцией. · Символьная информация должна следовать без разделителей за числовой информацией. · Если в файле должна храниться информация различных типов, то ее лучше располагать на различных строках. Процедура Read читает данные из файла и записывает их в переменные, но маркер конца строки не читает. Readln читает данные и читает маркер конца. Пример чтения данных из текстового файла. Пусть файл A.txt содержит данные 125 126 #13#10127#13#10 //код программы Var F:Textfile; A,B,C:integer; Begin Assignfile(F,’A.txt’); Reset(F); Readln(F,A,B); Readln (F,C); Writeln(A,’ ‘,B,’ ‘,C) End. В результате на монитор будут выведены значения: 125 126 127 6) Закрытие файла Данная операция прекращает доступ к данным. Освобождает буфер файла. Формат команды. Closefile(Ф.п.); Пример использования: Var F:Textfile; A,B,C:integer; Begin Assignfile(F,’A.txt’); Reset(F); Readln(F,A,B); Readln (F,C); Closefile(F); Writeln(A, ¢ ¢, B, ¢ ¢, C) End. 7) Проверка существования файла Перед открытием файла для чтения или при создании нового файла следует проверить файл на существование и обработать результат проверки. Способы: · Использование функции ioresult которая возвращает результат операции открытия файла. Если файл открылся, то функция вернет 0, иначе - код прерывания (число больше 0). При использовании функции ioresult следует использовать директиву компилятора {$I+/-}. Пример использования функции Begin Assignfile(F,’A.txt’); {$I-} //отключить контроль над операциями ввода/вывода Reset(F); {$I+} //включить контроль над операциями ввода/вывода. If ioresult = 0 then Обработка данных файла. End. · Использование функции FileExists(имя внешнего файла). Функция возвращает true если файл, имя которого указано в вызове функции, существует. В противном случае функция возвращает false. var F:textFile; begin Assignfile(F,'A.txt'); if FileExists('A.txt') then begin Reset(F); writeln('существует '); end else writeln(' Не существует '); Readln end. 8) Обнаружение символа - конец файла В текстовом файле количество компонентов может быть заранее неизвестно. Чтобы обработать все компоненты файла необходимо найти символ - конец файла (код 26). Для нахождения этого символа в языке Pascal используется функция Eof(Ф.п.):boolean, которая возвращает значение true если следующий читаемый символ - символ конца строки, в противном случае функция возвращает значение false. Пример использования функции Eof. Пусть текстовый файл A.txt содержит последовательность целых чисел разделенных пробелами. Вывести на монитор все числа.
Var F:Textfile; A:integer; Begin Assignfile(F,’A.txt’); if FileExists('A.txt') then begin Reset(F); While not Eof(F) do Begin Read(F,A); Writeln(A); end end else writeln('Файл не существует '); Closefile(F); End. 9) Проверка конца строки файла Для обнаружения символа конца сроки используется функция Eoln(Ф.п.):Boolean, которая возвращает true если следующий читаемый символ- символ конца строки и false в противном случае. Пример использования Пусть файл хранит последовательность чисел. Числа расположены в нескольких строках текстового файла. Количество чисел в строке неизвестно. Var F:Textfile; A:integer; Begin Assignfile(F,’A.txt’); if FileExists('A.txt') then begin Reset(F); While not Eof(F) do While not Eoln(F) do Begin Read(F,A); Writeln(A); End; Readln(F); end else writeln('Файл не существует '); Closefile(F); End.
|