Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
Delphi 10.4 Sydney
|
AW: Einheiten parsen
12. Mär 2015, 07:52
Ja, das weiß ich doch selbst? Dieser Parser arbeitet aber halt anders. Ansonsten ja zum Beispiel so, so einen hab ich auch mal gemacht.
Delphi-Quellcode:
procedure TParser.ParseFunctions(var S: string);
var
Index: integer;
begin
Index := OperatorPos(S, 'A');
while Index > 0 do
begin
MathWork(S, Index);
Index := OperatorPos(S, 'A');
end;
end;
procedure TParser.ParseOperator(var S: string; const AOperator: Char);
var
Index: integer;
begin
Index := OperatorPos(S, AOperator);
while Index > 0 do
begin
MathWork(S, Index);
Index := OperatorPos(S, AOperator);
end;
end;
procedure TParser.Parse(var S: string);
begin
// Diese Reihenfolge
ParseFunctions(S); // Funktionen, Von Rechts nach Links;
ParseOperator(S, '^'); // Power, Von Rechts nach Links;
ParseOperator(S, '*'); // Punktrechnung, Von Links nach Rechts;
ParseOperator(S, '+'); // Strichrechnung Von Links nach Rechts;
end;
function TParser.Solve(T: string; Sender: boolean): string; // Aufruf mit Sender = false;
var
A, B: Integer;
S: string;
AFloat: double;
begin
while HaveBrackets(T, A, B) do
begin
S := StrMid(T, A + 1, B - 1);
Solve(S, true);
Parse(S);
T := StrLeft(T, A - 1) + S + StrRight(T, B + 1);
end;
if not Sender then
begin
Parse(T);
if TryStrToFloat(GetNumber(T), AFloat) then
Result := GetNumber(T)
else
Result := '0'; // Syntaxerror
end;
end;
|
|
Zitat
|