Hallo Liste, wie bekomme ich Gleitkommzahlen (z.B. 2,45) z.B. aus einer csv-Datei in eine MySQL-DB (Field z.B. Float(10,2)) ohne PHP oder Perl zur Formatierung zu benutzen? Gruß Boris
Hi!
wie bekomme ich Gleitkommzahlen (z.B. 2,45) z.B. aus einer csv-Datei in eine MySQL-DB (Field z.B. Float(10,2)) ohne PHP oder Perl zur Formatierung zu benutzen?
Was funktioniert denn nicht - wie kommen die Zahlen an? Und auf welchem Weg kommen die Daten in die Datenbank? Wird dafür PHP oder Perl verwendet? Bye -- 1 Bodo Kaelberer 123 http://www.webkind.de/ http://www.kaelberer-aio.de/ 3 Dem Verständnis ist meist gut getan, wenn man richtig lesen 4 kann.
Hallo, Bodo Kaelberer schrieb:
wie bekomme ich Gleitkommzahlen (z.B. 2,45) z.B. aus einer csv-Datei in eine MySQL-DB (Field z.B. Float(10,2)) ohne PHP oder Perl zur Formatierung zu benutzen?
Was funktioniert denn nicht - wie kommen die Zahlen an? Und auf welchem Weg kommen die Daten in die Datenbank? Wird dafür PHP oder Perl verwendet?
Die Zahlen werden nach der Kommastelle abgeschnitten, z.B. aus 2,45 wird 2.00 und das ist eben nicht gefragt. Ich nutze direkt den MySQL-Client auf der Konsole und nicht Perl oder PHP. Das soll auch nach Möglichkeit so bleiben. Gruß Boris
Hi
Die Zahlen werden nach der Kommastelle abgeschnitten, z.B. aus 2,45 wird 2.00 und das ist eben nicht gefragt. Ich nutze direkt den MySQL-Client auf der Konsole und nicht Perl oder PHP.
Trennst Du mit , oder ;? Sind die Zahlen in Anführungszeichen? Bye -- 1 Bodo Kaelberer 123 http://www.webkind.de/ http://www.kaelberer-aio.de/ 3 Dem Verständnis ist meist gut getan, wenn man richtig lesen 4 kann.
Bodo Kaelberer schrieb:
Hi
Die Zahlen werden nach der Kommastelle abgeschnitten, z.B. aus 2,45 wird 2.00 und das ist eben nicht gefragt. Ich nutze direkt den MySQL-Client auf der Konsole und nicht Perl oder PHP.
Trennst Du mit , oder ;? Sind die Zahlen in Anführungszeichen?
Eine Zeile im File sieht etwa so aus: "2345","Das ist ein Text","2,45","bla"
Hallo Boris, hallo Leute, Am Donnerstag, 3. November 2005 14:05 schrieb Boris Höffgen:
Bodo Kaelberer schrieb:
Die Zahlen werden nach der Kommastelle abgeschnitten, z.B. aus 2,45 wird 2.00 und das ist eben nicht gefragt. Ich nutze direkt den MySQL-Client auf der Konsole und nicht Perl oder PHP.
Trennst Du mit , oder ;? Sind die Zahlen in Anführungszeichen?
Eine Zeile im File sieht etwa so aus: "2345","Das ist ein Text","2,45","bla"
Für Ersetzungen in Textdatei schlage ich üblicherweise sed vor - so auch, um das Komma bei "2,45" durch einen Punkt zu ersetzen - aber in diesem Fall (Komma auch als Feldtrenner) dürfte die RegEx reichlich kompliziert ausfallen. Naja, sei's drum, ungetestet: sed 's/^\("[^"]*","[^"]*","[^"]*\)\.\([^"]*","[^"]*"\)/\1.\2/' Die einfachere Lösung ist wohl, die Datei in OpenOffice aufzumachen (CSV-Import) und per "alle ersetzen" die Kommas durch Punkte zu ersetzen. Gruß Christian Boltz -- "Wirklich praxisnah wären Münzen zu EUR 0,99." [Wolfgang Schwanke in de.etc.sprache.deutsch]
Christian Boltz wrote:
Hallo Boris, hallo Leute,
Am Donnerstag, 3. November 2005 14:05 schrieb Boris Höffgen:
Bodo Kaelberer schrieb:
Die Zahlen werden nach der Kommastelle abgeschnitten, z.B. aus 2,45 wird 2.00 und das ist eben nicht gefragt. Ich nutze direkt den MySQL-Client auf der Konsole und nicht Perl oder PHP.
Trennst Du mit , oder ;? Sind die Zahlen in Anführungszeichen?
Eine Zeile im File sieht etwa so aus: "2345","Das ist ein Text","2,45","bla"
Für Ersetzungen in Textdatei schlage ich üblicherweise sed vor - so auch, um das Komma bei "2,45" durch einen Punkt zu ersetzen - aber in diesem Fall (Komma auch als Feldtrenner) dürfte die RegEx reichlich kompliziert ausfallen. Naja, sei's drum, ungetestet: sed 's/^\("[^"]*","[^"]*","[^"]*\)\.\([^"]*","[^"]*"\)/\1.\2/'
Stimmt, mit sed müsste es klappen. Das Obige funktioniert leider nicht, aber ich suche nach dem Fehler.
Die einfachere Lösung ist wohl, die Datei in OpenOffice aufzumachen (CSV-Import) und per "alle ersetzen" die Kommas durch Punkte zu ersetzen.
Hatte ich versucht, nur ist das File zu groß. Sind ca. 1E6 Einträge. Gruß Boris
Hallo, Am Fri, 04 Nov 2005, Boris Höffgen schrieb:
Christian Boltz wrote:
Am Donnerstag, 3. November 2005 14:05 schrieb Boris Höffgen:
Eine Zeile im File sieht etwa so aus: "2345","Das ist ein Text","2,45","bla"
Für Ersetzungen in Textdatei schlage ich üblicherweise sed vor - so auch, um das Komma bei "2,45" durch einen Punkt zu ersetzen - aber in diesem Fall (Komma auch als Feldtrenner) dürfte die RegEx reichlich kompliziert ausfallen. Naja, sei's drum, ungetestet: sed 's/^\("[^"]*","[^"]*","[^"]*\)\.\([^"]*","[^"]*"\)/\1.\2/'
Stimmt, mit sed müsste es klappen. Das Obige funktioniert leider nicht, aber ich suche nach dem Fehler.
Teste mal: awk -F'","' 'BEGIN{ OFS="\",\""; } { sub(/,/,".",$3); print; }' Zumindest mit obiger Zeile klappt das. -dnh -- Alternatively one can apply the knowledge painfully gained over decades of configuring SCSI chains, although you do get some funny looks if your family and friends catch you dragging a black goat into the shower cubicle with you, white-handled knife firmly clenched between your teeth. -- R. Sneddon
Hallo Boris, hallo Leute, Am Freitag, 4. November 2005 08:11 schrieb Boris Höffgen:
Christian Boltz wrote:
Am Donnerstag, 3. November 2005 14:05 schrieb Boris Höffgen: [...]
Eine Zeile im File sieht etwa so aus: "2345","Das ist ein Text","2,45","bla"
Für Ersetzungen in Textdatei schlage ich üblicherweise sed vor - so auch, um das Komma bei "2,45" durch einen Punkt zu ersetzen - aber in diesem Fall (Komma auch als Feldtrenner) dürfte die RegEx reichlich kompliziert ausfallen. Naja, sei's drum, ungetestet: sed 's/^\("[^"]*","[^"]*","[^"]*\)\.\([^"]*","[^"]*"\)/\1.\2/'
Stimmt, mit sed müsste es klappen. Das Obige funktioniert leider nicht, aber ich suche nach dem Fehler.
Der hat mich dann auch interessiert - Ursache war ein dämlicher Denkfehler ;-) Meine RegEx ist soweit OK, nur dass ich eben im Suchausdruck schon nach dem Punkt gesucht hatte :-/ Gefixte Version: # echo '"2345","Das ist ein Text","2,45","bla"' | \ sed 's/^\("[^"]*","[^"]*","[^"]*\),\([^"]*","[^"]*"\)/\1.\2/' "2345","Das ist ein Text","2.45","bla" Teste das aber bitte nochmal mit ein paar mehr Datensätzen. (Falls eine der Spalten selbst Anführungszeichen enthalten kann, wird es allerdings richtig lustig...) Gruß Christian Boltz --
Hilft vielleicht noch etwas anderes? Eine genaue Fehlerbeschreibung. (Glaskugel oder Karten versagen bei technischen Problemen immer, daher packe ich die auch nicht aus). [Helga Fischer in suse-linux]
Hahoi
Teste das aber bitte nochmal mit ein paar mehr Datensätzen. (Falls eine der Spalten selbst Anführungszeichen enthalten kann, wird es allerdings richtig lustig...)
Anführungszeichen in Werten werden in CSV durch voranstellen eines Anführungszeichen escaped (also "" statt "). Kann man sicher noch raussuchen. Ich denke aber, es wäre einfacher, ein kleines Script zu machen, welches die Daten parst (z.B. PHP hat eine Funktion zum Parsen von CSV-Daten) und dann konvertiert wieder ausspuckt. GutNacht -- 1 Bodo Kaelberer 123 http://www.webkind.de/ http://www.kaelberer-aio.de/ 3 Dem Verständnis ist meist gut getan, wenn man richtig lesen 4 kann.
On Thursday 03 November 2005 12:16, Boris Höffgen wrote:
Die Zahlen werden nach der Kommastelle abgeschnitten, z.B. aus 2,45 wird 2.00 und das ist eben nicht gefragt.
Kann es sein, daß du LANG nicht auf de_DE (oder so) stehen hast oder
LC_NUMERIC explizit auf "C" oder "en_US"? Danach richtet sich nämlich das
Dezialtrennzeichen in der GLibC, also in praktisch allen Programmen unter
Linux.
Schau doch mal, was
locale
so ausgibt.
CU
--
Stefan Hundhammer
Stefan Hundhammer schrieb:
On Thursday 03 November 2005 12:16, Boris Höffgen wrote:
Die Zahlen werden nach der Kommastelle abgeschnitten, z.B. aus 2,45 wird 2.00 und das ist eben nicht gefragt.
Kann es sein, daß du LANG nicht auf de_DE (oder so) stehen hast oder LC_NUMERIC explizit auf "C" oder "en_US"? Danach richtet sich nämlich das Dezialtrennzeichen in der GLibC, also in praktisch allen Programmen unter Linux.
Schau doch mal, was
locale
so ausgibt.
Steht alles auf de_DE. Ich denke es liegt daran, dass der MySQL-Client nur Gleitkommazahlen erkennt, die einen Punkt enthalten. Mit Kommazahlen (2,45) kann er nichts anfangen. Gruß Boris
Moin, ungetestet: Kann man das Feld vielleicht erst mal als Text deklarieren, alles importieren, dann in MySQL das "," durch "." ersetzen und anschliessend den Feldtyp von Text auf Zahl ändern? Gruß, Ratti -- -o) fontlinge | Fontmanagement for Linux | Schriftenverwaltung in Linux /\\ http://freshmeat.net/projects/fontlinge/ _\_V http://www.gesindel.de https://sourceforge.net/projects/fontlinge/
participants (6)
-
Bodo Kaelberer
-
Boris Höffgen
-
Christian Boltz
-
David Haller
-
Joerg Rossdeutscher
-
Stefan Hundhammer