Главная страница
    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.48 MB
Время: 0.039 c
15-1161778894
Juice
2006-10-25 16:21
2006.11.12
Install в dcc32


1-1159543009
McFalu
2006-09-29 19:16
2006.11.12
Работа с CreateDIBSection


2-1161784739
remlin
2006-10-25 17:58
2006.11.12
Изменение размеров формы при потере фокуса


1-1159442688
clickmaker
2006-09-28 15:24
2006.11.12
DCOM &amp; Windows 2003 server


2-1162191258
Alex_C
2006-10-30 09:54
2006.11.12
Координаты мыши в мемо





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский