Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.23;
Скачать: CL | DM;

Вниз

Можно ли у произвольного рекорда узнать названия полей и их типы?   Найти похожие ветки 

 
Land   (2008-02-11 02:23) [0]

То есть хочу написать функцию, чтобы я ей произвольный рекорд, а она мне текстом расписывает все его поля и их значения. Такое возможно?


 
ketmar ©   (2008-02-11 02:28) [1]

используй классы.

---
Understanding is not required. Only obedience.


 
Land   (2008-02-11 02:30) [2]

Так всем и передам. Пусть все используют классы.


 
ketmar ©   (2008-02-11 02:32) [3]

>[2] Land (2008-02-11 02:30:00)
молодец. так и передай.

---
Understanding is not required. Only obedience.


 
Германн ©   (2008-02-11 02:39) [4]


> Land   (11.02.08 02:23)

Ещё передай, что те кто "хочет написать функцию, чтобы они ей произвольный рекорд, а она им текстом расписывает все его поля и их значения" - полные идиоты.
При передаче можешь сослаться на меня. :)))


 
Land   (2008-02-11 03:02) [5]

Передавайте всё сами, а вопрос остаётся стоять.


 
wicked ©   (2008-02-11 03:05) [6]

в делфи так напрямую нельзя
говорят, что так можно делать в точкаНЕТ, джаве и обероне...


 
Германн ©   (2008-02-11 03:12) [7]


> Land   (11.02.08 03:02) [5]
>
> Передавайте всё сами, а вопрос остаётся стоять.
>

Ну и пусть стоит вопрос. А кому он мешает? Мне лично - не мешает.
P.S. Мало ли что, где стоит. :)
P.P.S. Хочешь написать функцию - напиши, если "такой умный" :)


 
boa_kaa ©   (2008-02-11 03:19) [8]


> wicked ©   (11.02.08 03:05) [6]

(облизываясь) можно... еще как... :)


 
ferr   (2008-02-11 04:05) [9]

интроспекцией и рефлексией славятся скриптовые языки..


 
Произвольный рекорд   (2008-02-11 09:06) [10]

Удачи ;)

 TVarData = packed record
   VType: Word;
   Reserved1, Reserved2, Reserved3: Word;
   case Integer of
     varSmallint: (VSmallint: Smallint);
     varInteger:  (VInteger: Integer);
     varSingle:   (VSingle: Single);
     varDouble:   (VDouble: Double);
     varCurrency: (VCurrency: Currency);
     varDate:     (VDate: Double);
     varOleStr:   (VOleStr: PWideChar);
     varDispatch: (VDispatch: Pointer);
     varError:    (VError: LongWord);
     varBoolean:  (VBoolean: WordBool);
     varUnknown:  (VUnknown: Pointer);
     varByte:     (VByte: Byte);
     varString:   (VString: Pointer);
     varAny:      (VAny: Pointer);
     varArray:    (VArray: PVarArray);
     varByRef:    (VPointer: Pointer);
 end;


 
@!!ex ©   (2008-02-11 09:20) [11]

Автор, я отвечу на твой вопрос после того, как ты мне расскажешь, как собираешься в функцию передавать проивзольный рекорд.


 
MsGuns ©   (2008-02-11 09:21) [12]

>wicked ©   (11.02.08 03:05) [6]
>в делфи так напрямую нельзя

Хоть прямо, хоть криво узнать нельзя в любом компилляторе. А вот в интерпретаторе можно.

Автору сабжа контрвопрос: можно ли по купленной в маркете свиной вырезке узнать имя кабанчика, из которого ее "вырезали" ?
И вдогонку - а зачем собственно ?


 
Anatoly Podgoretsky ©   (2008-02-11 10:18) [13]

> Германн  (11.02.2008 03:12:07)  [7]

Когда стоит то не мешает.


 
Dmitry S ©   (2008-02-11 10:32) [14]


> @!!ex ©   (11.02.08 09:20) [11]

расскажи мне:

function GetRecordInfo(ARecord: Pointer; ARecordSize: Integer):string;

Передавать так:

GetRecordInfo(@SomeRecord, SizeOf(SomeRecord));


 
Игорь Шевченко ©   (2008-02-11 10:34) [15]


> Автор, я отвечу на твой вопрос после того, как ты мне расскажешь,
>  как собираешься в функцию передавать проивзольный рекорд.
>


через var ?


 
Dib@zol ©   (2008-02-11 10:36) [16]

> [14] Dmitry S ©   (11.02.08 10:32)

