AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String von ; Trennen (über TStringList)

Ein Thema von Christian18 · begonnen am 12. Mai 2005 · letzter Beitrag vom 13. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#1

String von ; Trennen (über TStringList)

  Alt 12. Mai 2005, 08:25
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???
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#2

Re: String von ; Trennen (über TStringList)

  Alt 12. Mai 2005, 08:30
Hi,

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


Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#3

Re: String von ; Trennen (über TStringList)

  Alt 12. Mai 2005, 08:34
Hallo Christian
StringPickToPieces

bye
Claus
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#4

Re: String von ; Trennen (über TStringList)

  Alt 12. Mai 2005, 08:43
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: String von ; Trennen (über TStringList)

  Alt 12. Mai 2005, 08:50
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#6

Re: String von ; Trennen (über TStringList)

  Alt 12. Mai 2005, 08:59
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
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: String von ; Trennen (über TStringList)

  Alt 12. Mai 2005, 09:16
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
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#8

Re: String von ; Trennen (über TStringList)

  Alt 13. Mai 2005, 08:29
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]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: String von ; Trennen (über TStringList)

  Alt 13. Mai 2005, 08:34
for i:=0 to Length(s) - 1 do Ohne weiteren Kommentar zu deinem Code - der Index muss von 1 bis Length(s) laufen.
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#10

Re: String von ; Trennen (über TStringList)

  Alt 13. Mai 2005, 08:34
Hi,

bei mir funktioniert das einwandfrei.
[edit]Hatte HugeStrings aber deaktiviert ({$H-})[/edit]
Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr.
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