Обработка текстовых файлов
Тип Файл В языке Паскаль файл - это состоящая из некоторого числа компонент одного типа структура данных со следующими особенностями: В Паскале определены файлы двух видов, описываемые следующим образом: Type < имя > = File Of < тип >; Первые называются типизированными файлами, а вторые - текстовыми. В Турбо-Паскале описанные выше файлы называются логическими (кроме того, в системе Турбо-Паскаль есть логические файлы третьего вида - не типизированные). Основное назначение логического файла - обеспечить программе средства для обмена данными с периферийными устройствами компьютера. В связи с этом вводится понятие физического файла, как совокупности данных во внешней памяти (дискета, жесткий диск, магнитная лента и др.) Кроме того, в качестве физического файла могут использоваться и сами периферийные устройства, например, принтер).
Type Ful = File of Integer; Fakt = File of Char; Var F1: Ful; F2: Fakt; Обработка файлов
Процедура Assign – устанавливает соотношение между файловой переменной и внешним файлом (между логическими физическим файлами).
Assign (имя файловой переменной, ’ имя внешнего файла ’); Assign (F1, ‘d:\My.dat’);
Ø процедура ReSet (имя файловой переменной) – открыть файл для чтения;
Ø процедура Read (имя файловой переменной, элемент) – прочитать данные файла, хранящегося на диске, в программу, последовательно читая элементы; Ø Read(элемент) – данные с клавиатуры.
While Not Eof (имя файловой переменной)Do …
Пример: прочитать файл целых чисел и вывести их на экран. Var F1:File of integer; n:integer; Begin Assign(F1, ‘d:My.dat’);{связь с внешним файлом} Reset(F1);{открыть его для чтения} While Not Eof(F1) Do {пока не достигнут конец файла} Begin Read(F1,n);{считать очередное число} Write(n,’ ‘){вывести его на экран} End; Close(F1); End.
Ø ReWrite(имя файловой переменной) - открыть файл для записи; Ø Write(имя файловой переменной, элемент) – записать данные в файл поэлементно; Пример: создать файл целых чисел с именем 12.dat, причем ни одно из чисел не равно 0. Var F2:File of integer; n:integer; Begin Assign(F2, ‘D:12.dat’);{связь с внешним файлом} Rewrite(F2);{открыть его для записи} Repeat Writeln(‘Введите число’); Readln(n); If n<>0 Then Write(F2,n);{записать число в файл} Until n=0; Close(F2); End.
Примечание. а) После выполнения процедур открытия файла для чтения ReSet или для записи ReWrite текущий указатель «смотрит» на первый элемент 0 1 … k k+1 … ▲ - указатель б) После выполнения процедуры Write, например Write( F2,х ), если указатель «смотрел» на элемент с номером К, то после выполнения он уже будет указывать на (К+1)-й элемент, а на К-ом месте будет записано Х: “до” 0 1 … k k+1 …
▲ “после”
0 1 … k k+1 …
▲ После выполнения процедуры Read, например Read( F2,х ), если указатель стоял на К элементе, то после выполнения он будет стоять на следующем, а значение переменной Х будет равно К-у элементу: “до” Х?
0 1 … k k+1 …
▲
“после” X N
0 1 … k k+1 …
▲
Ø процедура Seek (имя файловой переменной,N) – устанавливает текущий указатель на N –й элемент. Seek(F1,3) – на 3-ий элемент файла F1; Ø функция FilePos(имя файловой переменной)– определяет номер элемента, на который смотрит текущий указатель; N:=FilePos(F1) N - номер элемента, с которым будет выполняться следующее действие, при условии, что 1-й элемент нулевой;
Ø функция FileSize(имя файловой переменной)– определения количества элементов.
Пример. В файле Dan1.dat записаны целые числа. Вычислить сумму элементов и результат вместе с исходными данными записать в файл Dan2.dat. Var F1, F2: File of integer; S, N: integer; Begin Assign(F1, ‘Dan1.dat’); Reset(F1); Assign(F2, ‘Dan2.dat’); ReWrite(F2); S:=0; While Not Eof(F1) Do Begin Read(F1,N); Write(F2,N); S:=S+N; End; Write(F2,S); {запись суммы элементов в конец файла F2} Write(’Результат находится в файле Dan2.dat’); Close(F1); Close(F2); End. Обработка текстовых файлов Var A: Text; Тип Text на равен типу File of Char.
Отличия: Ø Функция Eoln(имя переменной текстового файла) While Not Eoln(F1) Do… Ø Процедура Append(имя переменной текстового файла) Пример. Дан текстовый файл, содержащий только целые числа. В каждой строке несколько чисел, которые разделяются пробелами. Вывести на экран все числа с учетом разбиения на строки и подсчитать количество элементов в каждой строке. -32 16 0 8 7 4 5 9 13 11 -5 -8 6 -8 0 -12 5 4 3 2 1 12 1 2 –1 -2 -4 -1 -2 4 Var F: Text; x, k: integer; Begin Assign(F, ‘a:12.dat’); Reset(F); While Not Eof(F) Do Begin k:= 0; While Not Eoln(F) Do Begin Read(F,x); {считать очередное число} Write(x, ‘ ‘); {вывести его на экран} Inc(k); End; Writeln(‘в строке’, k,’элементов’); Readln(F); {перейти к следующей строке файла} End; Close(F); End. Дан текстовый файл, содержащий программу на языке Паскаль (создать файл в блокноте с расширением 111.txt). Проверить эту программу на несоответствие числа открывающихся и закрывающихся круглых скобок. Считать, что каждый оператор программы занимает не более одной строки файла.
Var F:Text; k1,k2,n:integer; Ch:Char; Logic,Pp:Boolean; Begin Assign(F,'111.txt'); ReSet(F); n:=0;{счетчик количества строк} Logic:=True; {пока ошибки не определены, то значение True} While Not Eof(F) Do Begin Inc(n); k1:=0;{счетчик количества открывающихся скобок} k2:=0; Pp:=False; {предназначена для определения ошибки расстановки скобок в строке, начальное значение False, т.к. пока ошибки расстановки не было} While Not Eoln(F) Do Begin Read(F,Ch);очередной символ строки If Ch = '(' Then Inc(k1);если встречена закр. скобка и она стоит не раньше открыв., то знач. k1<k2, поэтому просто увеличиваем счетчик этих скобок, иначе помечаем Рр значением True If Ch = ')' Then If k1<k2 Then Inc(k2) Else Pp:=True; End; If (k1<>k2) Or Pp Then Begin Writeln('Eror in',n,'line'); Logic:=False; End; Readln(F); End; If Logic Then Writeln('Ok'); Close(F); Readln; End.
Найти ошибку в данном примере. k1<k2 изменить k1>k2
Трассировка примера (()))(((() (())) () (
Пример Program Dfile;
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|