Нет, это-то понятно. Только как трактовать эти данные? Какие байты из этого куска памяти должны "сложиться" в WORD"ы, а какие - в DWORD"ы, или в знаковые типы?


 
Dib@zol ©   (2008-02-11 10:37) [17]

Ах да. Можно стоп-битами :)


 
Dmitry S ©   (2008-02-11 10:38) [18]


> Нет, это-то понятно. Только как трактовать эти данные? Какие
> байты из этого куска памяти должны "сложиться" в WORD"ы,
>  а какие - в DWORD"ы, или в знаковые типы?

@!!ex сейчас покажет как :)


 
Skyle ©   (2008-02-11 10:47) [19]

Удалено модератором


 
Dib@zol ©   (2008-02-11 10:48) [20]

> [0] Land   (11.02.08 02:23)

Вощем так. Каждый RECORD в памяти хранится как цепочка байтов без всяких условных обозначений. "Разбивает" её на отдельные значения сама программа. И если не влезать в программный код и не искать дизассемблером что-то типа MOVZX EAX, WORD PTR [EBP+2], то задача в общем случае не решаема. Хотя в принципе, если уж так надо, то можно в эту цепочку действительно добавить по два стоп-бита после каждого байта: первый отвечает за знаковость типа, второй - за необходимость отделения, то есть ...1010 1101 11... означает, что это один байт знакового типа (shortInt).


 
Dmitry S ©   (2008-02-11 10:50) [21]


> Dib@zol ©   (11.02.08 10:48) [20]

А как же строки?


 
Skyle ©   (2008-02-11 10:50) [22]


> Dib@zol ©   (11.02.08 10:48) [20]

По-моему правильнее будет не заниматься хиромантией, а использовать наследников TPersistent (или свои классы с M+).


 
Dib@zol ©   (2008-02-11 10:52) [23]

> [21] Dmitry S ©   (11.02.08 10:50)

А так же. Строки - суть указатели. А они - типа DWORD. Признаком указателя может быть, напр, включённый стоп-бит в третьем по счёту байте. Это будет указанием, что надо-таки прочесть не три а четыре байта, но что это не просто число, а пойнтер.


 
Dib@zol ©   (2008-02-11 10:54) [24]

> [22] Skyle ©   (11.02.08 10:50)

Ну, задача была поставлена именно для записей, я и привёл пример того, что можно сотворить конкретно для записей. Не нравится - не пользуйте :) Я вот лично низашто не буду так делать :)


 
Игорь Шевченко ©   (2008-02-11 11:19) [25]

Кулибин в гробу от зависти перевернулся


 
Dib@zol ©   (2008-02-11 11:20) [26]

> [25] Игорь Шевченко ©   (11.02.08 11:19)

Откуда столько злобы в мой адрес?


 
Palladin ©   (2008-02-11 11:24) [27]

программирование не терпит предположений понимашь...


 
Palladin ©   (2008-02-11 11:24) [28]

иначе лучшими программистами будут гадалки...


 
Dib@zol ©   (2008-02-11 11:29) [29]

А тут и не предположения будут. А точные данные :)
Правда придёца всю систему работы с RECORD-ами перекраивать... Однако меня это уже не касаецо. Моё дело предложить =)


 
Marser ©   (2008-02-11 11:47) [30]


> Однако меня это уже не касаецо. Моё дело предложить =)

Это как в анекдоте про ёжиков и дядю Филина, как, мол, нам сделать так, чтобы нас лиса не кушала? - Вы, ёжики, себе крылья отрастите и лиса вым будет нестрашна. - Ура, классно! Пошли ёжики довой и на полпути их осенило, пришлось вернуться: - дядя Филин, а как же нам их отрастить-то? - Э-э, ёжики, это уж вам думать, как, а моё дело стратегия.


 
Skyle ©   (2008-02-11 11:48) [31]

Ну тогда я тоже предложу....
В любом входящем рекорде первое поле - длина описание, второе - указатель на него. То есть все рекорды начинаются с
TMyBaseRecord = record
 DescLen : Word;
 Desc : String;
 ......

а все проблемы с памятью - за счёт заведения.


 
Kerk ©   (2008-02-11 11:50) [32]


> Dib@zol ©   (11.02.08 11:20) [26]
> > [25] Игорь Шевченко ©   (11.02.08 11:19)
>
> Откуда столько злобы в мой адрес?

Это все от зависти


 
Palladin ©   (2008-02-11 11:51) [33]

