Страница произведения
Войти
Зарегистрироваться
Страница произведения

Фокал - часть 3 (пишется)


Автор:
Опубликован:
24.05.2026 — 04.07.2026
Читателей:
1
Аннотация:
Типа продолжение к "Фокал снаружи и внутри"
Предыдущая глава  
↓ Содержание ↓
 
 
 

к каждой такой записи, описывающей одно поле, прилагалось еще и его значение.

Что значит "прилагалось"? Надо уточнить. Пока что я это понимаю так, что

вот у меня есть открытый файл (поток); его указатель чтения/записи указывает на

некоторый его элемент; этот самый элемент (запись разумеется) уже считан и

находится в связанным с этим файлом буфере. А каждая запись метапотока имеет

указатель на то поле этого буфера, которое описывает. На предмет получения

оттуда содержащегося в этом поле значения.

Ага-ага: теперь надо уточнять, что значит здесь слово "получение"?

Ну как "что" — вот например у нас есть файл (поток) открытый под

псевдонимом П; под псевдонимом Q открываем его метафайл: Ope () П; Ope %M Q

и теперь написав что-то типа: Ope QS; Write %M; Ope %; получаем нечто типа:

@имя_метафайла :имя_поля1 = значение1 :имя_поля2 = значение2 .... ! (или ;

и продолжение в следующих строках — если не поместилось в одну). Где после

знака = (равно) — содержимое соответствующего поля из текущей записи файла,

открытого под псевдонимом П. Ага.

Сделать то вот такое для одного этого частного случая вполне можно. А для

общего? Для общего получается, что эти самые "значения" — значения одного и

того-же поля. Уж не знаю (пока) как оно называется, но не слишком ли круто?

Получается, что у каждой записи метафайла это поле будет разное — в точности

того типа, как описывается самой этой записью. Ну и что, что метафайл -

виртуальный. Договорились же, что в потоке записей, все записи одинаковые!

Ну ладно, пусть таки это поле типа указатель на поток из одного элемента.

При чем со свойством автоматического разыменования, как в Си-плюс-плюсе то ли

"указатель" то ли "ссылка" (вечно я названия этих адресных типов путаю).

Ха! А как он вообще выглядит, этот самый "общий случай"? Как... Ну например

мы откроем вот этот вот мета-файл, найдя его в оном виртуальном каталоге

мета-файлов. Пока правда не знаю как это сделать. В смысле как переключить на

него канал "Д", но возможно придумаю. И тогда, спрашивается, на какие именно

поля какого из нескольких сответствующих данному метафайлу потоков будут

направлены все эти ссылки? Учитывая, что может их и вправду несколько, а может

и ни одного — все уже закрыты или еще даже не открывались (и/или даже и не

созданы), но было заранее введено описание...

О котором я опять благополучно забыл!

Ну в общем — да: получается что метафайл сам по себе, но будучи открыт, он

всегда связан с каким-то конкретным файлом, или же пока ни с каким — тоже

виртуальным — только чтобы было где хранить начальные значения, буде они

указаны в описании. Форму и вид которого я так старательно отлыниваю придумать.

Придумать осталось каким образом обозначаем параметры поля. Имя это имя,

оно после двоеточия обязательно первое. Значение всегда последнее — после знака

= (равно). А вот остальные параметры...

— номер по порядку — например #число

— смещение от начала записи — например +число

— размер поля — например *число

— тип поля — например /буковка (пусть такая же как в .dbf)

— комментарий — после ; или ! и до конца строки

Пусть там где нужно число, может быть числовое выражение в любых скобках, а

там где буковка... Вот если бы нам надо было ограничиться только файлами типа

.dbf то позаимствовали бы оттедова оные буковки и всё:

"C" — символьное

"N" — числовое

"L" — логическое

"D" — дата (типа: ГГГГММДД)

"F" — число с плавающей запятой

"M" — "мемо" — хранящийся где-то отдельно текстовый комментарий (вернее десять

цифр — его адрес в файле типа .dbt)

Вот только для общего случая этого категорически недостаточно. Потому что

например число здесь вовсе не двоичное, а последовательность цифр. И вообще

похоже, что этот самый .dbf (вернее его основной поток) типа насквозь текстовый.

