![]() |
"." oder "," - Wie herausfinden?
Moin moin,
ich hab folgnedes Problem: Muss ein Programm schreiben, das Dateien mit einer bestetimmten Struktur einliest und grafisch ausgibt. Das Problem ist aber: Mal sind Kommzahlen in dieser Datei mit einen Punkt und mal mit einem Komma getrennt. Also steht in einer Datei z.b.: "1.45" und in einer anderen "1,45". Mein problem ist, das ich noch keine Lösung gefunden habe den "DecimalSeperator" dynamisch anzupassen. Habt ihr da eine Idee? Gruß, Stefan |
Re: "." oder "," - Wie herausfinden?
Guten Morgen,
liest Du die Zahlen als String ein? Dann prüfe doch auf '.' und wenn ein Punkt vorhanden ist ersetze ihn durch ein Komma. Dazu kannst Du StringReplace verwenden. Grüße Klaus |
Re: "." oder "," - Wie herausfinden?
Das Problem habe ich bei der Eingabeverarbeitung ständig.
Dafür habe ich dann eine kleine Routine, welche mir die Eingabe aus einem String aufbereitet. Gruß Peter
Delphi-Quellcode:
Function ReadFloat(buf : String) : Extended;
var Konv : String; i,n : Integer; Begin buf := Trim(buf); result:=0; n := length(Trim(buf)); if n=0 then Exit; While (n > 0) and (buf[n]<>'.') and (buf[n]<>',') do dec(n); if n > 0 then buf[n] := DecimalSeparator; dec(n); While (n>0) do Begin if (buf[n]='.') or (buf[n]=',') then buf[n]:=' '; dec(n); end; konv:=''; for i:=1 to length(buf) do if buf[i] in ['0'..'9',DecimalSeparator,'+','-'] then konv:=konv+buf[i]; if length(Konv)=0 then Exit; try result:=strtofloat(Konv); except on E: EConvertError do result:=0; end; end; |
Re: "." oder "," - Wie herausfinden?
Wie klappts damit?
Delphi-Quellcode:
Gruß,
function ConvertStr(const aStr : String) : Double;
var OldSep : Char; begin try Result := StrToFloat(aStr); except OldSep := DecimalSeparator; if (OldSep = '.') then begin DecimalSeparator := ','; end else begin DecimalSeparator := '.'; end; Result := StrToFloat(aStr); DecimalSeparator := OldSep; end; // try end; // ConvertStr pszopp |
Re: "." oder "," - Wie herausfinden?
Hallo,
ich hätte da noch eine universell verwendbare Funktion anzubieten:
Delphi-Quellcode:
Testen kann man so:
function Translate(const s, sOld, sNew: String): String;
var i, iPos, iLen: integer; begin SetLength(Result, Length(s)); iLen := 0; for i := 1 to Length(s) do begin iPos := Pos(s[i], sOld); if iPos > Length(sNew) then Continue; Inc(iLen); if iPos > 0 then Result[iLen] := sNew[iPos] else Result[iLen] := s[i]; end; SetLength(Result, iLen); end;
Delphi-Quellcode:
Grüße vom marabu
var
ds, s: String; e: Extended; begin ds := StringOfChar(DecimalSeparator, 2); s := ''; while InputQuery('Check', 'Float', s) do if TryStrToFloat(Translate(s, '.,', ds), e) then ShowMessage(Format('%g', [e])) else ShowMessage('bad value'); end; |
Re: "." oder "," - Wie herausfinden?
Moin!
Danke für eure Hilfe! :-) Funktioniert alles wunderbar. Gruß, Overburn |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz