Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
Delphi 2010 Professional
|
Re: formatierter progress string
24. Jun 2007, 16:24
Hallo Stephan,
du kannst das Parsen auch an Val 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 Dezimal punkte 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
|
|
Zitat
|