И вот с помощью этого не получится как-то описать даже заголовок самого этого .

dbf-овского файла.

И, кстати, в форматном преобразовании (это которое "еще более форматное",

чем само форматное выражение оператора Write %): ={X%формат} и #{Y%формат}

у нас вообще-то примерно такая же проблема. А еще хочется, чтобы буковки,

обозначающие типы здесь и форматы там были одни и те же или хотя бы как-то

между собою согласованы. А там у нас — буковки, позаимствованные у Сишных

функций printf() и scanf() (с их же помощью и реализовано):

d i o u x — целое число (десятичное, 8 и 16-ричное, беззнаковое...)

b — тоже целое, но бинарное

e f g — плавающее

c s — символы

При ближайшем рассмотрении ни то ни то нам не годится. Подходит только в

первом приближении: у printf() и scanf() формат должен описывать в том числе

и аргументы этих функций, а нам этого не надо: у нас тип значения один

единственный. Поэтому нам надо только то, во что их преобразовать. Так что

буковки d o x b обозначающие десятичное, восьмеричное, шестнадцатиричное и

двоичное (какового, кстати у printf() и scanf() нет) — да, пригодятся. А вот

"u" указывающая что аргумент беззнаковый... Или "i"... Ха, это только при

выводе "i" дублирует "d", а при вводе он распознаёт числа вида 0xNNN 0NNN 0bNNN.

Однако, эту миссию поручим таки "N", а "i" и "u" пусть обозначают бинарное

целое — со знаком и без. (Со знаком — в дополнительном коде.) А "f" — тоже

бинарное число с плавающей запятой. А вот по поводу нетандартной упаковки

мантисы и порядка... Подумаем.

Текстовое поле фиксированной длины (например 15 симовов): %15C а вот %15S

это будет строка со служебными символами, типа обрамляющих её кавычек, а так

же экранирующих... Которые, кстати, могут быть очень даже разные: в Си и в

UNIX`е это (обратная косая черта), у нас шаблонах — % (процент)... Так что

этот механизм тоже должен быть в некоторой степени настраиваемым... Подумаем.

Вообще с полями фиксированного размера проблем нет (указывается числовой

константой), а вот как быть если он — переменного? При чем у нас имеет место

быть два варианта (даже три): либо размер указывается некоторым другим полем,

либо его границы обозначаются некоторыми конструкциями — от одиночного символа

'n' как в UNIX`овских текстовых файлад, до достаточно сложных конструкций,

вот как в .xml: <тег>......

продолжение следует

123 ... 141516
Предыдущая глава  
↓ Содержание ↓
 



Иные расы и виды существ 11 списков
Ангелы (Произведений: 91)
Оборотни (Произведений: 181)
Орки, гоблины, гномы, назгулы, тролли (Произведений: 41)
Эльфы, эльфы-полукровки, дроу (Произведений: 230)
Привидения, призраки, полтергейсты, духи (Произведений: 74)
Боги, полубоги, божественные сущности (Произведений: 165)
Вампиры (Произведений: 241)
Демоны (Произведений: 265)
Драконы (Произведений: 164)
Особенная раса, вид (созданные автором) (Произведений: 122)
Редкие расы (но не авторские) (Произведений: 107)
Профессии, занятия, стили жизни 8 списков
Внутренний мир человека. Мысли и жизнь 4 списка
Миры фэнтези и фантастики: каноны, апокрифы, смешение жанров 7 списков
О взаимоотношениях 7 списков
Герои 13 списков
Земля 6 списков
Альтернативная история (Произведений: 213)
Аномальные зоны (Произведений: 73)
Городские истории (Произведений: 306)
Исторические фантазии (Произведений: 98)
Постапокалиптика (Произведений: 104)
Стилизации и этнические мотивы (Произведений: 130)
Попадалово 5 списков
Противостояние 9 списков
О чувствах 3 списка
Следующее поколение 4 списка
Детское фэнтези (Произведений: 39)
Для самых маленьких (Произведений: 34)
О животных (Произведений: 48)
Поучительные сказки, притчи (Произведений: 82)
Закрыть
Закрыть
Закрыть
↑ Вверх