...вот так слово за слово и пршли они к RTTI...


 
Palladin ©   (2008-02-11 11:56) [34]


> Можно ли у произвольного рекорда узнать названия полей и
> их типы?

понимаешь... записи оно на то сделаны, дабы компилятор имел некое логическое представление о физическом наполнении... усе, а остальные задачи решаются при помощи других инструментов и возможностей компилятора... нефиг ложкой консерву открывать... она не для того сделана...


 
DiamondShark ©   (2008-02-11 12:11) [35]


> MsGuns ©   (11.02.08 09:21) [12]
>
> Хоть прямо, хоть криво узнать нельзя в любом компилляторе.
>  А вот в интерпретаторе можно.

Поражающее глубиной невежества заявление.


 
Anatoly Podgoretsky ©   (2008-02-11 12:14) [36]

> Dib@zol  (11.02.2008 11:29:29)  [29]

Твоя задача наложить кучу в углу и убежать.


 
Ins ©   (2008-02-11 12:20) [37]

Автору:

Для того, чтобы решить вашу задачу, доджны соблюдаться два условия:
1. Для рекордов должна генерироваться RTTI, содержащая информацию о ее полях и их типах.
2. Должна существовать возможность, имея ссылку на рекорд в памяти, получить ссылку на соответствующую ей RTTI.

Для рекордов в Delphi ни одно из этих условий не выполняется, зато для классов:
1. Для всех классов, скомпилированными с директивой $M+ или их потомков (в VCL - это все потомки класса TPersistent) генерируется RTTI об опубликованных свойствах.
2. У класса TObject, а соответствено у всех его потомков, есть метод ClassInfo, позволяющий по объектной ссылке получить указатель на RTTI.


 
Sandman25   (2008-02-11 12:25) [38]

DiamondShark ©   (11.02.08 12:11) [35]

Формально он прав.
Потому как "компилЛяторов" не существует :)


 
Dib@zol ©   (2008-02-11 12:55) [39]

> Твоя задача наложить кучу в углу и убежать.

Высказывание, достойное убелённого сединами старца :\

Вот одного не понимаю: чего ж я такого сказал, что это подняло волну ненависти?


 
Kerk ©   (2008-02-11 13:07) [40]


> DiamondShark ©   (11.02.08 12:11) [35]
> Sandman25   (11.02.08 12:25) [38]

Осторожнее, сейчас он вам про люмпенов расскажет :))


 
Sandman25   (2008-02-11 13:10) [41]

Kerk ©   (11.02.08 13:07) [40]

Главное, чтобы на национальность не перешел :)


 
Anatoly Podgoretsky ©   (2008-02-11 13:22) [42]

> Dib@zol  (11.02.2008 12:55:39)  [39]

Ненависти?
Много о себе думаешь!


 
ketmar ©   (2008-02-11 15:48) [43]

>[39] Dib@zol © (2008-02-11 12:55:00)
какой ненависти? здорового смеха.

---
Understanding is not required. Only obedience.


 
Семеныч   (2008-02-11 16:29) [44]

И правда - че налетели на парня? Ну, неточно он выразился, пусть даже и ошибся, пусть даже и не знает чего-то - так объясните, поправьте... если в лом - просто промолчите... а при чем тут куча в углу?

Странно... неужто и в жизни общение на том же уровне? Вряд ли ведь.


 
antonn ©   (2008-02-11 16:35) [45]

мдя... все умные, остальные дураки, поэтому можно плюнуть в собеседника фразой, кратко характеризующее его умственные способности, и лишь немного говорящей, что автор не прав (просто не прав, а не где именно неправ и почему неправ). Продолжайте в том же духе, хамье.


 
Palladin ©   (2008-02-11 16:36) [46]

а я за свободу слова!


 
Игорь Шевченко ©   (2008-02-11 17:16) [47]


> а я за свободу слова!


Я тоже! Но не всякого...


 
Palladin ©   (2008-02-11 17:18) [48]

так в том то и дело, я еще и за рамки приличия! :)


 
Ins ©   (2008-02-11 17:49) [49]


> И правда - че налетели на парня? Ну, неточно он выразился,
>  пусть даже и ошибся, пусть даже и не знает чего-то - так
> объясните, поправьте... если в лом - просто промолчите..
> . а при чем тут куча в углу?


Поддерживаю. Уверен, что большинство посетителей форума в свои 16 лет были далеки даже до этого уровня. Я уж не говорю просто про желание учится.


 
Игорь Шевченко ©   (2008-02-11 17:56) [50]

http://ln.com.ua/~openxs/articles/smart-questions-ru.html


 
TUser ©   (2008-02-11 19:01) [51]

таскай с собой исходники и парсь. Или используй класчсы и RTTI.


 
@!!ex ©   (2008-02-11 19:52) [52]

> [14] Dmitry S ©   (11.02.08 10:32)

Это передача указателя на память содержащюю данные рекорда, а я просил рекорд. Зачем нам данные?


 
Ins ©   (2008-02-11 21:12) [53]


> Это передача указателя на память содержащюю данные рекорда,
> а я просил рекорд.


А какая разница? Мы когда передаем строки - тоже передаем указатель, когда объекты - тоже. Передаем параметр по ссылке (var) - тоже. Кстати, помощью var можно можно объявить процедуру с нетипизированным параметром и передавать туда что угодно, см. например FreeAndNil. Так что не суть...


 
Sapersky   (2008-02-11 21:47) [54]

Для того, чтобы решить вашу задачу, доджны соблюдаться два условия:
1. Для рекордов должна генерироваться RTTI, содержащая информацию о ее полях и их типах.
2. Должна существовать возможность, имея ссылку на рекорд в памяти, получить ссылку на соответствующую ей RTTI.
Для рекордов в Delphi ни одно из этих условий не выполняется


Для рекордов, содержащих типы с управляемым временем жизни, эти условия отчасти выполняются. Компилятору приходится хранить некую "внутренюю RTTI", дабы корректно их инициализировать/копировать/финализировать. Получить эту RTTI можно, но она весьма лаконична - хранится описание ТОЛЬКО managed-полей. Так что, хотя в общем случае задача действительно не решаема, но в частном можно, например, сделать все поля строками или вариантами (на что, вероятно, намекали в [10]). Неэффективно? Дык, моё дело предложить... :)

Игорь Шевченко ©   (11.02.08 17:56) [50]
http://ln.com.ua/~openxs/articles/smart-questions-ru.html


"С другой стороны, иногда можно встретиться с грубостью и вызовом, не имеющими никаких видимых оснований. Обратная сторона этой медали в том, что такая реакция является вполне приемлемой формой постановки на место действительных грубиянов, - мы отсекаем их недостойное поведение остро отточенным словесным скальпелем".

У меня сложилось впечатление, что в новейшей истории Дельфимастера примеров, когда грубить начинает именно задающий вопрос... вряд ли, конечно, совсем нет, но раз в 10 меньше, чем противоположных.
Видимо, грубостью теперь считается уже сам факт задания вопроса: как посмел не воспользоваться хелпом/гуглем? как посмел не знать тривиальных вещей? как посмел не родиться старым и мудрым? короче, ты виноват уж тем, что хочется мне кушать.
Если вы считаете такой подход нормальным - не надо прикрываться ссылками на мануалы для "новичков с  гиперчувствительной душой". Следует честно отвечать всех возмущённым: этот форум существует для развлечения кучки ганнибалов-лектеров, которые каждого встречного готовы располосовать "остро отточенным словесным скальпелем".
Ну или цитировать следующий после скальпелей абзац.


 
VirEx ©   (2008-02-11 22:05) [55]

Удалено модератором
Примечание: Offtopic


 
ketmar ©   (2008-02-11 22:14) [56]

>[54] Sapersky (2008-02-11 21:47:00)
>как посмел не воспользоваться хелпом/гуглем?

ествственно. за это надо бить, и больно. если неко ленится потратить своё время на ковыряние в хэлпе, но не ленится задать совершенно идиотский вопрос — я лично начинаю сожалеть, что правилами запрещён мат.

тем более, в очень многих «грубых» постах заключается ответ на вопрос (или направление для поиска). по крайней мере я обычно отвечаю именно так. тут уж пардон — если вопрошающему лениво читать справку/гугль, то мне лениво разжёвывать, я тоже желаю получить удовольствие путём «ответа намёком». или развлекаться за чужой счёт позволено только «несчастным детям-недоучкам»?

---
Understanding is not required. Only obedience.


 
Ins ©   (2008-02-11 22:14) [57]


> Для рекордов, содержащих типы с управляемым временем жизни,
> эти условия отчасти выполняются. Компилятору приходится
> хранить некую "внутренюю RTTI", дабы корректно их инициализировать/копировать/финализировать.
> Получить эту RTTI можно, но она весьма лаконична - хранится
> описание ТОЛЬКО managed-полей. Так что, хотя в общем случае
> задача действительно не решаема, но в частном можно, например,
> сделать все поля строками или вариантами (на что, вероятно,
> намекали в [10]). Неэффективно? Дык, моё дело предложить...
> :)


