![]() |
Delphi-Version: 12 Athens
Neues aus Athen - WriteFloat
Hallo
Gestern bin ich über folgendes gestolpert Wert in Inifile schreiben:
Code:
In der selben App aus Inifile lesen
...
ini: TMemIniFile; ... x:= 1.2; ini.WriteFloat('Hinz','Kunz', x); ini.UpdateFile; ...
Code:
Folge: Fehlermeldung '1,2 ist keine gültige Zahl'
...
ini: TMemIniFile; ... x:= ini.Readfloat('Hinz','Kunz', 1.5); ... Im Inifile steht 1,2 Doku zu ReadFloat sagt: Das Dezimalzeichen wird von der globalen System.SysUtils.FormatSettings-Variable festgelegt. Das Schreiben geändert
Code:
Und schon geht's. Jetzt steht 1.2 im IniFile, Zahlen in der App werden mit Komma angezeigt und das Einlesen klappt auch ohne Anpassung des Decimalseparators (was ich aber zur Sicherheit schon mache).
...
ini: TMemIniFile; dsl: Char; ... dsl:= FormatSettings.Decimalseparator; FormatSettings.Decimalseparator:= '.'; x:= 1.2; ini.WriteFloat('Hinz','Kunz', x); ini.UpdateFile; ... FormatSettings.Decimalseparator:= dsl; Nur so als Hinweis, falls jemand sich wundern sollte.... Tomy |
AW: Neues aus Athen - WriteFloat
Ich denke eher man muss gewährleisten, dass beide Routinen mit denselben Einstellungen in FormatSettings arbeiten. Dazu gibt es auch einen Report:
![]() |
AW: Neues aus Athen - WriteFloat
Zitat:
|
AW: Neues aus Athen - WriteFloat
Im Prinzip stimme ich dir zu. Allerdings handelt es sich hier um ein Feature, für das man relativ simpel selbst einen Workaround erstellen kann (z.B. einen Class Helper oder eine Ableitung von TMemIniFile). Da gibt es leider auch viele andere Issues, die man nicht so leicht selbst in den Griff kriegt.
Eigentlich bin ich ganz froh, nicht in der Position eines Product Managers zu stecken, der eine ausgewogene Triage für die im folgenden Release zu behebenden Bugs und zu implementierenden Features durchführen muss und dabei auch noch die Erwartungen der Marketingabteilung und des Managements im Rücken hat. |
AW: Neues aus Athen - WriteFloat
Nun ja, lustig finde ich halt, dass beim Schreiben die aktuellen TFormatSettings verwendet werden (wie auch sonst in der App, z.B. beim FloatToStrF), beim Lesen aber eine andere Einstellung, obwohl gerade bei der Doku zu ReadFloat explizit der Hinweis auf die aktuellen Formatsettings steht.
Die Doku zu WriteFloat zeugt auch vom Qualitätmanagement Schreibt einen booleschen Wert in eine INI-Datei. Mit WriteFloat kann ein Gleitkommawert in eine INI-Datei geschrieben werden. Der String Section bezeichnet den Dateiabschnitt, der den betreffenden Schlüssel enthält. Der String Ident enthält den Namen des Schlüssels, dessen Wert gesetzt werden soll. Der zu schreibende Gleitkommawert wird in Value übergeben. Nicht wundern, nur zahlen. Tomy |
AW: Neues aus Athen - WriteFloat
Zitat:
|
AW: Neues aus Athen - WriteFloat
Zitat:
Delphi-Quellcode:
Die Datei hat dann diesen Inhalt:
var ini := TMemIniFile.Create(TPath.GetTempFileName);
try var x:= 1.2; ini.WriteFloat('Hinz','Kunz', x); ini.UpdateFile; x:= ini.Readfloat('Hinz','Kunz', 1.5); Writeln(SameValue(x, 1.2).ToString(TUseBoolStrs.True)); finally ini.Free; end;
Code:
[Hinz]
Kunz=1,2 |
AW: Neues aus Athen - WriteFloat
Zitat:
So lange die INI nur auf dem selben Computer / im selben Windosaccount läuft unr niemals an den Spracheinstellungen was verändert wird, mag es funktioieren, aber ansonsten ist es ein Fehlverhalten / Bug der INI-Komponente, wenn sie standardmäig nicht "sprachunabhängig" arbeitet. |
AW: Neues aus Athen - WriteFloat
Zitat:
Zitat:
|
AW: Neues aus Athen - WriteFloat
Ich fand die Verwendung von FormatSettings bei INIs so ein absolutes Unding, dass ich einfach zwischen Double/TDateTime und Int64 caste. Dafür habe ich mir einen Class Helper für TCustomIniFile geschrieben. Ist dann zwar nicht mehr lesbar, ist mir aber egal.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 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-2025 by Thomas Breitkreuz