русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Типизированные файлы


Дата добавления: 2014-11-28; просмотров: 1010; Нарушение авторских прав


Записи типизированного (структурированного) файла имеют одинаковый тип (а значит, имеют одинаковый размер – именно поэтому к ним и возможен прямой доступ). Структуру типизированного файла представлена на Рис. 7.

  Запись 0  
  Запись 1  
  Запись 2  
  Запись 3  
  Eof  
Рис. 7.Структура типизированного файла
       

Записи файла пронумерованы. Нумерация начинается с нуля. В конце файла записан специальный неотображаемый символ Eof(«End of file» - конец файла).

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

1. Описание файловой переменной:

Var f : File Of <тип записи файла>;

где f – имя файловой переменной.

Файловая переменная – это переменная-указатель, посредством которой идет взаимодействие программы (чтение/запись данных) с внешним файлом.

Записи файла могут иметь любой из рассмотренных выше типов (как стандартный, так и сконструированный в блоке Type).

Например:

Type Stud = Record

Name : String;

Group : Integer;

Rating : Real

End;

Var f1 : File of Stud; { записями файла f1 являются записи (Record) из трех полей }

f2 : File Of Integer; { записи файла f2 – целые числа }

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

Assign ( f, <имя файла> );

где f – имя файловой переменной, <имя файла> - строковая константа или переменная. Например, выполнение команды Assign ( f, ’c:\tp70\data’ ) свяжет файловую переменную f с файлом «data», который расположен на диске C: в папке с именем «tp70». После записи такой команды в тексте программы нигде далее не будет указываться имя файла, с которым работает программа.

3. Открытие файла для записи данных:



Rewrite (f);

Файл создается заново. Если для записи открыт уже существующий файл, то все данные из него будут потеряны.

4. Открытие файла для чтения данных:

Reset (f);

Для чтения можно открыть только существующий файл. Указатель устанавливается на первую запись (т.е. на первый символ первой строки) файла.

5. Запись данных в файл:

Write ( f, <имя переменной> );

Тип переменной должен совпадать с типом записей файла.

6. Чтение данных из файла:

Read ( f, <имя переменной> );

7. Закрытие файла:

Close ( f );

8. Функция FileSize( f ) возвращает количество записей в файле.

9. Функция FilePos ( f ) возвращает номер текущей записи, т.е. той записи файла, на которую указывает указатель.

10. Команда Seek ( f , n ) устанавливает указатель на запись файла с номером n. Например, команда Seek ( f , FileSize( f ) ) установит указатель после последней записи файла. Это позволяет, в частности, дописывать данные в конец типизированного файла.

Примеры решаемых задач

Пример 1. Составить программу, которая:

а) запишет в файл Price список товаров (название и цена);

б) обработает файл Price следующим образом:

- выведет на экран прайс-лист;

- изменит цену товара с заданным наименованием;

- допишет в файл данные о новом товаре (предварительно проверив, что в файле информации о таком товаре нет).

Программы:

Program A;

Uses Crt;

Type tovar = Record

name : String;

price : Real

End;

Var t : tovar; { переменная t для хранения информации об очередном товаре }

f : File Of tovar; { f – файловая переменная }

k, n : Integer;

Begin

Clrscr;

Assign (f, ’Price’); { связывание файловой переменной f с файлом ‘Price’, который будет создан в текущей папке }

Rewrite(f); { открыли файл для записи }

Write (‘Введите количество товаров в списке ‘);

Readln (n);

For k:=1 To n Do

Begin

Write (‘Введите наименование ’,k,’-го товара ’);

Readln (t.name); { запросили значение первого поля записи }

Write (‘Введите цену товара ’);

Readln (t.price); { запросили значение второго поля записи }

Writeln (f, t) { записали в файл запись t }

End;

Close (f); { закрыли файл }

Writeln (‘Файл создан’); { вывели на экран поясняющее сообщение}

Readln

End.

Program B;

Uses Crt;

Type tovar = Record

name : String;

price : Real

End;

Var t : tovar; { переменная t для хранения информации об очередном товаре }

f : File Of tovar; { f – файловая переменная }

k, n : Integer;

nt : String;

new_price : Real;

new_t : tovar;

Begin

Clrscr;

Assign (f, ’Price’); { связывание файловой переменной f с файлом ‘Price’, который будет создан в текущей папке }

{ вывод на экран содержимого файла }

Reset (f); { открыли файл }

Writeln (‘Прайс – лист: ‘);

While Not Eof (f) Do { пока не достигнут конец файла }

Begin

Readln (f, t); { прочитали из файла очередную запись в переменную t }

Writeln (t.name:20, t.price:10:2) { вывели на экран значения полей записи – наименование и цену товара }

End;

Close (f); { закрыли файл }

{ изменение цены отдельного товара }

Reset (f); { открыли файл }

Write (‘Введите наименование товара, у которого меняется цена ‘);

Readln (name_t);

Write (‘Введите новую цену ‘);

Readln (new_p);

While Not Eof (f) Do { пока не достигнут конец файла }

Begin

Readln (f, t); { прочитали из файла очередную запись в переменную t }

If t.name = nt { если прочитанное из файла наименование товара совпадает с тем, у которого меняется цена, то}

Then Begin

t.price := new_price; { меняем цену товара в записи t }

Seek (f, FilePos (f) -1); { устанавливаем указатель обратно на ту запись в файле, у которой изменили цену}

Write (f, t) { записываем переменную t с измененным значением поля price в файл }

End

End;

Close (f); { закрыли файл }

{ дописывание в конец файла информации о новом товаре }

Write (‘Введите наименование нового товара ‘);

Readln (new_t.name);

Write (‘Введите цену ‘);

Readln (new_t.price);

Reset (f); { открыли файл }

{ проверим, есть ли данные о таком товаре в файле }

flag := false; { сначала считаем, что такого товара в файле нет }

While Not Eof (f) Do { пока не достигнут конец файла }

Begin

Readln (f, t); { прочитали из файла очередную запись в переменную t }

If t.name = new_t.name { если прочитанное из файла наименование товара совпадает с тем, который хотим дописать в файл}

Then Flag := True { запоминаем, что данные о таком товаре есть в файле}

End;

If Not flag { если данных о новом товаре в файле не найдено (т.е. значение переменной flag осталось равным false) }

Then Begin

Seek (f, FileSize (f) ); { устанавили указатель в конец файла }

Write (f, new_t) { записали в файл данные о новом товаре}

End;

Close (f); { закрыли файл }

Writeln (‘Новые данные дописаны в файл’);

Readln

End.

Примечание. При проверке, есть ли в файле данные о новом товаре или нет, правильнее заголовок цикла While записать в виде:

While (Not Eof (f)) And (Not Flag)Do …

 

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



<== предыдущая лекция | следующая лекция ==>
Текстовые файлы | Контрольные задания


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.042 сек.