AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Deutsche Dezimal-Zahl in englisches Format bringen

Deutsche Dezimal-Zahl in englisches Format bringen

Ein Thema von Ykcim · begonnen am 11. Jan 2018 · letzter Beitrag vom 17. Jan 2018
Antwort Antwort
Seite 1 von 2  1 2   
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
534 Beiträge
 
Delphi XE5 Professional
 
#1

Deutsche Dezimal-Zahl in englisches Format bringen

  Alt 11. Jan 2018, 18:20
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
Patrick
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
161 Beiträge
 
#2

AW: Deutsche Dezimal-Zahl in englisches Format bringen

  Alt 11. Jan 2018, 18:42
Alles Wesentliche sollte hier zu finden sein: Verständnisfrage zu TFormatSettings
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
5.761 Beiträge
 
Delphi 7 Personal
 
#3

AW: Deutsche Dezimal-Zahl in englisches Format bringen

  Alt 11. Jan 2018, 23:54
Die CSV-Datei erstelle ich aus einen StringGrid (von TMS).
Wenn Du die CSV-Datei erstellst, solltest Du auch das Format im Griff haben.

Besteht nicht auch auf dem SQL-Server, die Möglichkeit, den Feldtrenner zu definieren?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.703 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Deutsche Dezimal-Zahl in englisches Format bringen

  Alt 12. Jan 2018, 05:40
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.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
5.761 Beiträge
 
Delphi 7 Personal
 
#5

AW: Deutsche Dezimal-Zahl in englisches Format bringen

  Alt 12. Jan 2018, 08:41
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.
Ausgerechnet der ist doch Teil von MS-SQL, da wird nicht viel anzupassen sein. Wobei ich es verwunderlich finde, das ausgerechnet er mit " nicht umgehen kann. Der CSV-Import in Access und Excel kann es auf jeden Fall.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.403 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: Deutsche Dezimal-Zahl in englisches Format bringen

  Alt 12. Jan 2018, 09:40
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.
Ralph
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
534 Beiträge
 
Delphi XE5 Professional
 
#7

AW: Deutsche Dezimal-Zahl in englisches Format bringen

  Alt 12. Jan 2018, 10:31
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:
      //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!');
Leider wird bei der Erstellung der CSV-Datei immer noch aus 4.23 "4,23" gemacht. Hat jemand dazu eine Idee?

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
galex9

Registriert seit: 3. Nov 2006
13 Beiträge
 
#8

AW: Deutsche Dezimal-Zahl in englisches Format bringen

  Alt 12. Jan 2018, 10:39
Welche Klasse verbirgt sich unter "SG_Export" ?
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
534 Beiträge
 
Delphi XE5 Professional
 
#9

AW: Deutsche Dezimal-Zahl in englisches Format bringen

  Alt 12. Jan 2018, 10:46
Das ist das StringGrid, welches ich oben in der Procedure als Variable definiere SG_Export: TAdvStringGrid; und dann später zum Leben erwecke SG_Export:= TAdvStringGrid.Create(nil);
Patrick
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
534 Beiträge
 
Delphi XE5 Professional
 
#10

AW: Deutsche Dezimal-Zahl in englisches Format bringen

  Alt 12. Jan 2018, 12:27
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:
   //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!');
Wenn es einen charmanteren Weg gibt, bin ich daran sehr interessiert...

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf