ďťż

Ładny brzuch

Jak ze stringawartość1|wartość2|wartość3     itdwyciągnąć te wartości do poszczególnych komponentów edit? Długość każdej wartości nie jest ustalona. Funkcja Pos odpada.



skoro odpada Pos to użyj PosEx :D

skok w świat PHP ;-)

type  TStrArray = array of string; function Explode(var a: TStrArray; Border, S: string): Integer; var  S2: string; begin  Result  := 0;  S2 := S + Border;  repeat    SetLength(A, Length(A) + 1);    a[Result] := Copy(S2, 0,Pos(Border, S2) - 1);    Delete(S2, 1,Length(a[Result] + Border));    Inc(Result);  until S2 = ''; end; // How to use it: // Und hier ein Beispiel zur Verwendung: procedure TForm1.Button1Click(Sender: TObject); var  S: string;  A: TStrArray;  AnzTokens, i: Integer; begin  S := 'Ein=Text=durch=Geleichzeichen=getrennt';  AnzTokens := Explode(A, '=', S);  for i := 0 to AnzTokens -1 do    Memo1.Lines.Add(A[i]); end;

Ale nie PosEx :)
Możesz też skorzystać z gotowej funkcji ExtractStrings.
Trzeci sposób to pętla i "jechanie" po każdym znaku. Jeżeli znajdzie znak rozdzielający to kopiuje tekst od ostatniego znalezionego znaku lub początku i wrzuca go do edit ;]

//dopisane
osz Bełdzio szybszy :(
Użytkownik -=PcSA=- edytował ten post 20 maj 2006, 15:27
http://forum.ks-eksp...showtopic=37961



można również tak

type   TTableString = Array Of String; function explode(str: String; rozdzielacz: Char): TTableString; var  i, j: Integer; begin  j:=1; i:=1;  while i <= Length(str) do  begin    if (str[i] = rozdzielacz) or (i = Length(str)) then    begin      if (i = Length(str)) and (str[i] <> rozdzielacz) then        inc(i);      SetLength(Result, High(Result)+2);      Result[High(Result)] := Trim(Copy(str, j, i-j));      j := i+1;    end;    inc(i);  end; end;

i teraz na przykład tak

var  ss: TTableString; begin   ss:= explode('wartość1|wartość2|wartość3','|');   Edit1.Text:= ss[0];   Edit2.Text:= ss[1];   itd...
Użytkownik Blooom edytował ten post 20 maj 2006, 16:08
A można i tak:
procedure Rozdziel(Tekst: String); var  i: Integer;  st: TStrings; begin  st := TStringList.Create;  try    st.Delimiter := '|';    st.DelimitedText := Tekst;    //teraz masz tekst rozdzielony na poszczególne linijki    Edit1.Text := st[0];    Edit2.Text := st[1];    //itd. oczywiście, musisz kontrolować, czy elementy    //o podanych indeksach istnieją;P  finally    st.Free;  end; end;

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •