(Gast)
n/a Beiträge
|
AW: Zahlen aus String parsen
8. Mai 2012, 20:45
Hier habe ich meine obere Funktion um das Tausenderzeichen erweitert. Zusätzlich habe ich noch auf die Schnelle eine Funktion zur Prüfung auf Tausenderzeichen geschrieben und eingefügt. Wie du siehst, es kann einen unendlich langen Text durchsuchen und auf Fehler prüfen.
Delphi-Quellcode:
//Prüft auf Zahl im Strings, wie "Neuer Text (2)". Bei vorhanden sein
//gibt StrB den Teil vor der Zahl, StrN die Zahl, StrE den Rest.
function IsNumIn(Str: String; var StrB, StrNum, StrE: String): Boolean;
var
k: Integer;
begin
StrB := ''; // Text vor Zahl
StrNum := ''; // Zahl
StrE := ''; // Text nach Zahl
k := 1;
while k <= Length(Str) do
if Pos(Str[k], '0123456789') = 0 then
begin
StrB := StrB + Str[k];
Inc(k);
end else Break;
while k <= Length(Str) do
if Pos(Str[k], '0123456789.') > 0 then //Anpassung durch '.' Erweiterung
begin
StrNum := StrNum + Str[k];
Inc(k);
end else Break;
StrE := Copy(Str, k, Length(Str));
Result := StrNum <> '';
end;
//Prüft den Zahl-String auf korrekte Schreibweise des Tausender Trenners
function IsTSNumOk(Str: String): Boolean;
begin
Result := True;
while Pos('.', Str) > 0 do
if LastDelimiter('.', Str) = (Length(Str) - 3) then
Delete(Str, Length(Str) - 3, MaxInt)
else
begin
Result := False;
Exit;
end;
end;
//Ein Beispiel
procedure TForm1.Button1Click(Sender: TObject);
var
Str, StrB, StrNum, StrE: String;
begin
Str := 'Ich verdiente mal 10000DM, dann 27.990 DM, dann mal 17.000 Euro, ' +
'aber auch mal 1.273.000Lira, jedoch nie 125.00 Euro';
while LastDelimiter('0123456789', Str) > 0 do
begin
if IsNumIn(Str, StrB, StrNum, StrE) then
begin
if IsTSNumOk(StrNum) then
ShowMessage('Zahl ist ok, ' + StrNum)
else
ShowMessage('Fehler, ' + StrNum);
Str := StrE;
end;
end;
end;
Bei der letzten Zahl kommt ein Fehler wegen falscher Schreibweise des Tausender Trenners.
|
|
Zitat
|