GetLocaleFormatSettings in FreePascal?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

GetLocaleFormatSettings in FreePascal?

Beitragvon Warf » 14. Jan 2018, 13:54 GetLocaleFormatSettings in FreePascal?

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
Warf
 
Beiträge: 696
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon wp_xyz » 14. Jan 2018, 14:05 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;
wp_xyz
 
Beiträge: 2395
Registriert: 8. Apr 2011, 08:01

Beitragvon Warf » 14. Jan 2018, 16:00 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)
Warf
 
Beiträge: 696
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon wp_xyz » 14. Jan 2018, 16:38 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.
wp_xyz
 
Beiträge: 2395
Registriert: 8. Apr 2011, 08:01

Beitragvon Warf » 14. Jan 2018, 21:22 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.
Warf
 
Beiträge: 696
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon wp_xyz » 14. Jan 2018, 22:08 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.
wp_xyz
 
Beiträge: 2395
Registriert: 8. Apr 2011, 08:01

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried