# save_format

формат файлов, созданных функцией "save"

## Описание

Переменные сохраняются Scilab'ом с помощью функции save в следующем формате:

каждая запись переменной добавляется в файл последовательно. Запись переменной начинается с 6-ти чисел типа длинное целое, хранящих имя переменной в кодированном формате (см. раздел Примечания ниже), после чего следует тип переменной (длинное целое), затем, в зависимости от него, следует:

Матрицы значений с плавающей запятой (тип 1)

  `row_size` `m` (размер строки, число типа long integer),

  `column_size` `n` (размер столбца, число типа long integer),

  признак вещественности/комплекснозначности `it` (целое число типа long integer на интервале `{0,1}`),

  данные (`n*m*(it+1)` чисел типа double)

Полиномы (тип 2) и Неявный полином размера, используемый для (тип 129)

  `row_size` `m` (размер строки, число типа long integer),

  `column_size` `n` (размер столбца, число типа long integer),

  признак вещественности/комплекснозначности `it` (целое число типа long integer в интервале `{0,1}`),

  формальное имя переменной (16 байт),

  `index_table` (таблица индексов, `m*n+1` целых чисел типа long integer),

  данные (`(N-1)*(it+1)` чисел типа double), где `N` -- это значение последнего элемента таблицы индексов `index_table`.

Booleans (тип 4)

  `row_size` `m` (размер строки, число типа long integer),

  `column_size` `n` (размер столбца, число типа long integer),

  данные (`n*m` целых чисел типа long integer).

Разрежённые матрицы чисел с плавающей запятой (тип 5)

  `row_size` `m` (размер строки, число типа long integer),

  `column_size` `n` (размер столбца, число типа long integer),

  real/complex_flag `it` (целое число типа long integer на интервале `{0,1}`),

  `total_number_of_non_zero_elements` `nel` (общее количество ненулевых элементов, число типа long integer),

  `number_of_non_zero_elements_per_row` (число количество ненулевых элементов на строку, `m` целых чисел типа long integer),

  `column_index_non_zero_elements` (индексы столбцов ненулевых элементов, `nel` целых чисел типа long integer),

  `non_zero_values` (ненулевые значения, `nel*(it+1)` чисел типа double).

Разрежённые матрицы логических значений (тип 6)

  `row_size` `m` (размер строки, число типа long integer),

  `column_size` `n` (размер столбца, число типа long integer),

  неиспользуемое `it` (целое число типа long integer),

  `total_number_of_non_zero_elements` `nel` (общее количество ненулевых элементов, число типа long integer),

  `number_of_non_zero_elements_per_row` (число количество ненулевых элементов на строку, `m` целых чисел типа long integer),

  `column_index_non_zero_elements` (индексы столбцов ненулевых элементов, `nel` целых чисел типа long integer).

Разрежённая матрица Matlab'а (тип 7)

  `row_size` `m` (размер строки, число типа long integer),

  `column_size` `n` (размер столбца, число типа long integer),

  real/complex_flag `it` (целое число типа long integer на интервале `{0,1}`),

  `total_number_of_non_zero_elements` `nel` (общее количество ненулевых элементов, число типа long integer),

  `number_of_non_zero_elements_per_column` (количество ненулевых элементов на столбец, `n` целых чисел типа long integer),

  `row_index_non_zero_elements` (индекс строки ненулевых элементов, `nel` целых чисел типа long integer),

  `non_zero_values` (ненулевые значения, `nel*(it+1)` чисел типа double).

матрицы целых чисел (тип 8)

  `row_size` `m` (размер строки, число типа long integer),

  `column_size` `n` (размер столбца, число типа long integer),

  `integer_type` (тип целого числа, число типа long integer): 1, 2, 4, или 11, 12, 14 для знаковых и беззнаковых 1-, 2-, 4-байтных целых чисел,

  данные (`n*m` байт для `integer_type` 1 или 11, `n*m` чисел типа short integer для `integer_type` 2 или 12, `n*m` целых чисел типа long integer для `integer_type` 4 или 14).

handles (тип 9)

  version (4 bytes)

  `row_size` `m` (размер строки, байт),

  `column_size` `n` (размер столбца, байт),

  данные (`m*n` записей в последовательной форме `serialization_record`)

  Запись в последовательной форме `serialization_record` -- это представление в плоском виде C-структуры данных, связанной с соответствующим графическим объектом. Каждый графический объект определяется (рекурсивным) набором свойств (см. справку по функции get).

  Сохранённая запись `serialization_record` графического объекта структурирована в следующем виде:

  serialization_record

    длина типа `type_length` `n` (байт),

    тип `type` (`n` байт, ascii-коды имени типа),

    запись `property_values` (переменная длина).

Строки (тип 10)

  `row_size` `m` (размер строки, число типа long integer),

  `column_size` `n` (размер столбца, число типа long integer),

  `index_table` (`n*m+1` целых чисел типа long integer),

  данные (`N` целых чисел типа long integer, Scilab-кодировка символов (см. code2str), где `N` -- это значение последнего элемента таблицы индексов `index_table`.

Некомпилированные функции (тип 11)

  `nout` (целое число типа long integer),

  `lhs_names` (`6*nout` целых чисел типа long integer, см. раздел "Примечания" ниже),

  `nin` (целое число типа long integer),

  `rhs_names` (`6*nin` целых чисел типа long integer, см. раздел "Примечания" ниже),

  `code_length` `N` (целое число типа long integer),

  `code` (`N` целых чисел типа long integer).

Компилированные функции (тип 13)

  `nout` (целое число типа long integer),

  `lhs_names` (`6*nout` целых чисел типа long integer, см. раздел "Примечания" ниже),

  `nin` (целое число типа long integer),

  `rhs_names` (`6*nin` целых чисел типа long integer, см. раздел "Примечания" ниже),

  `pseudo_code_length` `N` (целое число типа long integer),

  `pseudo_code` (`N` целых чисел типа long integer).

Библиотеки (тип 14)

  `path_length` `np` (длина пути, целое число типа long integer),

  `path_name` (имя пути, `np` целых чисел типа long integer: последовательность кодов символов пути, (см. code2str)),

  количество имён `nn` (целое число типа long integer),

  имена (`6*nn` целых чисел типа long integer, см. раздел "Примечания" ниже).

списки (тип 15), типизированные списки (тип 16), матричноориентированные списки (тип 17)

  количество полей `n` (целое число типа long integer),

  индекс (`n+1` целых чисел типа long integer),

  последовательность переменных `variables_sequence` (`n` переменных, каждое из которых записано в своём формате).

Указатели (тип 128)

  Не обрабатываются

Указатели на функцию (тип 130)

  `function_ptr` (указатель на функцию, целое число типа long integer, (see funptr)),

  `function_name_code` (код имени функции, 6 целых чисел типа long integer, см. раздел "Примечания" ниже).

## Примечания

Числа (типа long interger, short integer, double) хранятся в прямом порядке байтов.

Имена переменных хранятся в виде последовательности из 6 целых чисел типа long integer с особой кодировкой. См. подробности в файле `cvname.f`.

## Смотрите также

- save
- load
- listvarinfile
- type
- typeof