Главная страница
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.046 c
3-1096964741
Григорьев Антон
2004-10-05 12:25
2004.10.31
ADOQuery не хочет работать со строковым параметром


6-1093108291
Asd
2004-08-21 21:11
2004.10.31
Асинхронная ошибка как с ней бороться


1-1098078732
Павел
2004-10-18 09:52
2004.10.31
Автопрорисовка Формы.


1-1098181125
__Strelok__
2004-10-19 14:18
2004.10.31
DateTimePicker - Дата и время


14-1097254280
begin...end
2004-10-08 20:51
2004.10.31
Вычислительная математика: литература