Главная страница
    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.036 c
1-1097858891
lipskiy
2004-10-15 20:48
2004.10.31
Открыть проводник с ограничением уровня?


1-1098175993
Manfred8
2004-10-19 12:53
2004.10.31
Написание программатора для мини АТС


1-1098148223
Simon
2004-10-19 05:10
2004.10.31
Прозрачная форма


4-1095987259
thoth
2004-09-24 04:54
2004.10.31
Проблема с winexec и несколькими задачами


1-1097742256
1008
2004-10-14 12:24
2004.10.31
Должно быть несколько форм, но существовать должна одна





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