Книга: Технологии программирования
4.6.3. Документирование файлов
4.6.3. Документирование файлов
Структура файлов создается одновременно с выявлением оперативных структур данных и с разработки процедур записи информации в файл и считывания информации из файла. Описание файлов обычно начинается с указания назначения, полного имени файла, атрибутов, диспозиции, организации и вида доступа. В документальном описании организации файлов стандартной организации достаточно упомянуть тип этого файла. Например, файл типа текстовый в кодировке MS DOS. При необходимости можно дополнительно описать порядок смысловых строк теста.
Документирование порядка следования информации в файлах, состоящих из сблокированных записей фиксированной длины и с большим количеством полей, а также документирование сложных нетипизированных файлов обычно выполняют тремя способами.
Согласно первому способу порядок информации в файле определяется последовательным рассмотрением цепочек байтов файла с использованием таблиц.
По второму способу, порядок размещения информации в файле определяется комментированными описаниями оперативной структуры данных на языках программирования, из которых осуществляется запись информации в файл и в которые предполагается считывание информации из файла.
Согласно третьему способу описание выполненное по второму способу, дополняется текстами процедур "чтения/записи" файла.
Практика показала, что использование документации файлов, составленной сторонними фирмами по второму и особенно по третьему способу не вызывало затруднений.
"Чтение/запись" файлов со сложной произвольной организацией, как правило, производится последовательными порциями. Первая порция считывается в статическую запись оперативной памяти. Эту запись называют заголовочной (header). Она содержит один или несколько байтов идентификации, которые необходимы для проверки подлинности файла (его принадлежности к конкретным программам). В заголовочной информации может быть указана версия файла. Считывание последующих порций осуществляется как в статические, так и в динамические связные переменные, причем их длина может определяться информацией, полученной как из заголовочной порции, так и из ряда предшествующих порций.
Рассмотрим пример документирования файла представленной ранее электронной таблицы при помощи таблиц структуры файла. При этом алгоритмы процедур записи информации в файл и считывания информации из файла проектировались одновременно с оперативными структурами электронной таблицы.
При разработке структуры файла были добавлены следующие глобальные описания:
Const
{Характеристики файла}
FILEIDENT = 'My Spreadsheet'; {Идентификатор}
FILESEXTENSION = 'MSS'; {Стандартный тип файла}
Var
FeleName: String; {Имя файла таблицы}
{Видимая ширина колонок таблицы}
ColWidth: array [1..MAXCOLS] of Byte;
{Информация о заполнении таблицы}
LastCol, {Последняя заполненная колонка таблицы}
LastRow: Word; {Последняя заполненная строка таблицы}
Локальные описания:
Var
EndOfFile; Char; {Признак конца текстового файла}
Col; Word; {Номер колонки клетки}
Row; Word; {Номер столбца клетки}
Count; Word; {Число заполненных клеток таблицы}
Size; Word; {Длина информации клетки}
CPtr; TCellPtr; {Указатель на клетку}
F; File; {Файловая переменная}
Blocks; Word; {Прочитано или записано байт}
Файл хранения электронной таблицы является файлом постоянного хранения, бинарным произвольной длины; имеет имя, определенное пользователем, но с расширением имени "MSS".
Организация заголовочной части файла электронной таблицы представлена в табл. 4.1.
Таблица 4.1
Заголовочная часть файла электронной таблицы
Оперативная информация | Длина оперативной информации, байт | Комментарий |
FILEIDENT | Length (FILEIDENT) | Константа строки идентификации |
EndofFile | SizeOf (EndOfFile) | Признак конца текстового файла |
LastCol | SizeOf (LastCol) | Последняя заполненная колонка таблицы |
LastRow | Sizeof (LastRow) | Последняя заполненная строка таблицы |
Count | Sizeof (Count) | Число заполненных клеток таблицы на участке таблицы (1, 1, LastCol, LastRow) |
ColWidth | Sizeof (ColWidth[1] * MAXCOLS) | Вектор ширин колонок таблицы от 1 до MAXCOLS |
Запись в файл EndOfFile со значением 2610 = 1A16 (Ctrl + Z) обеспечивает вывод на экран только строки идентификации при просмотре файла с помощью большинства программ просмотра текстовых файлов.
При чтении файла электронной таблицы считанная информация первой текстовой строки файла проверяется на совпадение с FILEIDENT.
Информация о заполнении таблицы характеризует участок таблицы (1, 1, LastCol, LastRow), в пределах которого пользователь внес изменения информации таблицы.
Значение Count при записи рассчитывается с использованием двух вложенных циклов, задающих номера всех клеток на участке таблицы (1, 1, LastCol, LastRow). В циклах значение Count увеличивается на единицу, если значение указателя на информацию клетки ? Nil.
В таблице 4.2 приведена организация информации очередной непустой клетки файла электронной таблицы.
Таблица 4.2
Информация очередной непустой клетки файла электронной таблицы
Оперативная информация | Длина оперативной информации, байт | Комментарий |
Col | SizeOf (Col) | Номер колонки клетки |
Row | SizeOf (Row) | Номер строки клетки |
Cells [Col, Row].CellFormat | Sizeof (Word) | Формат клетки |
Size | Sizeof (Size) | Длина информации клетки |
Фактическая информация клетки | Size | Информация клетки |
Значение Col, Row определяют сохраняемые или сохраненные в файле координаты каждой непустой клетки. Фрагмент кода программы сохранения информации непустой клетки таблицы приведен ниже:
if Cells [Col, Row].CellPtr <> nil then
begin
CPtr:= Cells [Col, Row].CellPtr;
case CPtr^.Attrib of
TXT: Size:= Length (CPtr^.TextStr) + 3;
VALUE: Size:= Sizeof (Real) + 2;
FORMULA: Size: = Length (CPtr^.Formula) + Sizeof (Real) + 3;
end; {case}
BlockWrite (F, Col, SizeOf (Col), Blocks);
BlockWrite (F, Row, SizeOf (Row), Blocks);
BlockWrite (F, Cells [Col, Row].CellFormat, Sizeof (Word), Blocks);
BlockWrite (F, Size, SizeOf (Size), Blocks);
BlockWrite (F, CPtr^, Size, Blocks);
end;
ВЫВОДЫ
• Под структурой данных программы понимают множество элементов данных, связей между ними, а также характер их организованности. Структуры данных и алгоритмы служат основой построения программ.
• Структура данных может быть физической и логической. В общем случае между логической и соответствующей ей физической структурами есть различие, вследствие которого существуют правила отображения логической структуры на физическую структуру.
• Над всеми структурами данных могут выполняться пять операций: создание, уничтожение, выбор (доступ), обновление, копирование.
• Важный признак структуры данных — характер упорядоченности ее элементов. Существует бесконечное множество способов упорядочения информации, среди которых имеются и общие, наиболее часто встречаемые и известные большинству программистов.
• Физическое представление может не соответствовать логическому представлению и, кроме того, существенно различаться в разных программных системах.
• Многие из рассмотренных структур данных возможно реализовать с использованием статических структур данных, динамических переменных и динамических структур данных.
• Файл — упорядоченный набор информации на внешнем носителе (наиболее часто на дисковом носителе).
Контрольные вопросы
1. Что такое структура данных программы?
2. Что понимают под организованностью данных?
3. В какой форме могут представляться данные?
4. Что отражает физическая структура данных?
5. В чем различие между физической и логической структурами данных?
6. Какие операции могут выполняться под структурами данных?
7. Приведите примеры широко известных структур данных.
8. Чем характеризуется статический массив?
9. Что такое строка? Какие бывают виды строк?
10. Назовите простейший метод поиска элемента.
11. Назовите основные операции над стеком.
12. Назовите процедуры для работы с симметричной матрицей.
13. Приведите пример реализации на языке Turbo Pascal структуры данных электронной таблицы.
14. Какие средства содержит файловая система?
15. Какую информацию содержит дескриптор файла или блок управления файлом?
16. С чего, как правило, начинается описание файлов?
17. Какими способами обычно выполняют документирование сложных нетипизированных файлов?
18. Что такое рефакторинг?
19. В каких случаях может потребоваться рефакторинг имен?
- 4.6. ФАЙЛОВЫЕ СТРУКТУРЫ
- Резервное копирование многофайловых баз данных
- Восстановление из резервных копий многофайловых баз данных
- Создание файлов с блокировкой
- Рекомендуемое расширение для файлов баз данных - *.ib
- Создание многофайловой базы данных
- Правила именования файлов
- Глава 6 Файловые системы
- 3.4 Сетевая файловая система
- 6.4 Другие файловые системы
- 6.5 Файловая система NTFS
- 6.6 Файловые системы для сетей хранения данных