Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос о TStringList


Sphinxx ©   (2005-01-24 13:19:00) 

Вот функция перевода 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];


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

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


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


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

> Sphinxx   (24.01.05 13:19)

Delimiter := '^';
DelimitedText := S;

И все.


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

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


Ega23   (2005-01-24 13:41:00) [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:37:00) [5]

Хмм,

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

PS. D7


Skier   (2005-01-24 13:28:00) [6]


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

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

for i:= 1to length(s)do


Наверх

Титульная страница Поиск, карта сайта Написать письмо