Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 

Re: formatierter progress string

  Alt 24. Jun 2007, 15:24
Hallo Stephan,

du kannst das Parsen auch an Delphi-Referenz durchsuchenVal delegieren. Für ganzzahlige Werte sieht das dann so aus:

Delphi-Quellcode:
function Split (s: string; var aValue: Integer; var aTail: string): Boolean; overload;
var
  ErrPos : Integer;
begin
  Val (s, aValue, ErrPos);
  if (ErrPos > 0) then
    aTail := TrimLeft(Copy(s, ErrPos, MaxInt))
  else
    aTail := '';
  Result := (aTail <> '');
end;
Bei Realwerten wird es etwas aufwendiger. Die Val-Prozedur verarbeitet nur Dezimalpunkte und hat zudem einen Implementierungsfehler: falls hinter der Zahl weitere Zeichen stehen, wird der Dezimaltrenner nicht berücksichtigt.

Delphi-Quellcode:
function Split (s: string; var aValue: Double; var aTail: string): Boolean; overload;
var
  ErrPos : Integer;
begin
  Val (s, aValue, ErrPos);
  aTail := '';
  if (ErrPos > 0) then
    begin
      if (ErrPos = Pos(DecimalSeparator, s)) then
        s[ErrPos] := '.';
      Val (s, aValue, ErrPos);
      if (ErrPos > 0) then
        begin
          aTail := TrimLeft(Copy(s, ErrPos, MaxInt));
          Val (Copy(s, 1, ErrPos - 1), aValue, ErrPos);
        end;
    end;
  Result := (aTail <> '');
end;
Die Anwendung:

Delphi-Quellcode:
var
  s : string;
  IntValue : Integer;
  RealValue : Double;
  Dimension : string;
begin
  s := '123 MB';
  Split(s, IntValue, Dimension);
  ShowMessage (Format('Value=%d'#13'Dimension="%s"', [IntValue, Dimension]));

  s := '1,44 MB';
  Split(s, RealValue, Dimension);
  ShowMessage (Format('Value=%g'#13'Dimension="%s"', [RealValue, Dimension]));
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat