![]() |
String von ; Trennen (über TStringList)
Hallo,
ich hab nochmal eine Frage zu TSTringLists. Ich möchte gerne, dass ein Leerzeichen nicht als Delimiter erkannt wird. Ich hab hier mal ein Bsp.
Delphi-Quellcode:
normaler weise sollte das Programm als ersten teil des strings "Fa. Misutermann" ausgeben. das macht er aber nicht. er gibt nur "Fa." aus. wie kann ich es mit einer tstringlist machen, dass das programm auch wirklich diesen String ausgibt "Fa. Mustermann". Oder hat jemand vieleicht eine andere idee wie ich das machen kann???
procedure TForm1.trennen(s : String);
var l : TStringList; begin // String von ; trennen l:=TStringList.Create(); l.Delimiter:=';'; l.DelimitedText:=s; // Zerlegten String ausgeben ShowMessage(l[0]); end; procedure TForm1.Button1Click(Sender: TObject); var s : String; begin // Parameter setzen s:='Fa. Mustermann;Musterstr. 1a;50937;Köln'; trennen(s); end; |
Re: String von ; Trennen (über TStringList)
Hi,
ist zwar nicht mit ner StringList, aber vielleicht hilfts Dir ja trotzdem :zwinker: ![]() Gruß Stephan :dance: |
Re: String von ; Trennen (über TStringList)
|
Re: String von ; Trennen (über TStringList)
Hai Christian,
das Problem ist das die TStringList das Blank (" ") immer als Trennzeichen ansieht. Du hättest nur eine Chance wenn der Text mit einem QuotingChar eingeschlossen ist. |
Re: String von ; Trennen (über TStringList)
Zitat:
Greetz alcaeus |
Re: String von ; Trennen (über TStringList)
Delphi-Quellcode:
...
function NumTok(const Str: string; const Sep: Char): Integer;
var I: Integer; LastWasSep: Boolean; begin Result := 0; if Str <> '' then begin LastWasSep := True; for I := 1 to Length(Str) do begin if (Str[I] <> Sep) and (LastWasSep) then Inc(Result); LastWasSep := Str[I] = Sep; end; end; end; function GetTok(const Str: string; const Idx: Integer; const Sep: Char): string; var I, TokCount, ResIdx: Integer; LastWasSep: Boolean; begin Result := ''; if (Str <> '') and (Idx > 0) then begin Result := Str; TokCount := 0; ResIdx := 0; LastWasSep := True; for I := 1 to Length(Str) do begin if (Str[I] <> Sep) and (LastWasSep) then Inc(TokCount); if (Str[I] <> Sep) and (TokCount = Idx) then begin Inc(ResIdx); Result[ResIdx] := Str[I]; end; LastWasSep := Str[I] = Sep; end; SetLength(Result, ResIdx); end; end;
Delphi-Quellcode:
for I := 1 to NumTok(DeinString, ';') do
ShowMessage(Format('%d: %s', [I, GetTok(DeinString, I, ';')])); MfG |
Re: String von ; Trennen (über TStringList)
Zitat:
Grüße vom marabu |
Re: String von ; Trennen (über TStringList)
Hallo,
ich habe noch mal ne frage zu diesem thema. ich hab hier mal versucht einen string zu zerlegen. BSP.:
Delphi-Quellcode:
Leider funktioniert das nicht. hat jemand von euche eine ahnung von euch??? Warum nicht??? Sollte doch eigentlich funktionieren oder nicht?
procedure TForm1.trennen(s : String);
var i : Integer; // Schleifenvariable z : Integer; // Array Zugriffsvariable a : Array of String; // zerlegte String begin // Array setzen SetLength(a, 3); // String von ; trennen z:=0; for i:=0 to Length(s) - 1 do begin if s[i]=';' then begin Inc(z); end else begin a[z]:=a[z] + s[i]; end; end; // Zerlegten String ausgeben ShowMessage(a[0]); end; procedure TForm1.Button1Click(Sender: TObject); var s : String; begin // Parameter setzen s:='Mustermann;Karl;Musterweg 1a'; trennen(s); end; [Edit]Achso, zu dem was nicht funktioniert. Er gibt einen leeren String aus.[/Edit] |
Re: String von ; Trennen (über TStringList)
Delphi-Quellcode:
Ohne weiteren Kommentar zu deinem Code - der Index muss von 1 bis Length(s) laufen.
for i:=0 to Length(s) - 1 do
|
Re: String von ; Trennen (über TStringList)
Hi,
bei mir funktioniert das einwandfrei. [edit]Hatte HugeStrings aber deaktiviert ({$H-})[/edit] Gruß Stephan :dance: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 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