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

Вниз

Что случается с длинной строкой?   Найти похожие ветки 

 
Aleksandr.   (2004-10-18 13:33) [0]

Строковая переменная имеет длину 1104 знака. К ней прибавляется строковый результат функции длиной 3088 знака - и переменная начинает выглядеть очень странно - на каком-то месте то, что в ней должно было быть, обрывается, и начинается всякий мусор в виде #0 и обрывков разных строковых значений. Что это такое и как это лечить?


 
Reindeer Moss Eater ©   (2004-10-18 13:45) [1]

и переменная начинает выглядеть очень странно

Человек "не видит" как выглядит переменная.
Ему про это говорит его код.
Наверное код, показывающий как выглядит строка - ошибочный.


 
AlexG ©   (2004-10-18 13:46) [2]

Скажи точнее о чем ты говоришь, т.к. здесь не ясно используешь ты pchar или string. А так же не ясно ЧТО ты присваиваешь. Может ты мусор и присваиваешь... Приведи пример кода.


 
Aleksandr.   (2004-10-18 14:05) [3]

Reindeer Moss Eater © :
Выглядит она так через Evaluate\Modify, не придирайтесь к словам.

AlexG © :
Вообще, я написал, что строковая. Ну, если Вам о чем-то скажет:

function TRiFilterList.GetFilterStr: string;
var
 i : integer;
 b : boolean;
begin
 Result:="";
 if Count=0 then
   Result:=""
 else begin
   for i:=0 to Count-1 do begin
     if i>0 then
       Result:=Result+" "+Items[i].CompareStr;
     if Items[i].FieldName<>"" then begin
       if Result<>"" then begin
         if FLightFilter then
           Result:=Result+" "+Items[i].FilterStrAsArray
         else
           Result:=Result+" "+Items[i].FilterStr
       end
       else begin
         if FLightFilter then
           Result:=Items[i].FilterStrAsArray
         else
           Result:=Items[i].FilterStr
       end
     end;
     if Assigned(Items[i].Items) then begin
       b:=Items[i].Items.FLightFilter;
       Items[i].Items.FLightFilter:=FLightFilter;
       if Result="" then
           Result:="("+Items[i].Items.GetFilterStr+")"
       else
         Result:=Result+" ("+Items[i].Items.GetFilterStr+")";
       Items[i].Items.FLightFilter:=b
     end
   end
 end
end;

function TRIFilterItem.GetFilterStr: string;
begin
 Result:=FieldName+" "+SignStr+" "+ValuesStr
end;

function TRIFilterItem.GetFilterStrAsArray: string;
var
 s,t,x : string;
 i     : integer;
 aSign : TRiFilterSigns;
begin
 Result:="";
 s:=ValuesStr;
 aSign:=Sign;
 if aSign=fsIs then
   Result:=FieldName+" = "+s
 else if aSign IN [fsIN,fsNOTIN,fsLike,fsNotLike,fsLikeLeft,fsLikeRight] then begin
   s:=ReplaceString("(","",s);
   s:=ReplaceString(")","",s);
   if aSign IN [fsIn {,fsLike} ] then
     x:="="
   else if aSign IN [fsNotIn] then
     x:="<>"
   else
     x:=" "+RiFilterSigns[Ord(aSign)]+" ";
   while s<>"" do begin
     if Pos(",",s)<>0 then begin
       if NOT InQuotes(s,Pos(",",s),i) then begin
         t:=Trim(System.Copy(s,1,Pos(",",s)-1));
         System.Delete(s,1,Pos(",",s))
       end
       else begin
         t:=Trim(Copy(s,1,i));
         System.Delete(s,1,i)
       end
     end
     else begin
       t:=Trim(s);
       s:=""
     end;
     if Result="" then
       Result:="("+FieldName+x+t
     else begin
       if x="=" then
         Result:=Result+" OR "+FieldName+x+t
       else
         Result:=Result+" AND "+FieldName+x+t
     end
   end;
   Result:=Result+")"
 end
 else
   Result:=FilterStr
end;

Смысл в том, что список итемов, значениями которых может быть условие или опять же список итемов, должен возвращаться либо в виде FieldName IN (1,2,3) либо в виде (FieldName=1) OR (FieldName=2) OR (FieldName=3), так как всякие долбаные ClientDataSet не понимают в своем фильтре слов IN, NOT IN. Впрочем, суть не в этом.
Как видите, все идет через строку, а вышеупомянутый мусор появляется в итоге выполнения

  if FLightFilter then
    Result:=Result+" "+Items[i].FilterStrAsArray


 
Erik1 ©   (2004-10-18 14:21) [4]

Evaluate\Modify показывает слишом много, больше длины строки. Для теста используй ShowMessage(myStr).



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

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

Наверх




Память: 0.48 MB
Время: 0.047 c
10-1054293402
DreamDesire
2003-05-30 15:16
2004.10.31
Разнородные DCom клиент и сервер (в т.ч. в Midas)


3-1096959444
Пуртик
2004-10-05 10:57
2004.10.31
Зависание проги...


1-1097930629
Новичек
2004-10-16 16:43
2004.10.31
Функция GetProcessID


6-1093416257
BVV
2004-08-25 10:44
2004.10.31
idMappedPortTCP


1-1097833041
diabolik_krsk
2004-10-15 13:37
2004.10.31
Размер последней колонки DBGrid