Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Написание программы на языке Паскаль с использованием с использованием файловых переменных.

Поиск

Разработка программы для работы с текстовым файлом

Цель работы: формирование знаний и умений по работе с файловыми переменными. Приобретение навыков работы с текстовыми файлами.

Краткие теоретические сведения

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

Файлом называется совокупность данных, записанная во внешней памяти под определенным именем.

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

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

Формат описания файлового типа

Type

<имя типа> =<тип компонентов>;

Var

<F >: file of <имя типа>;

 
 

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

В любой момент времени программе доступен только один элемент файла, на который ссылается текущий указатель (указатель обработки). Часто позицию размещения доступного элемента называют текущей позицией.

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

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

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

В Паскале имеется 3 класса файлов:

· Текстовые

· Типизированные

· Нетипизированные

Средства обработки файлов

Каждому файлу в языке ставится в соответствие файловая переменная, которая должна быть связана с конкретным внешним файлом. Поэтому перед началом работы с файлом необходимо установить данное соответствие. Для этого в языке используется процедура:

Assign(Var F; Name:String);

где F - переменная любого файлового типа, а строковое выражение Name содержит полное имя файла, удовлетворяющее требованиям операционной системы.

Процедура Assign всегда предшествует другим процедурам работы с файлами, так как ставит в соответствие конкретному файлу на внешнем устройстве логическую файловую переменную языка, к которой впоследствии будут обращаться все другие файловые процедуры. Недопустимо использование процедуры Assign для уже открытого файла. Это значит, что если было назначено имя конкретного набора данных файловой переменной с помощью процедуры Assign, а затем этот файл был открыт, то, прежде чем использовать ту же файловую переменную для нового набора данных, необходимо с помощью процедуры Close закрыть этот файл.

Для работы с файлом прежде всего необходимо его открыть. В языке Паскаль предусмотрены для этого две процедуры:

Reset(var F: file); - открывает существующий файл;

Rewrite(var F: file); -создает и открывает новый файл.

При описании обеих процедур параметр file означает файловую переменную любого типа. Открытие внешнего файла с помощью процедуры Reset в случае его отсутствия на диске может привести к ошибке при выполнении программы.

Пример1. Стандартное открытие файла

Assign(F, ' ');

Reset(F);

Процедура Rewrite создает и открывает новый файл. Использование этой процедуры требует особого внимания. При попытке создать и открыть новый файл с именем уже существующего на диске набора данных действие процедуры Rewrite сведется к удалению этого набора и созданию нового пустого файла с тем же именем.

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

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

Close (Var F);

Использование процедуры Close позволяет устранить связь файловой переменной с внешним файлом, установленную с помощью процедуры Assign.

Пример 2. Полная цепочка команд для создания простого текстового файла с именем WORK.TXT:

Var

F: text;

begin

Assign(F, ' WORK. ТХТ');

Rewrite(F);

Write(F, 'Простой текстовый файл');

Close(F);

end.

К языковым средствам обслуживания файлов необходимо отнести процедуры переименования и удаления неоткрытых файлов. Использование этих процедур не зависит от типа файла.

Rename(var F; NewName: string);

Процедура переименовывает неоткрытый файл F любого типа. Новое имя задается строкой NewName. ]

Erase(var F);

Процедура удаляет неоткрытый внешний файл любого типа, задаваемый переменной F.

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

Пример 3. Удаление или переименование файла

Var

F: file;

Ch: char;

St: string;

begin

Write('Введите имя файла: ');

Readln(St); {Чтение имени}

Assign(F, St); {Назначить имя файловой переменной}

Write('Удалить файл (У), Переименовать(П), Выход(В)');

Readln(Ch);

case Ch of

'У ', ' y': Erase(F); {Удаление файла}

'П','п': begin

Write('Введите новое имя файла: ');

Readln(St);

Rename(F, St); {Переименование файла}

end;

'В','в': Halt(1);

end;

end.

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

Для того чтобы файловые операции выполнялись без ошибок, необходимо использовать специальную функцию IOresult. Функция работает без параметров и возвращает значение типа integer, представляющее статус последней выполненной операции ввода-вывода. Использование этой функции в программах возможно лишь в том случае, если на время выполнения файловых операций отключена стандартная проверка операций ввода-вывода. Для этих целей используется либо специальная опция в интегрированной системе, либо директива компилятора {$I}, которая может задаваться внутри текста программы.

Пример 4. Вариант программы для проверки существования файла на диске

Var

F: file;

St: string;

begin

Write('Введите имя файла: ');

Readln(St);

Assign(F, St);

{$I-} {Отключить стандартную обработку ошибок}

Reset(F); {Открыть файл}

{$I+} {Включить стандартную обработку ошибок}

if IOresult = 0 then

begin

Writeln('Файл существует и нормально открыт');

Close(F); {Закрыть файл}

end

else

Writeln('Файла с именем '+St+' на диске нет');

end.

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

Рассмотренные операции ввода-вывода охватывают все типы файлов в Турбо Паскале и характеризуют взаимоотношения файловой и операционной систем.

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

Процедуры и функции для работы с любыми файлами Описание
ASSIGN(F,Name) Связь файловой переменной F с внешним файлом Name. Name-переменная или константа типа String,Char. Имя файла должно быть написано в соответствии с правилами DOS. F- переменная любого файлового типа.
RESET(F[,SIZE]) Открытие существующего файла. Открывается существующий файл, с которым связана файловая переменная F и указатель текущего компонента файла перемещается на начало файла. Необязательный параметр SIZE используется только в нетипизированных файлах и задает размер пересылаемого элемента информации в байтах.
REWRITE(F[,SIZE]) Открытие нового пустого файла. Открывается новый пустой файл, и ему присваивается имя, заданное процедурой ASSIGN. Если файл с таким именем уже существует, то он уничтожается. Необязательный параметр SIZE используется только в нетипизированных файлах и задает размер пересылаемого элемента информации в байтах.
ERASE(F) Уничтожение файла. Удаляет неоткрытый внешний файл, задаваемый переменной F.
RENAME (F,NewName) Переименование файла. Переименовывает неоткрытый внешний файл, задаваемый переменной F, новое имя задается строкой NewName.
CLOSE(F) Закрытие файла.
EOF(F) Конец файла.

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

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

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

Var

F:text;

Начало работы с текстовым файлом - стандартное: файловой переменной ставится в соответствие имя файла (процедура Assign), а затем открывается новый текстовый файл (процедура Rewrite) или открывается существующий текстовый файл (процедура Reset).

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

Процедуры и функции для работы с текстовыми файлами Описание
APPEND(F)     Открытие существующего файла. Открывается существующий файл, с которым связана файловая переменная F и указатель текущего компонента файла перемещается на конец файла. F- переменная любого файлового типа. После открытия текстовый файл можно дополнять информацией, начиная с конца строки.
READ(F,<список>) Чтение из файла.
READLN(F,<список>) Чтение строки из файла.
SETTEXTBUF(F,BUF[,SIZE]) Назначение буфера ввода- вывода. Для файла, с которым связана файловая переменная F, назначается буфер ввода- вывода в виде переменной BUF любого типа.
WRITE(F,<список>) Запись в файл.
WRITELN(F,<список>) Запись строки в файл.
EOLN(F) Коней строки файла.
EOF(F) Конец файла.

Пример программы работы с текстовым файлом

Program Txt_file; {Пример обработки текстового файла}

Type

fil = text;

Var

Fl, Fl_New: fil;

Name, New_Name: string[12];

Txt: string;

Ch: char;

procedure Read_Text; {Считывание текста из файла}

begin

{$I-} {Директива компилятору на отключение стандартной проверки операций ввода-вывода}

Repeat

Write('Введите имя файла для считывания текста: ');

Readln(Name); Writeln;

Assign(Fl,Name);

Reset (Fl);

if IOresult<>0 then

begin

Writeln('Файл не найден...');

Close(Fl);

end;Writeln;

Until IOresult=0;

 

{$I+} {Директива компилятору на включение стандартной проверки операций ввода-вывода}

Writeln('Файл ',Name, ': ');Writeln;

while not Eof(Fl) do

begin

Readln(Fl, Txt);

Writeln(Txt);

end;

Close(Fl);Writeln;

Write('Файл считан, нажмите Enter...');Readln;

end; {конец процедуры Read_Text }

procedure App_Text; {Добавление текста в файл}

begin

Append(Fl); {Открыть файл для присоединения нового текста}

Writeln('Файл ',Name,' открыт для присоединения нового текста ');

Writeln('Вводите текст для записи(для окончания нажмите Enter):');

Writeln;

Repeat

Write (':>');

Readln(txt);

Writeln(fl,txt);

Until txt=' ';

Close(Fl);Writeln;

Writeln('Присоединение нового текста окончено, нажмите Enter...');

Readln;

end; {конец процедуры App_Text}

procedure Erase_File; {Удаление файла}

begin

Erase(Fl); {Удаление файла}

Writeln('Файл ',Name,' удален с диска, нажмите Enter...');

Readln;

end; {конец процедуры Erase_File}

procedure Rename_File; {Переименование файла}

begin

Write('Введите новое имя файла: ');

Readln (New_Name);

Rename(Fl,New_Name); {Переименование файла}

Writeln('Файл',Name,'переименован в ',New_Name,',нажмите Enter...');

Readln;

end; {конец процедуры Rename_File}

procedure Copy_File; {Копирование текстового файла}

begin

Write('Введите имя файла, в который копируется файл ', Name);

Readln(New_Name);

Reset(Fl);

Assign (Fl_New,New_Name);

Rewrite(Fl_New);

while not Eof(Fl) do

begin

Readln(Fl,Txt);

Writeln (Fl_New, Txt);

end;

Close (Fl);

Close (Fl_New);Writeln;

Write('Файл ',Name,' скопирован в ',New_Name,', нажмите Enter...');

Readln;

end; {конец процедуры Copy_File}

Begin {Начало основной программы}

Inp_Text;

App_Text;

Write('Удалить файл (D),переименовать(R),скопировать(С),Выход(Е) ');

Readln(Ch);

case Ch of

'D','d': Erase_File;

'R','r': Rename_File;

'С','с': Copy_File;

'E', 'e': Halt(1);

end;

end.

Порядок выполнения работы

1. Изучить теоретические сведения по теме “Написание программы на языке Паскаль с использованием файловых переменных. Разработка программы для работы с текстовым файлом”.

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

3. Показать работающую программу преподавателю.

4. Ответить на контрольные вопросы.

Контрольные вопросы

1. Понятие файла. Описание файлового типа данных.

2. Файлы последовательного и прямого доступа. Средства обработки файлов.

3. Текстовые файлы. Процедуры и функции работы с текстовыми файлами.

 

Лабораторная работа № 29



Поделиться:


Последнее изменение этой страницы: 2016-08-12; просмотров: 349; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.12.30 (0.011 с.)