Технологии программирования | страница 99
Организация заголовочной части файла электронной таблицы представлена в табл. 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 со значением 26>10 = 1A>16 (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);