GetLocaleFormatSettings in FreePascal?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

GetLocaleFormatSettings in FreePascal?

Beitrag von Warf »

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

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: GetLocaleFormatSettings in FreePascal?

Beitrag von wp_xyz »

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;

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: GetLocaleFormatSettings in FreePascal?

Beitrag von Warf »

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)

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: GetLocaleFormatSettings in FreePascal?

Beitrag von wp_xyz »

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.

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: GetLocaleFormatSettings in FreePascal?

Beitrag von Warf »

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.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: GetLocaleFormatSettings in FreePascal?

Beitrag von wp_xyz »

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.

Antworten