Autor |
Beitrag |
GuaAck
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: Do 16.01.20 00:05
Hallo,
mit write(x) mit x vom Typ float wird x mit dem "." als Dezimalzeichen gedruckt. Wenn ich so eine Reihe von Zahlen getrennt mit ";" in eine Datei mit der Endung CSV schreibe, dann könnte ich diese Datei mit EXCEL öffnen und hätte jede Zahl in einer eigenen Spalte.
Mit dem Punkt als Dezimalzeichen versteht EXCEL das als String und schreibt alles in eine Spalte.
Aktuell habe ich eine kleine Procedure, die in der fertigen Datei einfach alle "." durch"," ersetzt. Geht prima,leider werden aber auch ".", die nicht als Dezimalzeichen gemeint sind, gewandelt. Das ist nicht schlimm, das sind nicht viele und ich muss es ja nur für das abschließenden Dokument einmal per Hand in EXCEL korrigieren.
Die Alternative floattostrf geht natürlich, ist aber umständlich.
Meine Frage: Kann man nicht pauschal write und writeln anweisen, "," als Dezimalzeichen zu verwenden. (Ich nutze Delphi 7.)
Vielleicht hat ja wer damit Erfahrung,
viele Grüße
GuaAck
|
|
Gausi
Beiträge: 8539
Erhaltene Danke: 475
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 16.01.20 08:35
Schau mal nach DecimalSeparator. Das sollte sich auch auf write auswirken. Falls du die andere Richtung, also StroToFloat auch im Code hast, musst du da auch ggf. anpassen.
_________________ We are, we were and will not be.
|
|
OlafSt
Beiträge: 486
Erhaltene Danke: 99
Win7, Win81, Win10
Tokyo, VS2017
|
Verfasst: Do 16.01.20 11:33
Diese globale Variable sollte man nicht mehr verwenden. Besser so:
Delphi-Quelltext 1:
| TF:=TFormatSettings.Create('en-US'); |
Alle Konvertierungsroutinen haben inzwischen einen overload mit einem weiteren Parameter, nämlich eben diesen FormatSettings. Ergo ersetzt man nun sein FloatToStr(f) durch ein FloatToStr(f, TF). Das TFormatSettings ist ein Record, der wird nicht per Free freigegeben, das geht von selbst !
_________________ Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
|
|
Gausi
Beiträge: 8539
Erhaltene Danke: 475
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 16.01.20 11:40
@OlafST: Weiß ich, aber gibt es TFormatSettings schon in Delphi 7? Ich meine nicht, da lief das noch über die globalen Variablen ...
_________________ We are, we were and will not be.
|
|
GuaAck
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: Do 16.01.20 18:58
Danke an Alle,
TFormatSettings gibt es auch schon in Delphi 7 und ich benutze das gelegentlich mit floattostrf. Das würde ohne Problem gehen.
NUR: "write(x)" ist viel einfacher als "write(floattostrf(x,fffixed, 8,3,Formatsettings))". Deshalb meine Frage, ob man nicht pauschal das Format für write umstellen kann.
Gausi schrieb "... sollte sich auch auf write auswirken...", aber wie kann ich denn die FormatSettings dafür setzen?
Gruß
GuaAck
|
|
OlafSt
Beiträge: 486
Erhaltene Danke: 99
Win7, Win81, Win10
Tokyo, VS2017
|
Verfasst: Fr 17.01.20 00:44
GuaAck hat folgendes geschrieben : | Danke an Alle,
NUR: "write(x)" ist viel einfacher als "write(floattostrf(x,fffixed, 8,3,Formatsettings))". Deshalb meine Frage, ob man nicht pauschal das Format für write umstellen kann.
|
Anstelle des kryptischen FloatToStrF verwende ich immer FormatFloat('0.000',x,TF). Ist deutlich übersichtlicher.
_________________ Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
|
|
Nersgatt
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Fr 17.01.20 10:44
GuaAck hat folgendes geschrieben : | NUR: "write(x)" ist viel einfacher als "write(floattostrf(x,fffixed, 8,3,Formatsettings))". Deshalb meine Frage, ob man nicht pauschal das Format für write umstellen kann. |
Kapsel den Teil floattostrf(x,fffixed, 8,3,Formatsettings) in einer eigenen lokalen Function. Dann wird es kürzer (z.B. write(MyFormatFloat(x)) und wenn Du das Format doch mal ändern willst, musst Du es nur an einer Stelle ändern.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
GuaAck
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: Fr 17.01.20 12:25
Danke für die beiden letzten Hinweise. FormatFloat kannte ich noch nicht, ist wirklich übersichtlicher (und geht auch in Delphi 7, habe ich eben probiert.)
Kapseln wird wohl die beste Lösung sein,
viele Grüße
GuaAck
|
|
|