русс | укр

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

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

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

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


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

Работа с двоичными файлами данных

Основной недостаток текстовых файлов – их громоздкость. Если в двоичном виде число 65534 представляется всего двумя байтами, то его текстовая запись требует уже пяти байт. К тому же в очень многих задачах нельзя ограничиться только буквами, а нужно хранить все 256 символов (например, для представления растрового изображения, где каждый байт соответствует одному из 256 цветов точки). Наконец, базы данных в большинстве случаев представляют собой двоичные файлы. Ведь текстовые файлы – последовательного доступа, в них нельзя сразу перейти, скажем, на 250 строку, а именно это нужно при поиске информации в базе данных.

Для знакомства и с двоичными файлами, и с базами данныхзаведем досье на студентов университета – вещь, незаменимая для декана. Каждый студент будет описываться следующей структурой данных:

TYPE Tstudent=RECORD
name, fname, mname: STRING; { ФИО }
year: BYTE; { курс }
department: BYTE; { кафедра }
spec: STRING[6]; { код специальности }
group: STRING[7]; { код группы }
END;

Первое, что приходит в голову – сохранять все поля записи по отдельности в текстовый файл. Вот так делать НЕ НАДО:

VAR f:TEXTFILE;

WriteLn(s.name);

WriteLn(s.fname)

Конечно, информация запишется, но в громоздком и неструктурированном виде. Как потом там искать студента номер 125? Есть способ лучше – создать двоичный файл прямого доступа:

VAR f:FILE OF Tstudent;

s:Tstudent; { переменная для сохранения в файле }

Оператор FILE OF Tstudent описывает двоичный файл прямого доступа, каждый элемент которого имеет тип Tstudent. Слова "прямой доступ" означают, что можно, не перечитывая файл с самого начала, прочитать или записать информацию в элемент файла с указанным порядковым номером.

Элементы в двоичный файл прямого доступа записываются так:

AssignFile(f,’data.dat’);
ReWrite(f);
s.name:=’Иванов’;

….
Write(f,s); { целиком записываем всю запись! }
CloseFile(f);

Здесь одной командой Write (WriteLn применима только к текстовым файлам) записывается вся запись s целиком. Для считывания информации используется команда вида Read(f,s). Но как попасть на нужный элемент в файле?

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

Рис. 17.6. Двоичный файл прямого доступа.

Команда Seek(f,n) выполняет переход к n-ному элементу файла f:

Seek(f,10) ; { переход к 10-му студенту }
Read(f,s); { считывание его данных }
s.Year:=s.Year+1; { перевели на новый курс }
Write(f,s); { обновили данные в файле }

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

FilePos(f) – возвращает номер текущего элемента в файле f;
FileSize(f) – возвращает общее количество элементов в файле f.

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

Reset(f);
FOR I:=0 TO FileSize(f)-1 DO
BEGIN
Read(f,s);
WriteLn(s.name+’ ’+s.fname[1]+’.’+s.mname[1]+’.’)
END;

CloseFile(f);

Функция FileSize немного "хитрая". Несмотря на название, она не всегда возвращает размер файла в байтах. Если файл состоит из элементом размером в один байт – то да, это верно. Иначе же FileSize вернет величину . Отсюда вывод: чтобы узнать размер файла в байтах, следует открывать его как FILE OF BYTE.

Просмотров: 671


Вернуться в оглавление



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


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

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

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


 


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

 
 

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