Einzelnen Beitrag anzeigen

Furtbichler
(Gast)

n/a Beiträge
 
#16

AW: Effizienteste Datenverarbeitung eines Strings

  Alt 20. Okt 2011, 22:22
Eine gelungene Umsetzung des ersten Vorschlags, nur das auf das Prüfen von 'G' verzichtet wird.
Ne.Das "G" wurde nicht vergessen.
Lesen müsste man können. "nur auf DAS PRÜFEN von 'G'..." PRÜFEN! PRÜFEN!
Auf das ---> PRÜFEN <--- wurde verzichtet.

Nix 'vergessen'. hab ich nicht geschrieben und auch nicht gemeint. Klar soweit

Delphi-Quellcode:
Procedure ProcessInputString (const s: String);
Var
  state : TParserStates; // stWaitForTagOpen, stWaitForGee, stEatFirstNumber stEatSecondNumber;
  number1, number2 : String;
  i : Integer;
  
  
begin
  state := stWaitForTagOpen;
  number1 := '';
  number2 := '';

  For i:=1 to length (s) do
    case state of
      stWaitForTagOpen :
        if s[i] = '<Then
          state := stWaitForGee
        else
          Raise EParserException.Create('"<" expected');
       stWaitForGee :
        case s[i] of
          'G' : state := stEatFirstNumber;
          '>' : state := stEndOfInput;
          else Raise EParserException.CreateF('">" or "G" expected');
        end;
      stEatFirstNumber :
        if s[i] = ',Then
          state := stEatSecondNumber
        else
          number1 := number1 + s[i];
      stEatSecondNumber :
        if s[i] = ';then begin
           state := stWaitForGee;
           ProcessNumbers (number1, number2);
           number1 := '';
           number2 := '';
         end
         else
            number2 := number2 + s[i];
     end;

  if state <>stEndOfInput Then
    Raise EParserError ('Unexpected EOF');
end;
Getippt und nicht getestet.

Sollte eigentlich am Schnellsten sein (ok, mit PChar vielleicht noch schneller), denn es gibt nur eine Schleife und man geht nur 1x von vorne nach hinten.

Geändert von Furtbichler (20. Okt 2011 um 22:29 Uhr)
  Mit Zitat antworten Zitat