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

Вниз

Сравнение строк, передаваемых в качестве параметров в функцию   Найти похожие ветки 

 
Nomad   (2003-04-22 12:22) [0]

Уважаемые господа, возникает проблема: при передаче строки в функцию (string) и при сравнении ее с другими string, компилятор не ставит точки останова на блок после сравнения.

type StrArr= array of string;
procedure Proc1(ar:StrArr)
....
if str=arr[i] then
begin
сюда не заходит
end;
.....


В одном случае помог Trim, в другом не получилось. В чем дело? Пробовал функцию CompareStr, тоже не помогло. Откуда компилятор знает, что результат сравнения заведомо ложен? Что можно сделать?


 
VaS ©   (2003-04-22 12:28) [1]

Код покажи целиком


 
Карелин Артем ©   (2003-04-22 12:55) [2]

str - это имя переменной, или стандартная функция дельфи?


 
Anatoly Podgoretsky ©   (2003-04-22 13:09) [3]

Переменная, иначе бы компилятор сильно отругал


 
Radionov Alexey ©   (2003-04-22 13:12) [4]

а оно (proc1) где-то реально вызывается?


 
Anatoly Podgoretsky ©   (2003-04-22 13:34) [5]

А на if str=arr[i] и в других местах есть точки?


 
Bel ©   (2003-04-22 13:38) [6]

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


 
Nomad   (2003-04-22 14:24) [7]

Похоже я разобрался - дело было в том, что команда, идущая после if не имела смысла (в блоке был только continue) и оптимизатор не компилировал ее. Исправил и заработало.
И все-таки непонятно почему до этого у меня не получалось сравнивать (оптимизатор заранее проверял условие и не компилировал код после него) две переменных типа string причем одинаковой длины, пока я не обрезал пробелы ф-цией Trim.
Хочу однако сделать одно замечание: строку, которую я передавал в ф-цию Proc1 я получал: string(TTreeNode.Data^). Может это как-то влияет на сравниваемость?


 
Skier ©   (2003-04-22 14:30) [8]


> я получал: string(TTreeNode.Data^).

И ты ещё СПРАШИВАЕШЬ ?!
А скажи-ка как ты присваивал данные для узла ?

TTreeNode.Data := ?


 
Palladin ©   (2003-04-22 15:22) [9]

наверно
string(TTreeNode.Data^):=s;


 
Nomad   (2003-04-22 15:40) [10]

Добавлял не я, а в другом модуле другой человек. Кажется с помощью TTreeView.AddChildObject(..idNom), где idNom - PString. Перед этим он делал IdNom^:=ПеременнаяТипаString.
Это было из-за несоответсвия типов String и PString^?


 
Skier ©   (2003-04-22 15:41) [11]

PString(TTreeNode.Data)^ - вот это будет String


 
Palladin ©   (2003-04-22 15:46) [12]

только IdNom^ при этом один и тот же....


 
Nomad   (2003-04-22 15:48) [13]

Да, кажется откомпилировался правильно даже без Trim. Спасибо, проверю потом на функциональность. Значит приводить к типу нужно до взятия содержимого по адресу? В этом моя ошибка!


 
Skier ©   (2003-04-22 15:49) [14]

>Nomad

> Значит приводить к типу нужно до взятия содержимого по адресу?
>

В яблочко ! :)


 
Palladin ©   (2003-04-22 15:50) [15]


> Palladin © (22.04.03 15:46)

не читать, написал от невнимательности
хотя может это и правда...
код добавления надо смотреть


 
Nomad   (2003-04-22 16:10) [16]


> только IdNom^ при этом один и тот же....


С добавлением все в порядке, там idNom^ присваиваются строки из полей Query, а сам idNom присваивается TTreeView.Items.Data.
Но все равно спасибо всем за внимание!;-)))))


 
Skier ©   (2003-04-22 16:12) [17]


> а сам idNom присваивается TTreeView.Items.Data.

Вопрос на засыпку : А память выделяется ? :)


 
Nomad   (2003-04-22 16:20) [18]

Да
New(IdNom)


 
Skier ©   (2003-04-22 16:21) [19]

>Nomad
Порядок ! :)



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

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

Наверх




Память: 0.5 MB
Время: 0.013 c
1-12739
and_sp
2003-04-21 12:38
2003.05.05
Компонент GridView


3-12629
Hedron
2003-04-15 17:17
2003.05.05
Доступ к системным таблицам Access


6-12859
xZero
2003-03-09 23:04
2003.05.05
Передача .exe


1-12698
avch
2003-04-23 09:24
2003.05.05
Перекомпилить VCL


3-12664
Oops
2003-04-16 13:00
2003.05.05
сортировка кирилицы