![]() |
Deutsche Dezimal-Zahl in englisches Format bringen
Hallo Zusammen,
ich muss eine große Datenmenge, die in einer Procedure bearbeitet wird, regelmäßig in einen MySQL-Server schieben. Dazu benutze ich eine CSV-Datei und den "Load Data InFile" Befehl. Die CSV-Datei erstelle ich aus einen StringGrid (von TMS). Das Problem ist, dass mein Delphi auf das deutsche Dezimal-Format (1.000,00) und der MySQL-Server auf dem englischen (1,000.00). Ich habe in der Doku gelesen, dass das Dezimal-Format des StringGrids aus den TFormatSettings kommt. 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. Vielen Dank Patrick |
AW: Deutsche Dezimal-Zahl in englisches Format bringen
Alles Wesentliche sollte hier zu finden sein:
![]() |
AW: Deutsche Dezimal-Zahl in englisches Format bringen
Zitat:
Besteht nicht auch auf dem SQL-Server, die Möglichkeit, den Feldtrenner zu definieren? Gruß K-H |
AW: Deutsche Dezimal-Zahl in englisches Format bringen
Das würde dir doch gar nichts bringen, weil die englische Darstellung immer noch Kommata enthält. Die einzige Lösung ist, deinen CSV-Parser anzupassen, sodass er mit "" umgehen kann.
|
AW: Deutsche Dezimal-Zahl in englisches Format bringen
Zitat:
Gruß K-H |
AW: Deutsche Dezimal-Zahl in englisches Format bringen
Ich mag mich ja täuschen, aber sinnvollerweise würde man den 1.000der Punkt nicht bei so einer Importdatei liefern, sondern nur den Dezimaltrenner. Dementsprechend wäre nur ein Punkt in der englischen Darstellung.
|
AW: Deutsche Dezimal-Zahl in englisches Format bringen
Hallo Zusammen,
vielen Dank für die Antworten. Ich habe mir den anderen Beitrag durchgelesen und versucht für mich anzuwenden - leider ohne Erfolg. Nachstehend mein Code:
Delphi-Quellcode:
Leider wird bei der Erstellung der CSV-Datei immer noch aus 4.23 "4,23" gemacht. Hat jemand dazu eine Idee?
//CSV-Datei für den UpLoad erstellen
System.SysUtils.FormatSettings.DecimalSeparator := '.'; //Hier stelle ich das Setting um Application.UpdateFormatSettings := false; FillAdvGrid(SG_Export, ColsAG, RowsAG); //Hier wird das temproäre StringGrid befüllt WriteFile('as400'); FCSVPfad:=FCSVPfad+'AS400UPLOADFILE.CSV'; SG_Export.SaveToCSV(FCSVPfad); //Hier wird die CSV-Datei erstellt //CSV-Datei hochladen LoadData(FCSVPfad, 'as400temp'); //Hier wird die CSV-Datei in den MySQL-Server hochgeladen Application.UpdateFormatSettings := true; //Hier stelle ich das Setting wieder um System.SysUtils.FormatSettings.DecimalSeparator := ','; //CSV-Datei löschen if not DeleteFile(FCSVPfad) then ShowMessage('Datei "'+FCSVPfad+'" konnte nicht gelöscht werden!'); Vielen Dank Patrick |
AW: Deutsche Dezimal-Zahl in englisches Format bringen
Welche Klasse verbirgt sich unter "SG_Export" ?
|
AW: Deutsche Dezimal-Zahl in englisches Format bringen
Das ist das StringGrid, welches ich oben in der Procedure als Variable definiere
Delphi-Quellcode:
und dann später zum Leben erwecke
SG_Export: TAdvStringGrid;
Delphi-Quellcode:
SG_Export:= TAdvStringGrid.Create(nil);
|
AW: Deutsche Dezimal-Zahl in englisches Format bringen
Also so könnte man es in diesem Falle lösen - allerdings ist das keine gute Lösung...
Ich ändere das Dezimalkennzeichen "manuell" von Komma auf Punkt in einer For-Schleife...
Delphi-Quellcode:
Wenn es einen charmanteren Weg gibt, bin ich daran sehr interessiert...
//CSV-Datei für den UpLoad erstellen
FillAdvGrid(SG_Export, ColsAG, RowsAG); WriteFile('as400'); FCSVPfad:=FCSVPfad+'AS400UPLOADFILE.CSV'; //decimalZahl von deutsch nach englisch ändern for I := 0 to SG_Export.RowCount -1 do begin SG_Export.Cells[21,I]:=StringReplace(SG_Export.Cells[21,I],',','.',[rfIgnoreCase, rfReplaceAll]); end; SG_Export.SaveToCSV(FCSVPfad); //CSV-Datei hochladen LoadData(FCSVPfad, 'as400temp'); //CSV-Datei löschen if not DeleteFile(FCSVPfad) then ShowMessage('Datei "'+FCSVPfad+'" konnte nicht gelöscht werden!'); Vielen Dank Patrick |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 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 by Thomas Breitkreuz