Технологии программирования | страница 99



Организация заголовочной части файла электронной таблицы представлена в табл. 4.1.

Таблица 4.1

Заголовочная часть файла электронной таблицы

Оперативная информацияДлина оперативной информации, байтКомментарий
FILEIDENTLength (FILEIDENT)Константа строки идентификации
EndofFileSizeOf (EndOfFile)Признак конца текстового файла
LastColSizeOf (LastCol)Последняя заполненная колонка таблицы
LastRowSizeof (LastRow)Последняя заполненная строка таблицы
CountSizeof (Count)Число заполненных клеток таблицы на участке таблицы (1, 1, LastCol, LastRow)
ColWidthSizeof (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

Информация очередной непустой клетки файла электронной таблицы

Оперативная информацияДлина оперативной информации, байтКомментарий
ColSizeOf (Col)Номер колонки клетки
RowSizeOf (Row)Номер строки клетки
Cells [Col, Row].CellFormatSizeof (Word)Формат клетки
SizeSizeof (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);