Основные приемы работы с файлами
Известно существование многих версий Паскаля, каждая из которых имеет свои особенности и отличия от стандарта Паскаля. Рассмотрим некоторые приемы работы с файлами в системах Turbo-Pascal для ПЭВМ "Ямаха" и IBM PC. Перед началом работы с файлами (до первого обращения к файлу) должна быть выполнена процедура ASSIGN. Эта процедура отождествляет имя файла с соответствующей файловой переменной. СИНТАКСИС: assign(var F: file; NAME: string), где NAME - имя файла на диске, F - имя файловой переменной. После выполнения этой процедуры NAME и F отождествляются, например, ASSIGN(F,'nomfile') отождествляет файловую переменную F с его именем на диске. В качестве имени файла может быть указаноего полное имя, т.е. путь к этому файлу, например: ASSIGN(F,'С:\WORK\ MIM\nomfile'). После окончания работы с файлом он должен быть закрыт процедурой CLOSE, иначе результат может быть потерян, т.к. директория не будет обновлена. СИНТАКСИС: CLOSE(var F:file), где F - имя файловой переменной. Процедуры ASSIGN и CLOSE взаимосвязаны и работают в паре друг с другом. Как уже сказано выше, перед началом работы с файлом выполняется процедура ASSIGN(F, 'nomfile'), которая для логического файла F готовит (ищет) на диске в указанной директории файл с именем NOMFILE. При окончании работы с файлом по выполнению процедуры CLOSE происходит его обновление (в случае записи) и закрытие (в случае чтения). В программе надо уметь задавать исходные файлы. Эти файлы надо делать в цикле, используя при этом формирование компонент, либо в форме некоторого выражения по RANDOMIZE, либо задействовать обычную команду READ для ввода данных с клавиатуры. Цикл можно делать FOR, если формирование файла идет по RANDOMIZE, или WHILE (REPEAT), если файл формируется по признаку конца ввода. Напомним, что RANDOMIZE - процедура инициализации генератора случайных величин; RANDOM - функция генерации случайных чисел. Рассмотрим все эти особенности на примере формирования, обработки и вывода файлов. ПРИМЕР 2. Для двух целочисленных файлов F и G одинаковой длины образовать третий целочисленный файл H, компоненты которого определяются по правилу: Hi=MAX{Fi,Gi}. В программе предусмотреть вывод на экран все трех файлов program MAXELEM; type FT = file of integer; var F,G,H: FT; I,J: integer; procedure VIVODFILE(var A:FT); begin ¦ reset(A); ¦ while not eof(A) do ¦ begin ¦ read(A,I); write(I:4); ¦ end; writeln; end; begin { формирование исходных файлов } ¦ assign(F,'F'); assign(G,'G'); ¦ randomize; rewrite(F); rewrite(G); ¦ for I:=1 to 10 do ¦ begin ¦ J:= random(10)-5; write(F,J); ¦ ¦ J:= random(10)-5; write(G,J); ¦ end; ¦ VIVODFILE(F); close(F); ¦ VIVODFILE(G); close(G); ¦ assign(H,'H'); ¦ { формирование файла результата } ¦ reset(F); reset(G); rewrite(H); ¦ while not eof(F) do ¦ begin ¦ ¦ read(F,I); read(G,J); ¦ ¦ if I > J then write(H,I) else write(H,J); ¦ end; VIVODFILE(H); ¦ close(H); end. 5. Файл в данный момент времени открыт либо для чтения, либо для записи. Поэтому для добавления к файлу новых элементов необходимо сначала переписать во вспомогательный файл исходный, затем добавить к нему новые элементы. При этих двух операциях вспомогательный файл открыт для чтения. После заполнения вспомогательного файла он переписывается в исходный, при этом начальные элементы исходного файла заносятся туда во второй раз. Все эти операции представлены в виде следующей процедуры: procedure DOBAVLENIE(N: integer; var A:file); var B: file; I,J: integer; begin ¦ { Запись файла А в файл B } ¦ assign(B,'B');reset(A; rewrite(B); ¦ while not eof(A) do ¦ begin read(A,I); write(B,I); end; ¦ { Добавление новых элементов в файл B } ¦ for I:=1 to n do ¦ begin ¦ J:= random(10)-5; write(B,J); ¦ end; ¦ { Запись файла B в файл A } ¦ rewrite(A); reset(B); ¦ while not eof(B) do ¦ begin read(B,I); write(A,I); end; end.
Текстовые файлы
Среди всех файлов особое место занимают текстовые файлы. Особенностью текстовых файлов является объединение в них символов в строки. Каждая строка кончается специальным символом конца строки. Этот специальный символ (литера) не входит в стандартный тип CHAR и не имеет графического представления. Нас и не интересует вид этого символа. Главное, что с ним связана логическая функция EOLN (конец строки). EOLN(F) = TRUE, если окно указывает на признак конца строки. Заметим, что если EOLN(F) = TRUE, то при чтении элементов из файла в символьную переменную она принимает значение пробела (пробел - аналог конца строки). Для записи в файл признака конца строки служит стандартная процедура WRITELN. Текстовые файлы, т.е. файлы с делением на строки, описываются с помощью слова TEXT, например, VAR X, D: TEXT. ПРИМЕР 3. Определить количество строк в файле с именем BOOK program NOMBRELINE; var K: integer; BOOK: text; S: char; begin { Формирование файла BOOK } ¦ assign(BOOK,'f1'); rewrite(BOOK); read(S); while S<> '.' do begin ¦ while S <> '#' do begin ¦ write(BOOK,S); read(S); end; ¦ writeln(book);read(S); end; close(BOOK); ¦ { Подсчет числа строк в текст; BOOK } ¦ K:= 0; reset(BOOK); writeln; ¦ while not eof(BOOK) do ¦ begin ¦ if eoln(BOOK) then K:=K+1; read(BOOK,S); write(S); ¦ end; ¦ writeln('В текстовом файле BOOK ', K,' - строк'); end. ПОЯСНЕНИЕ. В программе сначала формируется текстовый файл, у которого строки кончаются символом "$", а сам текст – символом ".". Текст вводится с клавиатуры в виде непрерывной цепочки, например: Наша Маша громко плачет,Уронила в речку мячик.$Тише, Машенька, не плачь,$Не утонет в речке мяч.$. Во второй части программы с помощью функции EOLN подсчитывается число строк текста и он выводится на экран построчно, т.е. в виде: Наша Маша громко плачет, Уронила в речку мячик. Тише, Машенька, не плачь, Не утонет в речке мяч. Итак, для записи литеры "конец строки" используется процедура WRITELN(F), где F находится в режиме записи.
WRITELN(T):
Таким образом сформированный файл легко выводится на печать построчно с помощью оператора WRITE, т.к. признак конца строки в файле иницирует переход на другую строку экрана (эффект оператора WRITELN). В режиме чтения для работы с литерой "конец строки" есть процедура READLN. По этой процедуре окно файла устанавливается на первый элемент следующей строки файла.
READLN(T):
ПРИМЕР 4. Дано некоторое стихотворение в виде текстового файла ACROSTIH. Напечатать слово, образованное первыми буквами строк стихотворения (акростих) program SLOVO(ACROSTIH); program FORMFIL; var L:char; T: text; var F: text; S: char; begin begin ¦ assign(T,'ACROSTIH'); ¦ assign(F,'ACROSTIH'); reset(T); ¦ rewrite(F); read(S); ¦ while not eof(T) do ¦ while S <> '?' do ¦ ¦ begin ¦ begin ¦ while S <> '#' do ¦ ¦ begin read(T,L); write(L); ¦ write(F,S); read(S); ¦ ¦ end; ¦ readln(T); ¦ writeln(F);read(S); end; ¦ end; ¦ close(F); end. end. ПОЯСНЕНИЕ. Программа FORMFIL формирует текстовый файл ACROSTIH как было показано в примере 3. В программе SLOVO файл ACROSTIH выступает как внешний. Ему соответствует файловая переменная T. Оператор READLN(T) последовательно устанавливает окно файла на начало строк текста. Файлы, как переменные величины, могут выступать в качестве аргументов и результатов при создании функций-процедур, причем эти переменные должны быть всегда оформлены как параметры-переменные, даже если файл в процедуре играет роль аргумента. ПРИМЕР 5. Посчитать число знаков препинания в указанном текстовом файле function PUNCTUATION(var CHARFILE: text): integer; var SYMBOLNOMB: integer; SYMBOL: char; begin SYMBOLNOMB:=0; reset(CHARFILE); while not eof(CHARFILE) do begin read(CHARFILE, SYMBOL); if SYMBOL in ['.',',',' ',':','...] then SYMBOLNOMB:= SYMBOLNOMB + 1 end; PUNCTUATIОN:= SYMBOLNOMB end. С помощью этой функции можно теперь произвести подсчет числа вхождений знаков препинания в любой текст, представленный некоторым текстовым файлом. Рассмотрим в качестве примера фрагмент программ для файла с именем FIL: assign(FIL,'FIL'); reset(FIL); n:=PUNCTUATION(FIL); close(FIL); writeln('число знаков препинания в тексте FIL =', n).
Популярное: Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (262)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |