Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#12

AW: Zahlen aus String parsen

  Alt 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.
  Mit Zitat antworten Zitat