Formatowanie prostego tekstu

0

Hej mam problem, dopiero zaczynam programowanie w Delphi, i potrzebuje wyciągnąć tekst z takiego zdania:

slowo1|slowo2|slowo3

takie zdanie jest w jednej zmiennej string ale ja potrzebuje wyciagnac kazde słowo slowo1,slowo2,slowo3 i wlozyc kazde slowo do trzech roznych zmiennych...w jaki sposob to zrobic automatycznie korzystajac z tych znakow rozdzielających "|" , czy jest jakas gotowa funkcja ?? dzieki za pomoc

0

jest wiele szkół ;] ja robie tak:

var list:TStringList;
    i:Integer;
begin
  list:=TStringlist.Create;
  list.Text:='slowo1|slowo2|slowo3';
  list.Text:=StringReplace(list.Text,'|', #13#10 , [rfReplaceAll] );
  //lub te dwie linijki mozna zamienic na jedna: list.Text:=StringReplace('slowo1|slowo2|slowo3','|', #13#10 , [rfReplaceAll] );

  for i:=0 to list.Count-1 do
      showmessage(list[i]);

  list.Free;
end;

po prostu zamieniasz znaki z "|" na znak nastepnej linii "#13#10" i w ten sposob masz kolejne slowa w kolejnych itemach.

mozna jeszcze tak:

var list:TStringList;
    i:Integer;
begin
  list:=TStringlist.Create;
  ExtractStrings(['|'], [' '], PChar('slowo1|slowo2|slowo3'), list);

  for i:=0 to list.Count-1 do
      showmessage(list[i]);

  list.Free;
end;
0

albo tak

procedure TForm1.Button1Click(Sender: TObject);
var
str : TStringList;
i : integer;
begin
str := TStringList.Create;
str.Delimiter := '|';
str.DelimitedText := 'aaa|bbb|ccc';

for i := 0 to str.Count-1 do begin
Memo1.Lines.Add(str.Strings[i]);
end;
end;

0

tu trzeba uważać bo SL traktuje każdy znak o kodzie mniejszym od 33 (CZYLI SPACE TEŻ!) jako delimiter

0

Albo użyć tej procki.. Parametr 1 to tekst, 2 to znak separatora, 3 lista do ktorej maja byc wrzucone poszczegolne czesci..

procedure prTokenize(AText: String; ASeparator: Char; var AList: TStringList);
begin
AList.Clear;
while (Pos(ASeparator, AText) > 0) do begin
AList.Add(Copy(AText, 0, Pos(ASeparator, AText) -1));
AText := Copy(AText, Pos(ASeparator, AText) + 1, Length(AText) -Pos(ASeparator, AText));
end;
if (Length(Trim(AText)) > 0) then
AList.Add(Trim(AText));
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1