Да, я в курсе. В юните System есть тип TFieldTable, который хранит информацию о финализируемых полях структуры. Используется в Dispose, а также подобная информация хранится в InitTable классов. Таким образом, когда экземпляр класса уничтожается, он финализируется подобно record-у. Правда имя поля уже не вытащить никак... И второе условие не выполняется, но можно обойти - указатель на структуру TFieldTable также передавать в функцию. Это если тип record-а известен на этапе компиляции. Иначе - увы. :(


 
ketmar ©   (2008-02-11 22:31) [58]

>[57] Ins © (2008-02-11 22:14:00)
>Это если тип record-а известен на этапе компиляции. Иначе — увы. :(

отчего же? если обязать непосредственно перед вызовом функции делать New() и Dispose(), а внутри самой функции глянуть адрес возврата и проанализировать предыдущий асм-код, то можно украсть у Dispose() кое-что.

зыж хихик.

---
Understanding is not required. Only obedience.


 
Семеныч   (2008-02-12 00:57) [59]

> ketmar ©   (11.02.08 22:31) [58]

Вот видишь? Ведь можешь, когда захочешь.
:o)


 
Германн ©   (2008-02-12 00:59) [60]


> Sapersky   (11.02.08 21:47) [54]


> У меня сложилось впечатление, что в новейшей истории Дельфимастера
> примеров, когда грубить начинает именно задающий вопрос.
> .. вряд ли, конечно, совсем нет, но раз в 10 меньше, чем
> противоположных.
> Видимо, грубостью теперь считается уже сам факт задания
> вопроса

А я собс-но и не заметил какой-то грубости допущенной к автору вопроса. Были некие претензии к одному из ответивших (может слишком резкие, может нет). А к собственно к автору их не было, за исключением, может быть моего P.P.S. в [7].  А что мне еще оставалось? Если на вполне спокойные и адекватные ответы автору [1], [3] и [4] последовали замечания автора [2] и [5]. Так кто же всё-таки хам?


 
Германн ©   (2008-02-12 01:04) [61]


> Семеныч   (12.02.08 00:57) [59]

Дык ведь Дарк всегда (или почти всегда) знает чего он хочет. И всегда (или почти всегда) знает что он может. Остальные варианты входят в множество описанное в тосте про козу и дом. (с) "Кавказская пленница"


 
Семеныч   (2008-02-12 01:29) [62]

> Германн ©   (12.02.08 00:59) [60]
> Так кто же всё-таки хам?

Есть предложение, подкупающее своей новизной и оригинальностью - отказаться от решения этого важнейшего вопроса. Навсегда. И всем.

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

Может, тогда и сам вопрос потихоньку исчезнет? Ведь многие же хотят себя уважать и считать умными?

Если не все...
:о)

> Германн ©   (12.02.08 01:04) [61]
> Дык ведь Дарк всегда (или почти всегда) знает чего он хочет.

Всегда этого не знает никто. Даже сыны юристов.

А Дарк еще и сам от себя пытается скрывать... на полпути он еще... от NOBISCUM уже ушел, а к VOBISCUM еще не пришел... хотя идет потихоньку.

И придет. А куда ему с подводной лодки деваться-то?
:о)


 
ketmar ©   (2008-02-12 01:45) [63]

>[62] Семеныч (2008-02-12 01:29:00)
>от NOBISCUM уже ушел

с чего ты так решил? с того, что я подпись сменил? с эгрегором я не расплевался и вполне комплементарен.

>на полпути он еще
это вообще классно. у бесконечного пути есть чёткая половина? O_o

---
Understanding is not required. Only obedience.


 
имя   (2008-02-12 02:01) [64]

Удалено модератором


 
Семеныч   (2008-02-12 02:05) [65]

> ketmar ©   (12.02.08 01:45) [63]

Во... я ж говорю - сам от себя скрываешь. А ты взял - да и подтвердил.
:о)


 
ketmar ©   (2008-02-12 02:32) [66]

>[65] Семеныч (2008-02-12 02:05:00)
кто на ком стоял? O_o

---
Understanding is not required. Only obedience.


 
Германн ©   (2008-02-12 07:07) [67]


