AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Neues aus Athen - WriteFloat

Ein Thema von TomyN · begonnen am 28. Aug 2024 · letzter Beitrag vom 29. Aug 2024
Antwort Antwort
Seite 1 von 2  1 2      
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
252 Beiträge
 
Delphi 10.3 Rio
 
#1

Neues aus Athen - WriteFloat

  Alt 28. Aug 2024, 08:14
Delphi-Version: 12 Athens
Hallo

Gestern bin ich über folgendes gestolpert

Wert in Inifile schreiben:

Code:
...
ini: TMemIniFile;
...
x:= 1.2;
ini.WriteFloat('Hinz','Kunz', x);
ini.UpdateFile;
...
In der selben App aus Inifile lesen

Code:
...
ini: TMemIniFile;
...
x:= ini.Readfloat('Hinz','Kunz', 1.5);
...
Folge: Fehlermeldung '1,2 ist keine gültige Zahl'

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:
...
ini: TMemIniFile;
dsl: Char;
...
dsl:= FormatSettings.Decimalseparator;
FormatSettings.Decimalseparator:= '.';
x:= 1.2;
ini.WriteFloat('Hinz','Kunz', x);
ini.UpdateFile;
...
FormatSettings.Decimalseparator:= dsl;
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).

Nur so als Hinweis, falls jemand sich wundern sollte....

Tomy
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: Neues aus Athen - WriteFloat

  Alt 28. Aug 2024, 09:38
Ich denke eher man muss gewährleisten, dass beide Routinen mit denselben Einstellungen in FormatSettings arbeiten. Dazu gibt es auch einen Report: Add TFormatSettings parameters to TCustomIniFile read/write methods for floats and date/time values.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

AW: Neues aus Athen - WriteFloat

  Alt 28. Aug 2024, 10:39
Zitat:
Created: 10/Mar/17 4:02 AM
Das nenne ich mal Quality Management, zumal eine mögliche Lösung schon mitgeliefert wird. Und dann wundert man sich, wenn gemeckert wird.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: Neues aus Athen - WriteFloat

  Alt 28. Aug 2024, 11:10
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
252 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Neues aus Athen - WriteFloat

  Alt 28. Aug 2024, 12:09
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
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
131 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Neues aus Athen - WriteFloat

  Alt 28. Aug 2024, 13:42
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.
Kannst du das Problem denn in einem Minimalbeispiel nachvollziehen oder ist das bei dir in ein größeres Programm eingebettet, wo vielleicht doch an anderer Stelle die globalen FormatSettings geändert werden? Sowohl ReadFloat als auch Writefloat verwendet intern nicht anderes als System.SysUtils.StrToFloat und System.SysUtils.FloatToStr.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#7

AW: Neues aus Athen - WriteFloat

  Alt 28. Aug 2024, 14:47
Kannst du das Problem denn in einem Minimalbeispiel nachvollziehen
Also ich kann es nicht. Dieser kleine Test liefert True:
Delphi-Quellcode:
  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;
Die Datei hat dann diesen Inhalt:
Code:
[Hinz]
Kunz=1,2
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Neues aus Athen - WriteFloat

  Alt 28. Aug 2024, 14:56
relativ simpel
Permanent an einem nicht threadsicherem programmglobalem Setting rumzupfuschen, würde ich nicht als "Lösung" ansehen.

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.
$2B or not $2B

Geändert von himitsu (28. Aug 2024 um 15:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#9

AW: Neues aus Athen - WriteFloat

  Alt 28. Aug 2024, 15:31
Permanent an einem nicht threadsicherem programmglobalem Setting rumzupfuschen, würde ich nicht als "Lösung" ansehen.
Das hatte ich in diesem Zusammenhang ja auch gar nicht als solche bezeichnet:
für das man relativ simpel selbst einen Workaround erstellen kann (z.B. einen Class Helper oder eine Ableitung von TMemIniFile).
Der Class Helper bekommt die überladenen Methoden, während die Ableitung im Wesentlichen auf deiner Lösung in dem QP-Kommentar basiert.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.081 Beiträge
 
Delphi 2009 Professional
 
#10

AW: Neues aus Athen - WriteFloat

  Alt 29. Aug 2024, 16:27
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.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz