Главная страница
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.024 c
6-1100694898
Титков Эдуард
2004-11-17 15:34
2005.02.06
Звонилка


1-1106567184
Weare
2005-01-24 14:46
2005.02.06
Почта и Делфи


3-1104840678
Jey
2005-01-04 15:11
2005.02.06
Фильтрация


1-1106677375
0xfffffff
2005-01-25 21:22
2005.02.06
Добавление своей записи в Add remove programs


14-1105941823
Ozone
2005-01-17 09:03
2005.02.06
Half Live 2 (виснут персонажи)