Hi,
mein kleiner Matheparser macht mir beim Komma Ärger: Bei der Rechnung 1,5*2.3 verwandelt er
1
,
5
zu zu 1,5. Allerdings geschieht dies nicht bei 2.3. Warum ? Mir ist nur aufgefallen, dass ich die Arraygröße verändere und die Schleife deshalb vlt. schon früher zu Ende ist, aber falls das überhaupt Auswirkungen hat, wie könnte man dann das Problem lösen ?
Delphi-Quellcode:
function Split(s : String) : TDynTokArray; // Ein Array für die Klasse TToken, spielt allerdings keine großartige Rolle hierbei; Split teilt, wie der Name schon sagt, alles in Tokens auf. Dennoch muss eine Kommazahl in einem Eintrag statt in 3 Einträgen stehen.
begin
...
for i := 0 to High(Result) do
begin
if (Result[i].Val = ',') or (Result[i].Val = '.') then // der Punkt wird hier abgefragt, also ist hier nicht die Fehlerquelle
begin
Result[i-1].Val := Result[i-1].Val + Result[i].Val + Result[i+1].Val; // Zusammensetzen
for j := i to High(Result) do // der Rest im Array verschoben werden
Result[j] := Result[j+1];
SetLength(Result, High(Result)); // der unnötige Rest, welcher sogar noch Fehler verursachen würde, wird gelöscht
end;
end;
...
end;