Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.038 c
1-1098176351
starik30
2004-10-19 12:59
2004.10.31
Обмен между потоками


14-1097579767
Kolan
2004-10-12 15:16
2004.10.31
Помогите с Turbo Basic


1-1097755008
denis24
2004-10-14 15:56
2004.10.31
цвет курсора в гриде


14-1097588892
Алхимик
2004-10-12 17:48
2004.10.31
Что бы это могло быть?


8-1089988038
gdima
2004-07-16 18:27
2004.10.31
Video





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