Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

Record + PString   Найти похожие ветки 

 
tmpfolder   (2006-10-29 17:04) [0]

Совсем что-то я дурак. Есть:

 TmpRec = record
   tmp1: PString;
   tmp2: PString;
   ...
 end;


Потом где-то использую эту запись:
new(*.tmp1);
*.tmp1 := "hi!";

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

т.е

if *.tmp1 <> nil then

но это работает в любом случае, т. даже если я не делаю new для переменной PString.

Работает кажется вот так: if @*.tmp1^ <> nil then ...

В чем дело? Я совсем дебил, не пойму почему так...


 
tmpfolder   (2006-10-29 17:25) [1]

Последний вариант тоже не работает.. что не так?


 
MikePetrichenko ©   (2006-10-29 17:31) [2]


> TmpRec = record
>    tmp1: PString;
>    tmp2: PString;
>    ...
>  end;

Вот это сильно!
Такого я еще не видел (нет, видел конечно, но смысл?)
А почему не указатель на таблицу указателей на функции?


 
tmpfolder   (2006-10-29 17:38) [3]

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


 
Джо ©   (2006-10-29 17:39) [4]

Господи, дружище, объясни, пожалуйста, зачем это нужно-то?!


 
Anatoly Podgoretsky ©   (2006-10-29 17:41) [5]

> Ответ на сообщение [3]

> вариант присваивать пустое значение не годится

А вот для string такой вариант штатный


 
Percent   (2006-10-29 18:16) [6]

но это работает в любом случае, т. даже если я не делаю new для переменной PString

Ну уж если заставила нужда поступить таким образом, то хотя бы выделяй память для записи с инициализацией памяти нулями, типа:

MyRec := AllocMem(SizeOf(MyRec^));

Ну, или инициализируй запись нулями с помощью FillChar();

Иначе там мусор, который потом "<> nil"...


 
DiamondShark ©   (2006-10-29 18:40) [7]

Если я правильно понял, косвенность введена только для отличия состояний "пустая строка" и "никакая строка"?

Тогда введи ещё булевские поля флагов "не заполнено", или битовый набор.
Вё лучше, чем совершенно лишние манипуляции с динамическим выделением.


 
Percent   (2006-10-29 18:48) [8]

Если я правильно понял, косвенность введена только для отличия состояний "пустая строка" и "никакая строка"?

Насколько я его понял, ему надо значение NULL. То есть, насколько я понимаю, тов. ВременнаяПапка изобретает свой собственный неповторимый формат хранения данных, придуманный еще на заре эры программирования - типизированный файл. То есть, он чем-то некоего TIF"а напоминает (мелькал тут такой ник); тот тоже "пишет свою СУБД, когда есть необходимость".


 
sniknik ©   (2006-10-29 18:52) [9]

> для отличия состояний "пустая строка" и "никакая строка"
лучше тогда локальный рекордсет(ADODataset например) с полями типа стринг, там и пустые строки и записи типа null возможны, + еще сортировки всякие, сохранение/запись автоматизирована и т.д. неизвестно что нужно, боремся как всегда с проблемой реализации а не решаем задачу...


 
Джо ©   (2006-10-29 18:53) [10]

В крайнем случае, не лучше ли использовать Variants? У них есть состояние Null. А если "машина", "квартира" представляют из себя отдельные сущности не завести ли для них отдельные классы?


 
sniknik ©   (2006-10-29 18:55) [11]

> То есть, он чем-то некоего TIF"а напоминает (мелькал тут такой ник); тот тоже "пишет свою СУБД
угу, чемто похоже.


 
MikePetrichenko ©   (2006-10-29 19:13) [12]

Мдя... Каждый, конечно, сходит с ума по своему... Да и задачи разные бывают, но чтобы самого себя в петлю загонять...
Суицид какой-то.
Если уж так необходима проверка на NULL (nil) (хотя хоть убей не могу понять чем не устроили пустая строка), то пользуйся pchar.

P.S. Господа, ну хватит измываться над языком. Сколько можно.



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

Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.049 c
11-1137965443
Flea
2006-01-23 00:30
2006.11.12
Hottrack для TabControl


4-1151394771
Lagrima_JN
2006-06-27 11:52
2006.11.12
Эмуляция "клика" на компоненте формы.


1-1159539430
Art_infinity
2006-09-29 18:17
2006.11.12
организация доступа к портам...


3-1158049183
Oleg2006
2006-09-12 12:19
2006.11.12
Delphi &amp; AbsolutDatabase


15-1161960379
IMHO
2006-10-27 18:46
2006.11.12
Сервисы ICQ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский