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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.06 c
2-1162103253
Max.66RUS
2006-10-29 09:27
2006.11.12
Вопрос про CheckBox...


2-1161781612
просто_человек
2006-10-25 17:06
2006.11.12
занесение значения ячейки до е изменения(как-то так=)))


15-1161329175
Maximaxi
2006-10-20 11:26
2006.11.12
Скачать Delphi 4


2-1161891637
---------
2006-10-26 23:40
2006.11.12
Оптимизация кода


3-1158077928
Деня
2006-09-12 20:18
2006.11.12
Работа с типом INTERVAL