Delphi-PRAXiS
Seite 2 von 2     12

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Deutsche Dezimal-Zahl in englisches Format bringen (https://www.delphipraxis.net/194834-deutsche-dezimal-zahl-englisches-format-bringen.html)

matashen 12. Jan 2018 12:16

AW: Deutsche Dezimal-Zahl in englisches Format bringen
 
Und warum nimmst du nicht die Formatsettings

ALT:
Decimalseperator:='.';


aktuelles Delphi
Formatsettings.decimalseparator:='.'


ThousandSeparator
gibt die Tausendertrennzeichen an.

Jumpy 12. Jan 2018 12:44

AW: Deutsche Dezimal-Zahl in englisches Format bringen
 
Was macht denn FillAdvGrid? Wenn du da das StringGrid manuell irgendwie befüllst, kannst du dass doch da ändern. Wie der Name schon sagt sind im StringGrid nur noch Strings und das wird halt so exportiert, wie es im StringGrid steht.

Dementsprechend (je nachdem was FillAdvGrid macht/ist) sind daher auch die FormatSettings Latte...

Delphi.Narium 12. Jan 2018 16:23

AW: Deutsche Dezimal-Zahl in englisches Format bringen
 
Wie die CSV entsteht, ist wohl nur dort bestimmt: SG_Export.SaveToCSV
Ohne den Quelltext und / oder einer genauen Beschreibung dessen, wird es beim Raten bleiben. Innerhalb dieser Routine sind höchstwahrscheinlich die FormatSettings zu ändern (oder hat die Komponenten bereits entsprechende Attribute und / oder Methoden?
Ausführliche Doku zum TAdvStringGrid

bcvs 16. Jan 2018 06:58

AW: Deutsche Dezimal-Zahl in englisches Format bringen
 
Ich würde den CSV-Export nicht von dem ADVGrid machen lassen. In deinem FillAdvGrid gehst du doch wahrscheinlich deine ganzen Daten durch. Dann kannst du da doch auch gleich die CSV schreiben. Dann hast du volle Kontrolle darüber, was da rein kommt und bist nicht auf die Export-Routine des Grid angewiesen.

ibp 16. Jan 2018 07:12

AW: Deutsche Dezimal-Zahl in englisches Format bringen
 
sind denn die Zahlen auch als numerischer Wert im AdvStringGrid definiert oder als String?

Fukiszo 16. Jan 2018 09:22

AW: Deutsche Dezimal-Zahl in englisches Format bringen
 
Hallo, ich hatte mal ein ähnliches problem,
und hab das übel an der wurzel gepackt.
Der code ändert für das ganze system die interpretierung/darstellung der trennzeichen.

hier delphi 7 kompatibler code,
ich hoff es hilft.

edited:
hab den source entfernt da er, wie oben beschrieben "für das ganze system" war und nicht für dein lokales problem.
Bei Interesse, einfach nachfragen, in den situation wo ich es brauchte, und nach bearbeitung auch wieder zurückstellte,
half mir mein code aus der patsche, da mein übel = das system war.
ich nutzte diesen code in batch dateien. egal. :)

Daniel 16. Jan 2018 09:46

AW: Deutsche Dezimal-Zahl in englisches Format bringen
 
Bloß nicht!
Dir fehlt - bei allem Respekt - die nötige Erfahrung, um ein Übel an der Wurzel zu packen, ohne selbst das nächstgrößere Übel darzustellen. Du änderst systemweite Einstellungen und ziehst damit für ein lokales Problem in Deiner Anwendung andere Programme in Mitleidenschaft, die dieses Problem ggf. gar nicht haben.

MNSDN schreibt zu "SetLocaleInfo()" ausdrücklich:
Zitat:

Caution Because this function modifies values for all applications, it should only be called by the regional and language options functionality of Control Panel, or a similar utility. If making an international change to system parameters, the calling application must broadcast the WM_SETTINGCHANGE message to avoid causing instabilities in other applications.

ibp 16. Jan 2018 10:10

AW: Deutsche Dezimal-Zahl in englisches Format bringen
 
Zitat:

Zitat von Ykcim (Beitrag 1390824)
Kann mir jemand sagen, wie ich die TFormatSettings umstellen kann, damit das StringGrid mit dem englischen Format arbeitet und dann hoffentlich die CSV-Datei korrekt erstellt wird. Im Moment wird die Dezimalzahl nämlich mit Hochkommas gekapselt ("3,45"), das die CSV das Komma als Seperator verwendet. Das hat zur Folge, dass beim "Load Data InFile" Befehl ab dem Komma abgeschnitten wird.

Code:
,"3,45",
ist doch das richtige CSV Format für das Zahlenformat 3,35. Ich vermute, dass das Problem eher bei der Methode "Load Data InFile" ein Problem vorliegt.

Whookie 16. Jan 2018 15:55

AW: Deutsche Dezimal-Zahl in englisches Format bringen
 
Das Problem liegt darin, das die SaveToCSV Funktion nicht wirklich "weiß" welche Daten in den Zellen stehen und sie daher einfach so abspeichert wie sie (in Stringform) eben vorliegen.

Wenn das Grid wie folgt befüllt wird (stark vereinfacht, statt FillAdvGrid):

Delphi-Quellcode:
procedure DemoFill;
var
  iy: Integer;
  ix: Integer;
  LFmt: TFormatSettings;
begin
  LFmt := TFormatSettings.Create;
  LFmt.DecimalSeparator := '.';
  for iy := 0 to AGd.RowCount-1 do
  begin
    for ix := 0 to AGd.ColCount-1 do
    begin
      AGd.Cells[ix,iy] := Format('%.6f', [ Random], LFmt);
    end;
  end;
end;
Dann kann man den Inhalt entsprechend abspeichern:

Delphi-Quellcode:
  AGd.Delimiter := ',';
//  AGd.QuoteEmptyCells := FALSE; // leere Zellen nicht quoten
  AGd.SaveToCSV('D:\test.csv');

Nachteil, auch die Darstellung am Bildschirm ist dann in diesem Format.

ibp 17. Jan 2018 07:53

AW: Deutsche Dezimal-Zahl in englisches Format bringen
 
Code:
AdvStringgrid.ints[col,row] := 123;  // > csv = ... ,123, ...
AdvStringgrid.floats[col,row] := 123.456; // > csv = ... ,123.456, ...
AdvStringgrid.cells[col,row] := "123.456"; //   // > csv = ...,"123.456",... immer Strings!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 Uhr.
Seite 2 von 2     12

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf