![]() |
Text an bestimmter Stelle splitten
Hallo,
ich versuche, einen Text aus einem Memo an einer bestimmten Stelle zu splitten und dann den ersten Teil in die erste Spalte eines ListViews und den zweiten Teil in dessen zweite Spalte zu schreiben. Der Text, mit dem es uA funktionieren soll ist folgender: Zitat:
Das funktioniert auch soweit ganz gut, allerdings trennt er bei den Werten ab "CDA102307/11 Generic Trade Taiwan" erst beim zweiten Leerzeichen. Hier ist mein Quellcode:
Delphi-Quellcode:
Kann mir jemand sagen, warum das so ist?
var
Form1: TForm1; i, j, Posi: Integer; S: String; found: Boolean; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ListView1.Clear; Posi := 1; for i := 0 to Memo1.Lines.Count-1 do begin found := false; S := Memo1.Lines.Strings[i]; for j := 1 to length(S) do If not found then begin begin Posi := PosEx(Seperator.Text, S, Posi); If S[Posi] = Seperator.Text then begin found := true; end; end; ListView1.Items.Add; ListView1.Items[i].Caption := copy (S,1,Posi); ListView1.Items[i].SubItems.Add(copy (S,Posi+1,Length(S)-Posi)); end; end; end; |
Re: Text an bestimmter Stelle splitten
Hi.
Wenn du mit den einzelnen Zeilen eines Memos arbeitest, dann ist PosEx() wohl fehl am Platz.
Delphi-Quellcode:
Grüße vom marabu
var
Form1: TForm1; implementation {$R *.dfm} function After(const S, Pattern: String): String; var i: Integer; begin i := Pos(Pattern, S); if i = 0 then Result := '' else Result := Copy(S, i + Length(Pattern), Length(S)); end; function Before(const S, Pattern: String): String; var i: Integer; begin i := Pos(Pattern, S); if i = 0 then Result := S else Result := Copy(S, 1, Pred(i)); end; procedure MakeItems(s: TStrings; li: TListItems); var i: Integer; begin li.BeginUpdate; li.Clear; for i := 0 to Pred(s.Count) do with li.Add do begin Caption := Before(s[i], ' '); SubItems.Add(After(s[i], ' ')); end; li.EndUpdate; end; procedure TForm1.Button1Click(Sender: TObject); begin Screen.Cursor := crHourGlass; try MakeItems(Memo.Lines, ListView1.Items); finally Screen.Cursor := crDefault; end; end; |
Re: Text an bestimmter Stelle splitten
Hallo,
warum machst Du es Dir so schwer? So geht's (nur mit 2 Memos anstelle der zwei Spalten im ListView):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i, iPos: Integer; begin for i := 0 to Memo1.Lines.Count - 1 do begin iPos := Pos(' ', Memo1.Lines.Strings[i]); Memo2.Lines.Add(Copy(Memo1.Lines.Strings[i], 0, iPos)); Memo3.Lines.Add(Copy(Memo1.Lines.Strings[i], iPos, Length(Memo1.Lines.Strings[i]))); end; end; |
Re: Text an bestimmter Stelle splitten
Vielen Dank! Jetzt läufts.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz