Hey,
wie der Titel schon sagt geht es um die Delphi Funktion GetLocaleFormatSettings. Da ich Textdateien parse welche Zahlen die mit der US Locale formatiert sind enthalten, brauche ich eine äquivalente Funktion. Delphi kennt dafür die bereits vorher genannte Funktion, sowie TFormatSettings.Create. Gibt es eine entsprechende alternative in FreePascal?
Für die Verwendung auf Deutschen Rechnern ist es ja noch recht harmlos, da reicht es einfach den DecimalSeparator auf '.' zu stellen, wenn das Programm jetzt aber auf einem exotischeren Rechner laufen sollen, bei dem das Zahlenformat eventuell ganz anders ist (siehe asiatische Länder), wäre mir eine einfache Funktion doch lieber
GetLocaleFormatSettings in FreePascal?
Re: GetLocaleFormatSettings in FreePascal?
Bei den Funktionen, die einen Punkt als Dezimalseparator benötigen, kannst du eine lokale Kopie der FormatSettings (aus SysUtils) deklarieren, den DezimalSeparator (und evtl. auch andere Eigenschaften entsprechend ändern) und als zusätzlichen Parameter in StrToFloat o.ä. verwenden. Oder nimm die alte Pascal-Prozedur val().
Code: Alles auswählen
function DecPtStrToFloat(s: String): Double;
var
fs. TFormatSettings;
begin
fs := FormatSettings;
fs.DecimalSeparator := '.';
Result := StrToFloat(s, fs);
end;
function DecPtStrToFloat(s: String): Double;
var
res: Integer;
begin
val(s, result, res);
end;
-
- Beiträge: 1910
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: GetLocaleFormatSettings in FreePascal?
wp_xyz hat geschrieben:Bei den Funktionen, die einen Punkt als Dezimalseparator benötigen, kannst du eine lokale Kopie der FormatSettings (aus SysUtils) deklarieren, den DezimalSeparator (und evtl. auch andere Eigenschaften entsprechend ändern) und als zusätzlichen Parameter in StrToFloat o.ä. verwenden. Oder nimm die alte Pascal-Prozedur val().Code: Alles auswählen
function DecPtStrToFloat(s: String): Double;
var
fs. TFormatSettings;
begin
fs := FormatSettings;
fs.DecimalSeparator := '.';
Result := StrToFloat(s, fs);
end;
function DecPtStrToFloat(s: String): Double;
var
res: Integer;
begin
val(s, result, res);
end;
Das verwende ich ja schon, das Problem hierbei ist, die Locale definiert ja nicht nur den Dezimalseparator. Ich möchte halt, wenn eventuell noch andere Formate (wie Daten o.ä.) hinzukommen, nicht immer die gesamte Amerikanische Locale kopieren müssen. Da dachte ich das eine so grundlegende Funktion wie GetLocaleFormatSettings, irgendwo implementiert sein müsste (immerhin hat Delphi sogar 2 verschiedene Varianten dafür)
Re: GetLocaleFormatSettings in FreePascal?
GetLocaleFormatSettings() gibt es seit mindestens fpc 2.6 in unit SysUtils. Ist allerdings mit der Direktive "platform" versehen, d.h. dürfte nur auf Windows funktionieren.
-
- Beiträge: 1910
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: GetLocaleFormatSettings in FreePascal?
wp_xyz hat geschrieben:GetLocaleFormatSettings() gibt es seit mindestens fpc 2.6 in unit SysUtils. Ist allerdings mit der Direktive "platform" versehen, d.h. dürfte nur auf Windows funktionieren.
Komisch bei mir (Windows 64 Bit, FPC 3.0.2) findet Lazarus es nicht.
Unter Posix systemen verwendet FreePascal ja glaube ich auch immer das US Format.
Re: GetLocaleFormatSettings in FreePascal?
Warf hat geschrieben:wp_xyz hat geschrieben:GetLocaleFormatSettings() gibt es seit mindestens fpc 2.6 in unit SysUtils. Ist allerdings mit der Direktive "platform" versehen, d.h. dürfte nur auf Windows funktionieren.
Komisch bei mir (Windows 64 Bit, FPC 3.0.2) findet Lazarus es nicht.
Bei mir schon: Neues Projekt, auf dem automatisch eingefügten "SysUtils" in "uses" mit Ctrl und linkter Maustaste klicken --> es öffnet sich sysutils. "GetLocaleFormatSettings" suchen --> wird als letzte Deklaration über "implementation" gefunden.