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

Вниз

Вопрос о TStringList   Найти похожие ветки 

 
Sphinxx   (2005-01-24 13:19) [0]

Вот функция перевода ansi-строки в stringlist, где есть список данных, разделенных символом "^", например "Element1^Element2^Element3".
Почему при формировании листа первый элемент равен "", а не "Element1"?
Не могу понять, что не так...

t:="";
for i:=0 to length(s)-1 do
 if s[i]="^" then begin
                  result.Add(t);
                  t:="";
                  end
 else
 t:=t+s[i];


 
Skier ©   (2005-01-24 13:28) [1]


> Почему при формировании листа первый элемент равен "", а
> не "Element1"?

потому что t равен ""

for i:=1 to length(s) do


 
Плохиш ©   (2005-01-24 13:37) [2]

Хмм,

result.Delimiter := "^";
result.DelimitedText := s;

PS. D7


 
Sphinxx   (2005-01-24 13:41) [3]

А, млин... чето не подумал =)
Спасибо!


 
Ega23 ©   (2005-01-24 13:41) [4]


uses StrUtils; // Тот, что в RxLib. Если без него, то убрать delims:TCharSet

Function DelimitedStrToList(sIn:string; Strs:Tstrings;delims:TCharSet):integer;
var i:integer;
   s0,s1:string;
   ch:char;
begin
 if sIn="" then Exit;
 strs.Clear;
 s0:=sIn;
 for i:=0 to 255 do   //repl ;; =>; ;
 begin
  ch:=chr(i);
   if ch in Delims then s0:=ReplaceStr(S0,ch+ch, ch+" "+ch);
 end;
 i:=1;
 while true do
 begin
  s1:=ExtractWord(i,s0,delims);
   if s1="" then break;
  strs.add(s1);
  inc(i);
 end;
result:=strs.Count;
end;

Function ListToDelimitedStr( Strs:Tstrings;delim:Char=";"):string;
var i:integer;
   ss:string;
begin
result:="";
ss:="";
if strs.Count=0 then exit;
  for i:=0 to strs.Count-1 do ss:=ss+strs.Strings[i]+delim;
 if ss[length(ss)]=delim then delete(ss,length(ss),1);
result:=ss;
end;



З.Ы. Delphi 5.


 
Юрий Зотов ©   (2005-01-24 13:48) [5]

> Sphinxx   (24.01.05 13:19)

Delimiter := "^";
DelimitedText := S;

И все.


 
Думкин ©   (2005-01-24 13:54) [6]

s := "ffff^gggg hhhh^jjj";
    f := TStringList.Create;
    f.Delimiter := "^";
    f.DelimitedText := s;
    for i := 0 to Pred(f.Count) do writeln(f[i]);
    readln


Разбивает и по пробелу также.



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

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

Наверх




Память: 0.48 MB
Время: 0.053 c
1-1106291256
Fantom
2005-01-21 10:07
2005.02.06
Запуск одной копии программы и обнаружение ее при повторном запус


4-1103122941
Александер
2004-12-15 18:02
2005.02.06
Общение с окном чужого приложения


1-1106586391
Убитый Кодом
2005-01-24 20:06
2005.02.06
Один экземпляр приложения + передача параметров запуска форме


1-1106419761
Змей
2005-01-22 21:49
2005.02.06
Калькулятор


1-1106377014
ODINUS
2005-01-22 09:56
2005.02.06
Альтернатива RAVE