Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Обработка текстовых файлов

Тип Файл

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

В Паскале определены файлы двух видов, описываемые следующим образом:

Type

< имя > = File Of < тип >;
< имя > = Text;

Первые называются типизированными файлами, а вторые - текстовыми.

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

 

Type Ful = File of Integer;

Fakt = File of Char;

Var F1: Ful;

F2: Fakt;

Обработка файлов

 

  1. Связь переменной файлового типа с конкретным внешним файлом

Процедура Assign – устанавливает соотношение между файловой переменной и внешним файлом (между логическими физическим файлами).

 

Assign (имя файловой переменной, ’ имя внешнего файла ’);

Assign (F1, ‘d:\My.dat’);

 

  1. Чтение из файла:

Ø процедура ReSet (имя файловой переменной) – открыть файл для чтения;

Ø процедура Read (имя файловой переменной, элемент) – прочитать данные файла, хранящегося на диске, в программу, последовательно читая элементы;

Ø Read(элемент) – данные с клавиатуры.

 

  1. Процедура Close (имя файловой переменной) – закрыть файл.

 

  1. Логическая функция EOF (имя файловой переменной) (End of File).

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.

  1. Запись в файл:

Ø 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 …

      N    

“после”

X N

 

0 1 … k k+1 …

      N    

 

  1. Работа с элементами:

Ø процедура Seek (имя файловой переменной,N) – устанавливает текущий указатель на N –й элемент.

Seek(F1,3) – на 3-ий элемент файла F1;

Ø функция FilePos(имя файловой переменной)– определяет номер элемента, на который смотрит текущий указатель;

N:=FilePos(F1)

N - номер элемента, с которым будет выполняться следующее действие, при условии, что 1-й элемент нулевой;

 

Ø функция FileSize(имя файловой переменной)– определения количества элементов.

  1. Прoцедура Erase(имя файловой переменной) – удаляет файл на внешнем носителе, с которым была связана файловая переменная.
  2. Процедура Rename(имя файловой переменной, новое имя на внешнем носителе) – переименовывает внешний файл.

 

Пример. В файле 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

 

Трассировка примера

(()))(((() (())) () (

 

n Logic Ch k1   k2 Pp
  True          
  True     k1=k2   False
  True (   k1>k2   False
  True (   k1>k2   False
  True )   k1>k2   False
  True )   k1>k2   False
  True )   k1=k2   True
  True (   k1>k2   True
  If (k1<>k2) or Pp Then
  False          

 

Пример
Дан файл f компоненты которого являются целыми числами. Получить в файле g все четные компоненты файла f, а в файле h все нечетные.

Program Dfile;
Var f,h,g: File Of Integer;
i: Integer;
Begin {Установка связи между файловыми переменными и соответствующими именами файлов}
Assign(f,’Data.dat’);
Assign(g, ‘Chet.dat’);
Assign(h, ‘Nechet.dat’);
{Открытие файлов для чтения и записи}
Reset(f); Rewrite(h); Rewrite(g);
While Not(Eof(f)) Do
Begin
Read(f, i); {чтение из файла f}
If Odd(i)
Then Write(h,i) {запись в файл h}
Else Write(g, i) {запись в файл g}
End; {Закрытие файлов}
Close(f); Close(g); Close(h);
End.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...