> Семеныч   (12.02.08 01:29) [62]
>
> > Германн ©   (12.02.08 00:59) [60]
> > Так кто же всё-таки хам?
>
> Есть предложение, подкупающее своей новизной и оригинальностью
> - отказаться от решения этого важнейшего вопроса. Навсегда.
>  И всем.
>
>

Не возражаю. Если Sapersky тоже согласен. Или он Семеныч?


 
Sapersky   (2008-02-12 14:37) [68]

В смысле, априори считаем, что хамов среди присутствующих вообще нет, пока кто-то явно не продемонстрировал обратное? Cогласен.
Выдвигаю схожее предложение - априори считать, что среди присутствующих нет идиотов. Это я по поводу [4].
"Желание странного" - это не идиотизм. Тем более что, как я писал в [54], в частном случае это желание осуществимо (с поправкой - имена полей получить нельзя, только типы).
Ещё рискну напомнить, что подобное желание высказывала ваша любимая Рипли :)

отчего же? если обязать непосредственно перед вызовом функции делать New() и Dispose(), а внутри самой функции глянуть адрес возврата и проанализировать предыдущий асм-код, то можно украсть у Dispose() кое-что.

Ничуть не сомневаюсь в способности Ins"а разобраться во всём самостоятельно, но мне в своё время здесь открытым текстом сказали (к сожалению не помню, кто), что это функция TypeInfo() :)
Ещё, чтобы не изобретать каждому индивидуальный велосипед, могу выложить свои наработки по внутренней RTTI.


 
ketmar ©   (2008-02-12 14:41) [69]

>[68] Sapersky (2008-02-12 14:37:00)
таки покажи. если у записи можно получить любое поле в рантайме — первый скажу: «крут он, и я перед ним сынок». всё возможно, всё вероятно. я думаю, что нельзя, но могу и ошибатся.

---
Understanding is not required. Only obedience.


 
Ins ©   (2008-02-12 15:19) [70]


> Ничуть не сомневаюсь в способности Ins"а разобраться во
> всём самостоятельно, но мне в своё время здесь открытым
> текстом сказали (к сожалению не помню, кто), что это функция
> TypeInfo() :)


TypeInfo тоже можно использовать только с определенным на этапе компиляции параметром.


> Ещё, чтобы не изобретать каждому индивидуальный велосипед,
>  могу выложить свои наработки по внутренней RTTI.


А что в них?


 
Sapersky   (2008-02-12 16:22) [71]

таки покажи. если у записи можно получить любое поле в рантайме

А где я писал про любое? Вроде везде оговаривался, что только для частного случая с managed(c управляемым временем жизни)-полями.

TypeInfo тоже можно использовать только с определенным на этапе компиляции параметром.

Разумеется, нельзя TypeInfo(переменная), но можно TypeInfo(тип).
Для написания независимых от типа функций это достаточно - можно просто передавать в них TypeInfo отдельным параметром, так же как это сделано в стандартных вроде DynArraySetLength (обычно используемая с дин. массивами SetLength - magic-обёртка для DynArraySetLength, TypeInfo при этом подставляет компилятор).

А что в них?

Решение классической проблемы новичков (запись рекорда c полем String в поток).
Впрочем, это полезно не только новичкам - иногда нужно быстро сбросить какой-то массив в файл, не особо задумываясь о его содержимом - длинные там строки, короткие... на серьёзную систему сериализации это решение, конечно, не тянет из-за большого кол-ва ограничений.
http://sapersky.narod.ru/files/TypInfoEx.rar
Пардон за жуткую мешанину русского и английского в комментариях.


 
ketmar ©   (2008-02-12 16:29) [72]

>[71] Sapersky (2008-02-12 16:22:00)
>А где я писал про любое?

значит, я неверно понял. однако в [0] требовали все поля. %-)

---
Understanding is not required. Only obedience.



Страницы: 1 2 вся ветка

Текущий архив: 2008.03.23;
Скачать: CL | DM;

Наверх




Память: 0.67 MB
Время: 0.015 c
3-1193499613
olevacho_
2007-10-27 19:40
2008.03.23
Многофайловая БД


2-1203535697
Leha1987
2008-02-20 22:28
2008.03.23
Оптимизация


2-1204052315
Эрни
2008-02-26 21:58
2008.03.23
Как найти набор последовательных символов в файле


2-1203931873
md10
2008-02-25 12:31
2008.03.23
как переменной приравнять строку содержащую апостраф


8-1177944957
Nikss
2007-04-30 18:55
2008.03.23
OpenGL