Главная страница
    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.03 c
1-1097709015
mazik
2004-10-14 03:10
2004.10.31
Как получать данные из Excel?


1-1097776898
Viper
2004-10-14 22:01
2004.10.31
ФАЙЛЫ


1-1097670469
sergg
2004-10-13 16:27
2004.10.31
Ошибка при закрытиии динамического массива


3-1096880740
Начинающий освоение БД
2004-10-04 13:05
2004.10.31
Массив в поле таблицы


10-1055742436
kors
2003-06-16 09:47
2004.10.31
COM





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