Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String von ; Trennen (über TStringList) (https://www.delphipraxis.net/45778-string-von-%3B-trennen-ueber-tstringlist.html)

Christian18 12. Mai 2005 08:25


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:
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;
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???

Steve 12. Mai 2005 08:30

Re: String von ; Trennen (über TStringList)
 
Hi,

ist zwar nicht mit ner StringList, aber vielleicht hilfts Dir ja trotzdem :zwinker: ExplodeExplode


Gruß
Stephan :dance:

Duffy 12. Mai 2005 08:34

Re: String von ; Trennen (über TStringList)
 
Hallo Christian
StringPickToPieces

bye
Claus

Sharky 12. Mai 2005 08:43

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.

alcaeus 12. Mai 2005 08:50

Re: String von ; Trennen (über TStringList)
 
Zitat:

Zitat von Sharky
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.

Und das laesst sich einfach machen: Einmal ein " am Anfang, eins am Ende, und jedes ';' durch '";"' ersetzen. So wird wirklich nur nach Strichpunkten getrennt. Am Ende musst du dann zwar die QuotingChars entfernen, aber das duerfte doch kein Problem sein ;)

Greetz
alcaeus

Pseudemys Nelsoni 12. Mai 2005 08:59

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

marabu 12. Mai 2005 09:16

Re: String von ; Trennen (über TStringList)
 
Zitat:

Zitat von alcaeus
Und das laesst sich einfach machen: Einmal ein " am Anfang, eins am Ende, und jedes ';' durch '";"' ersetzen. So wird wirklich nur nach Strichpunkten getrennt. Am Ende musst du dann zwar die QuotingChars entfernen, aber das duerfte doch kein Problem sein ;)

Vorsicht: Im Feldwert vorkommender QuotingChar muss verdoppelt werden.

Grüße vom marabu

Christian18 13. Mai 2005 08:29

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:
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;
Leider funktioniert das nicht. hat jemand von euche eine ahnung von euch??? Warum nicht??? Sollte doch eigentlich funktionieren oder nicht?

[Edit]Achso, zu dem was nicht funktioniert. Er gibt einen leeren String aus.[/Edit]

marabu 13. Mai 2005 08:34

Re: String von ; Trennen (über TStringList)
 
Delphi-Quellcode:
for i:=0 to Length(s) - 1 do
Ohne weiteren Kommentar zu deinem Code - der Index muss von 1 bis Length(s) laufen.

Steve 13. Mai 2005 08:34

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 20:32 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz