Лабораторная работа №7 Обработка файлов средствами языка Turbo Pascal



Скачать 260.33 Kb.
Дата11.07.2014
Размер260.33 Kb.
ТипЛабораторная работа
Лабораторная работа № 7

Обработка файлов средствами языка Turbo Pascal



7.1. Цель работы

Освоение методики проектирования Pascal-программ с использованием операций с файлами.



7.2. Задание на лабораторную работу

Разработать две программы, выполняющие заданные последовательности действий над данными определенного типа с использованием файлов в соответствии с вариантом задания.



7.3. Требования к программе

Программа должна выполнять:

– вывод сообщения о разработчике и о назначении программы;

– ввод данных в режиме диалога.

Сохранение данных в файле и чтение данных из файла организовать как процедуру или функцию.

Выполнить контроль ошибок при открытии файлов.



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

1. Получить вариант задания (п. 7.7, таблица 7.1).

2. Изучить процедуры и функции, используемые для работы с файлами, и необходимые для выполнения данной лабораторной работы (п. 7.5).

3. Разработать алгоритм подготовки и обработки данных на основе заданных операций.

4. Подготовить текст программы и отладить программу с использованием среды Turbo Pascal; см. пример п. 7.6.

5. Устно ответить на контрольные вопросы (п. 7.9).

6. Оформить отчет (см. п. 1.10).

7.5. Справки по файловым процедурам и функциям

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

Файл можно представить как список значений одного и того же (базового) типа; количество значений в программе не ограничивается.

Все элементы файла считаются пронумерованными; начальный элемент имеет нулевой номер.

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



7.5.1. Описание файловых переменных

Для работы с файлами в программе должны быть определены переменные файловых типов, которые считаются представителями файлов в Pascal-программе.

Переменные файлового типа определяются по следующему правилу:

<Имя переменной> : file of <базовый тип>;

где «базовый тип» – любой допустимый в Turbo Pascal тип, кроме файлового типа.

Примеры описаний файловых типов и переменных:

Type Person = record

Name : string[40];

Tarif : Longint

end;

FP = file of Person;

Var F1, F2 : FP; {F1, F2 - файловые переменные для представления

в программе файлов, которые могут содержать записи типа Person}

Symb_F : file of char; {переменная для работы с файлами, которые могут

содержать символы}

Table : file of String[80]; {переменная для работы с файлами, которые могут содержать символы}

InputData : file of real;

F : file of integer;

7.5.2. Установочные и завершающие операции с файлами

В эту группу входят четыре операции, реализованные в виде стандартных процедур со следующими именами: Assign, Reset, Rewrite, Flush, Close.



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

Правило обращения к процедуре Assign:

Assign (F, S);

F – имя файловой переменной,

S – строковое выражение, образующее имя файла по правилам, принятым в операционной системе MS-DOS (может включать в себя обозначение дисковода, цепочку каталогов и имя файла).

Примеры: Assign (F, ‘D:\MYDIR\MyFile.dta’ );

После выполнения данного вызова файловая переменная F будет связана с дисковым файлом MyFile.dta, расположенным в каталоге MYDIR из корневого каталога диска D).

.................

S:=’RESULT.DAT’;

Assign (F1, S);

.................

write(‘Введите имя файла для сохранения данных:’);

readln(S); Assign (F2, S);

.................

Процедура Reset(F) предназначена для открытия файлов для чтения. При этом файловая переменная F должна быть уже связана с конкретным дисковым файлом с помощью процедуры Assign.

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

Процедура Reset(F) предполагает, что открываемый дисковый файл уже существует, в противном случае возникает ошибка.

Процедура Rewrite(F) предназначена для открытия файлов для записи. При этом файловая переменная F должна быть уже связана с конкретным дисковым файлом с помощью процедуры Assign.

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



Процедура Flush(F) используется для завершения обменов с файлом без его закрытия. Обмены с файлами всегда реализуются через некоторый буфер в оперативной памяти, поэтому в процессе записи в файл последние записываемые элементы могут еще находиться («застрять») в буфере. Процедура Flush вызывает принудительный сброс этих элементов в файл.

Процедура Close(F) завершает действия с файлом. При этом ликвидируются внутренние буферы, образованные при открытии файла, оставшиеся в буфере данные сохраняются в файле.

7.5.3. Операции ввода-вывода

Операции ввода-вывода (чтения из файла и записи в файл) реализуются с помощью процедур: Read, Write.

Правила записи операторов:

Read(F, A, B, C,...);

Write(F1, X, Y, Z, ...);

F, F1 – имена файловых переменных, к которым были применены операции открытия Reset и Rewrite соответственно,

A, B, C – переменные, типы которых совпадают с базовым типом файловой переменной F,

X, Y, Z – выражения, типы которых совпадают с базовым типом файловой переменной F1.

Примеры:

Read(F, A); {чтение значения одного элемента файла}

Read(F, B, C); {последовательное чтение значений двух элементов}

Read(F, M[i]); {чтение значения одного элемента и присвоение прочитанного значения элементу массива (запись в массив)}

Write(F1, X); {запись значения одной переменной в файл}

Write(F1, X, Y); {последовательная запись значений двух переменных в файл}

Write(F1, M[i]); {запись значения i-го элемента массива в файл}

Write(F1, X, X*X, X+Y, X/(Y-Z)); {последовательная запись в файл значений указанных выражений}

................

Выполнение процедуры Read происходит следующим образом. Начиная с текущей позиции указателя файла будут последовательно читаться значения, содержащиеся в файле. Каждое прочитанное значение будет присваиваться очередной переменной из тех, которые указаны в вызове процедуры. После чтения очередного значения указатель файла будет смещаться на следующую позицию. Если в процессе выполнения процедуры Read текущий указатель файла будет установлен на позицию, не содержащую информации (то есть будет достигнут конец файла), то чтение будет прекращено, процедура Read завершится преждевременно, и возникнет ситуация ‘конец файла». Возникновение этой ситуации можно проверить с помощью встроенной функции EOF.

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

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

После выполнения процедуры Seek дальнейшие операции чтения или записи будут проводиться начиная с установленной позиции указателя.



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

Функция FilePos(F) определяет номер элемента, на который установлен текущий указатель.

Примеры использования:



Seek (F, FilePos (F)+1) {пропуск одного элемента}

Seek (F, FileSize (F)) {установка текущего указателя непосредственно за последним элементом файла; это может служить исходной позицией для добавления злементов в конец файла}

Функция EOF(F) возвращает логическое значение true, если достигнут признак конца файла, или false в противном случае. Например, если файл использовался для чтения, то возникновение ситуации «конец файла» (и, соответственно, значение true, возвращаемое функцией EOF) означает, что все элементы файла прочитаны.

Процедура Truncate(F) используется для удаления части файла, начиная от текущей позиции указателя до окончания файла.

7.5.5. Обработка ошибок ввода-вывода

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

Имеется возможность предусмотреть собственную реакцию на ошибочные ситуации в самой программе. Для этого необходимо в начале «опасного» фрагмента программы отключить автоматическую проверку на возникновение ошибки. Это делается внесением директивы компилятора {$1-}. В этом случае возникновение ошибки при выполнении программы не будет приводить к немедленному ее завершению; вместо этого код ошибки (отличный от нуля) будет сохранен системой. Посредством стандартной функции IoResult без параметров можно получить этот код и построить дальнейшие действия в зависимости от его значения, например, вывести краткое сообщение об ошибке (без указания причины ошибки):

..........

Assign (F, ‘c:\myfile’ );

{$I-} { отключение автоматического контроля }

Reset (F);

($I+) { включение автоматического контроля }

if loResult <> 0 then { возникла ошибка! }

begin

Writeln(‘Ошибка при открытии файла для чтения’);

Writeln(‘Работа будет закончена.’);

Writeln;

Writeln(‘Нажмите Enter ...’);

Readln;

Exit {Выход из процедуры}

end;

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

При необходимости можно провести более детальный (расширенный) анализ кода ошибки, например:

Assign (F, ‘ с: \myfile ‘ );

{$1-} { отключаем автоматический контроль }

Reset (F);

Code :=IoResult; { получили код результата }

if Code <> 0 then

begin { возникла ошибка! }

Write(‘ Ошибка при открытии файла: ‘);

саsе Code of

1 : Writeln (‘Файл не найден’);

3 : Writeln (‘Маршрут не найден’);

4 : Writeln (‘Слишком много открытых файлов’);

5 : Writeln (‘Доступ к файлу запрещен’);

12 : Writeln (‘Некорректный код доступа к файлам’)

else

Writeln(‘Неизвестный код ошибки’);

end

end;

{$I+) ( включаем автоматический контроль }

................

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

Содержимое текстового файла рассматривается как последовательность символьных строк переменной длины, разделенных специальной комбинацией кодов, «конец строки» (13 или 0Dh), «перевод строки» (10 или 0Ah). Текстовый файл завершается специальным кодом «конец файла» (26 или 1Ah).

Представителем текстового файла в Pascal-программе является переменная файлового типа, которая должна быть описана с указанием стандартного типа text; например,

var MyText : text;

Для текстовых файлов применимы вышеопределенные начальные и завершающие операции (Assign, Reset, Rewrite, Flush, Close).

Текстовый файл может быть открыт для дополнения с помощью процедуры Append (F); эта процедура открывает файл для записи, но не очищает его, а устанавливает текущий указатель файла за последней записью.

Для записи в текстовый файл и чтения из него используются процедуры ReadLn и WriteLn. Эти процедуры осуществляют те же действия, что и соответствующие процедуры Read и Write, но после операций чтения и записи производят переход к следующей строке текстового файла.

Для контроля за окончанием текстового файла можно использовать функцию EOF.



Функция SeekEoLn(F) производит поиск конца текущей строки. Она пропускает все символы-разделители значений в строке (пробелы и табуляции) и устанавливает текущий указатель файла либо на конце строки (и тогда возвращает true), либо на первом значащем символе.

Функция SeekEoF(F) осуществляет поиск конца файла и действует аналогично функции SeekEoLn, но кроме символов-разделителей она пропускает символы концов строк (то есть переходит со строки на строку) в поисках кода конца файла. Если код 1Ah найден, то функция возвращает true, в противном случае – false.

7.6. Пример структуры программы

program file_operation; {Программа для работы со списком сотрудников}

uses crt;

type

zap=record {Определение записи с полями «фамилия» - name, «тарифная ставка» - tarif}

name:string[15];

tarif:LongInt

end;

var

F1: file of zap;

s : zap; c : char;

procedure out_fil; {Процедура сохранения данных в файле}

var file_name : string;

begin

..... {Задание имени файла для сохранения}

assign(F1, file_name);

... {Открытие файла для записи и контроль ошибок при выполнении этой операции}

repeat

write(‘Введите фамилию или * (признак окончания ввода ‘);

readln(s.name);

if s.name <> ‘*’ then

begin

writeln(‘Введите тариф’);

readln(s.tarif);

write(F1,s)

end

until s.name = ‘*’;

close(F1)

end;

procedure IN_fil; {Процедура чтения данных из файла и вывода на экран}

var file_name : string;

begin

... {Задание имени файла для чтения}

assign(F1, file_name);

... {Открытие файла для чтения и контроль ошибок при

выполнении этой операции}

writeln(‘------ Список ... -------‘); {Заголовок списка}

repeat {Цикл чтения данных из файла и вывода на экран}

read(F1,s);

writeln(s.name, ‘ ‘,s.tarif)

until Eof(F1);

close(F1)

end;

begin { ---- Начало головной части программы ----}

repeat { Цикл сохранения данных. Если при каждом обращении к процедуре Out_fil задавать разные имена файлов, то этот

цикл позволит сохранить несколько списков; каждый список в своем файле}

clrscr;

Out_fil;

writeln(‘Закончить ввод списков ? (Y/N)’); readln;

until (c = ‘Y’) or (c=’y’);

repeat { Цикл чтения данных. Этот вариант позволяет просмотреть списки из разных файлов, имена которых задаются при каждом обращении к процедуре In_fil}

clrscr;

In_fil;

writeln(‘Закончить просмотр списков ? (Y/N)’); readln(с);

until (c = ‘Y’) or (c=’y’);

end. {Окончание программы}

7.7. Варианты заданий

Таблица 7.1



№ варианта

Тип данных

(табл. 7..2)



Задание имени файла

(табл. 7.3)



Сообщение об ошибках (табл. 7.4)

Последовательность операций над данными (табл. 7.5)

1

1

2


1

2


2

1


1

2


2

1

2


2

1


1

2


3

4


3

1

3


1

2


2

1


1

2


4

1

4


1

2


2

1


3

4


5

2

4


1

2


1

2


1

2


6

2

4


2

1


2

1


3

4


7

2

5


1

2


1

2


1

2


8

2

5


2

1


2

1


3

4


9

2

6


1

2


1

2


1

2


10

2

6


2

1


1

2


3

4


11

2

7


1

2


2

1


1

2


12

2

7


2

1


2

1


3

4


13

1

2


2

1


2

1


4

3


14

1

3


1

2


2

1


2

1


15

2

8


1

2


1

2


1

2


16

3

4


2

1


2

1


3

4


17

3

5


1

2


1

2


1

2


18

3

6


2

2


1

2


3

4


19

3

7


1

2


1

2


1

2


20

3

8


2

1


1

2


3

4


Таблица 7.2



№ варианта

Тип данных в файле

1

Текст

2

Вещественные числа

3

Целые числа

4

Записи со структурой табл. 7.6

5

Записи со структурой табл. 7.7

6

Записи со структурой табл. 7.8

7

Записи со структурой табл. 7.9

8

Записи со структурой табл. 7.10

Таблица 7.3 Таблица 7.4



№ варианта

Вариант задания имени файла




№ варианта

Вариант вывода сообщений об ошибках

1

Ввод с клавиатуры




1

Краткий

2

Строковая константа в программе




2

Расширенный

Таблица 7.5



№ варианта

Вариант цепочки операций над данными

1

Ввод с клавиатуры и запись в массив, запись из массива в файл, чтение из файла и вывод на экран

2

Ввод с клавиатуры и запись в файл, чтение из файла и вывод на экран, дополнение файла

3

Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран

4

Ввод с клавиатуры и запись в массив, запись из массива в файл, дополнение файла, чтение из файла и вывод на экран

Структуры данных для программы (к табл. 7.2)

Таблица 7.6 Таблица 7.7

Товар




Сотрудник

Наименование

Цена

Количество




Фамилия

Должность

Оклад

Таблица 7.8 Таблица 7.9



Студент




Фирма

Фамилия

Экзаменационные оценки




Название

Курс акций




Математика

Информатика







покупка

продажа

Таблица 7.10



Автомобиль

Марка

Мощность

Максимальная скорость


7.8. Содержание отчета (см. п. 1.10)

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

1. Что такое «файл»?

2. Что такое «указатель текущей записи»?

3. Какую структуру может иметь имя файла?

4. Из каких элементов может состоять файл? Как нумеруются элементы файла?

5. Каково назначение переменных файлового типа? Как могут быть определены такие переменные в Pascal-программе?

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

7. Каковы правила записи операторов чтения из файла и записи в файл?

8. Как происходит выполнение процедур чтения из файла (записи в файл)?

9. Какая процедура предназначена для явного изменения значения текущего указателя в файле? Какие параметры используются при этом?

10. Каково назначение функций FileSize, FilePos, EOF?

11. Как организовать обработку ошибок при работе с файлами? Каков алгоритм обработки? Какие операторы могут быть использованы для этого?

12. Что такое «текстовый файл»? Как определить в Pascal-программе файловые переменные для работы с текстовыми файлами?

13. Какие процедуры используются для открытия текстовых файлов, для чтения из файла, записи в файл?



14. Как организовать сохранение в файле данных, вводимых с клавиатуры?

15. Как организовать чтение данных из файла и вывод на экран?

Похожие:

Лабораторная работа №7 Обработка файлов средствами языка Turbo Pascal iconПрограммирование на процедурном языке высокого уровня(Turbo Pascal)
Паскаль постоянно совершенствовался, и сегодня его наиболее полно представляют версии Turbo Pascal 0, Borland Pascal 0, а также Object...
Лабораторная работа №7 Обработка файлов средствами языка Turbo Pascal iconКраткая теория по курсу информатика Типы данных языка программирования Turbo Pascal
В языке программирования Turbo Pascal все данные, используемые программой должны принадлежать к какому-либо типу данных. Некоторые...
Лабораторная работа №7 Обработка файлов средствами языка Turbo Pascal iconУрок n 17 Основы программирования на языке Turbo Pascal
Паскаль (Pascal)- учебный инструментальный язык программирования вычислительных машин и персональных компьютеров. На современных...
Лабораторная работа №7 Обработка файлов средствами языка Turbo Pascal iconДанные логического, символьного и строкового типа в Turbo Pascal. Библиотека (модуль) crt и Graph. Работа с файлами в Turbo Pascal. Построение графиков функций. Численные методы
Логический тип переменных называется булевым. Он основан на ма- тематической логике, в которой применяются две константы: 1 ис
Лабораторная работа №7 Обработка файлов средствами языка Turbo Pascal iconУрок №57-58 Языки и системы программирования. Начальные сведения о языке Turbo Pascal
...
Лабораторная работа №7 Обработка файлов средствами языка Turbo Pascal iconКурсовая работа по информатике на тему: Объекты Turbo Pascal 0
В основе того или иного языка программирования лежит некоторая руководящая идея, оказывающая существенное влияние на стиль соответствующих...
Лабораторная работа №7 Обработка файлов средствами языка Turbo Pascal iconРабота в системе турбо паскаль (ТП)
Яп паскаль был разработан Н. Виртом в 1968 – 1970году и получил широкое распространение благодаря наглядности программ и легкости...
Лабораторная работа №7 Обработка файлов средствами языка Turbo Pascal iconВычисление элементарных функций
Разработать подпрограмму-функцию с использованием целочисленных операторов языка Turbo Pascal
Лабораторная работа №7 Обработка файлов средствами языка Turbo Pascal iconЛабораторная работа №3. Знакомство с прерываниями. Лабораторная работа №4. Программная обработка клавиатуры
Лабораторная работа №1. Знакомство с общим устройством и функционированием ЭВМ. Изучение структуры процессора, организации памяти,...
Лабораторная работа №7 Обработка файлов средствами языка Turbo Pascal iconО. Ф. Власенко, И. В. Беляева обработка двухмерных массивов в языках turbo pascal и си
Методические указания к выполнению лабораторных работ по программированию для студентов направления 552800 “Информатика и вычислительная...
Разместите кнопку на своём сайте:
ru.convdocs.org


База данных защищена авторским правом ©ru.convdocs.org 2016
обратиться к администрации
ru.convdocs.org