Операции перемещения по файлу, определение параметров файла 


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



ЗНАЕТЕ ЛИ ВЫ?

Операции перемещения по файлу, определение параметров файла



Процедура 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) используется для удаления части файла, начиная от текущей позиции указателя до окончания файла.

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

В программе на языке 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+) (включаем автоматический контроль }

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

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

Содержимое текстового файла рассматривается как последовательность символьных строк переменной длины, разделенных специальной комбинацией кодов, «конец строки» (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.

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

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.1

№ варианта Тип данных (табл. 7..2) Задание имени файла (табл. 7.3) Сообщение об ошибках (табл. 7.4) Последовательность операций над данными (табл. 7.5)
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         

Таблица 7.2

№ варианта Тип данных в файле
  Текст
  Вещественные числа
  Целые числа
  Записи со структурой табл. 7.6
  Записи со структурой табл. 7.7
  Записи со структурой табл. 7.8
  Записи со структурой табл. 7.9
  Записи со структурой табл. 7.10

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

№ варианта Вариант задания имени файла   № варианта Вариант вывода сообщений об ошибках
  Ввод с клавиатуры     Краткий
  Строковая константа в программе     Расширенный

Таблица 7.5

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

 

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

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

Товар   Сотрудник
Наименование Цена Количество   Фамилия Должность Оклад
             

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

Студент   Фирма
Фамилия Экзаменационные оценки   Название Курс акций
  Математика Информатика     покупка продажа
             

Таблица 7.10

Автомобиль
Марка Мощность Максимальная скорость

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Основная литература

1. Немнюгин С.А. Turbo Pascal: Практикум. – СПб., Питер, 2001.

2. Немнюгин С.А. Turbo Pascal: Практикум. – СПб., Питер, 2001.

3. Довгаль С.И. и др. Персональные ЭВМ: Турбо Паскаль v.7.0, объектное программирование, локальные сети: Уч. пос. – Киев: Информсистема сервис, 1993. 480 с.

4. Кнут Д. Искусство программирования для ЭВМ. Т. 1. Основные алгоритмы. – М.: Мир, 1976. 736 с.

5. Зуев Е.А. Программирование на языке Turbo Pascal 6.0, 7.0. – М.: Радио и связь, 1993.

6. Белецкий Я. Турбо Паскаль с графикой для персональных компьютеров. – М.: Машиностроение, 1991. 320 с.

7. Епанешников. Программирование в среде Турбо Паскаль v.7.0. – М.: ДИАЛОГ-МИФИ, 1996.

8. ГОСТ 19.701-90. ЕСПД. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения.

9. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс: Уч. пос. – М.:, Нолидж, 1997. 616 с.

10. Долгушева Л.Н., Пикулин В.В. Основы алгоритмизации и языки программирования: Уч.-практич. пос. – Пенза: Изд-во Пенз. технол. ин-та, 2003.

Дополнительная литература

1. Алгоритмизация и основы программирования / Г.И. Светозарова. – М.: Высшая школа, 1987. 128 с.

2. Йенсен К., Вирт Н. Паскаль: руководство для пользователя. – М.: Фин. и стат., 1989. 255 с.

3. Васюкова Н.Д., Тюляева В.В. Практикум по основам программирования. Язык Паскаль: Уч. пос. – М.: Выс. шк., 1991. 160 с.

4. Вирт Н. Алгоритмы + структуры данных = программы. – М.: Мир, 1985. 406 с.

5. Хершель Р. Turbo Pascal 4.0/5.0. – 1992.

6. Краткое руководство по Turbo Pascal 5.5. – М.: НПФ "И.В.К. Софт", 1991. 84с.

7. Йодан Э. Структурное проектирование и конструирование программ. – М.: Мир, 1979. 416 с.

8. Зуев Е.А. Язык программирования Turbo Pascal 6.0. – М.: Унитех, 1992. 298 с.

9. Фокс Дж. Программное обеспечение и его разработка. – М.: Мир, 1985. – 238 с.

10. Зелковиц М. Принципы разработки программного обеспечения. – М.: Мир, 1982. 368 с.

11. Бондарев В.М. Основы программирования. – Харьков: Фомио; Ростов н/Д: Феникс, 1998.


Приложение. Титульный лист

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ РФ

ПЕНЗЕНСКАЯ ГОСУДАРСТВЕННАЯ ТЕХНОЛОГИЧЕСКАЯ АКАДЕМИЯ

КАФЕДРА ИНФОРМАТИКИ

Отчет о лабораторных работах по дисциплине

«Информатика и программирование»

Выполнил:

ст. группы 07А1

Иванов В.М.

Проверил:

ст. преп. каф.

«Информатика»

Петров В.В.

Пенза, 2008 г.



Поделиться:


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

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