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.