Thema: Delphi Trennzeichen suchen

Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#7

Re: Trennzeichen suchen

  Alt 25. Nov 2005, 20:43
Na ja, dein Problem ist es, dass du in deiner Schleife schon über alle Strings der StringListe gehst und hier jeden String schon zerlegst. Ein StringTokenizer wird eigentlich nur auf ein String angewendet. Mal etwas abstrakt:
Delphi-Quellcode:
var StringTokenizer : TStringTokenizer;
    List : TStrings;
    i : Integer;
    buffer : String;
begin
  // Erzeugen eines TStringtokenizer zu geg. Trennzeichen
  StringTokenizer := TStringTokenizer.Create(Trennzeichen);

  // Prüfen ob die Stringlist leer ist
  if List.Count > 0 then
    begin
      // alle Strings der StringList durchgehen
      for i := 0 to List.Count - 1 do
        begin
          // einen String auswählen
          StringTokenizer.zuZerlegenderString := List.Strings[i];
          
          // String in alle seine Token zerlegen
          while StringTokenizer.hasMoreToken do
            begin
              buffer := StringTokenizer.getNextToken;
              // mache was mit diesem Token
            end;
        end;
    end;
end;
So kämst du an jedes Token (nacheinander).
Natürlich fehlt die komplette Implementierung deines TStringTokenizer. Eine sehr einfache Methode ist es aber wie gesagt, den String einfach mittels Pos auf weitere Vorkommen zu prüfen und ggf. zu Trennen.
Anders gesagt
Delphi-Quellcode:
function TStringTokenizer.hasMoreToken : Boolean;
begin
  result := length(self.zuZerlegenderString) > 0;
end;

function TStringTokenizer.getNextToken : String;
var buffer : Integer;
begin
  result := '';
  if length(self.zuZerlegenderString) > 0 then
    begin
      buffer := Pos(self.Trennzeichen, self.zuZerlegenderString);
      if buffer > 0 then
        begin
          result := LeftStr(self.zuZerlegenderString, (buffer - 1));
          self.zuZerlegenderString := RightStr(self.zuZerlegenderString, length(self.zuZerlegenderString) - (buffer + 1));
        end
      else
        begin
          result := self.zuZerlegenderString;
          self.zuZerlegenderString := '';
        end;
    end;
end;
So als ungetesteter Ansatz
  Mit Zitat antworten Zitat