Das deutsche Zahlenformat
Das deutsche Zahlenformat
am 31.07.2006 11:10:04 von bartez2004-apoll
Hallo,
da ich mich schon seit Stunden damit erfolglos rumschlage, poste ich
mein Problem mal:
Ich versuche einfach nur eine CSV-Datei zu importieren. In ihr sind die
Zahlen folgendermaßen sortiert: 1.000,00
Gibt es Möglichkeit beim Import das Komma als Dezimaltrennzeichen
durch einen Punkt zu ersetzen?
Re: Das deutsche Zahlenformat
am 31.07.2006 11:13:35 von Christian Kirsch
Oscar76 schrieb:
> Hallo,
>
> da ich mich schon seit Stunden damit erfolglos rumschlage, poste ich
> mein Problem mal:
>
> Ich versuche einfach nur eine CSV-Datei zu importieren. In ihr sind die
> Zahlen folgendermaßen sortiert: 1.000,00
> Gibt es Möglichkeit beim Import das Komma als Dezimaltrennzeichen
> durch einen Punkt zu ersetzen?
>
Du könntest sed benutzen. Oder die Zahlen so exportieren, wie MySQL
sie erwartet.
Und leg Dir bitte einen Realnamen zu - oder haben Deine Eltern Dich
Oscar76 getauft?
Re: Das deutsche Zahlenformat
am 31.07.2006 11:17:56 von bartez2004-apoll
Hallo Christian,
kannst du mir sagen was sed ist?
Re: Das deutsche Zahlenformat
am 31.07.2006 11:36:39 von Andreas Kretschmer
Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)
Re: Das deutsche Zahlenformat
am 31.07.2006 11:44:43 von bartez2004-apoll
Hallo,
das war nicht mit Absicht gemeint. Ich habe meinen Namen in den
Einstellungen geändert. Wahrscheinlich an der falschen Stelle. Ich
arbeite nocht nicht lange mit GoogleGroups. Ich bitte um Entschuldigung
falls ich den Ansprüchen nicht gerecht wurde.
Ich habe mir sed gerade gedownloadtet. Gibt es eine spezielle Syntax um
meine Datei zu konvertieren unter DOS?
Re: Das deutsche Zahlenformat
am 31.07.2006 11:48:52 von Christian Kirsch
Chris Schneider schrieb:
> Hallo,
>
> das war nicht mit Absicht gemeint. Ich habe meinen Namen in den
> Einstellungen geändert. Wahrscheinlich an der falschen Stelle. Ich
> arbeite nocht nicht lange mit GoogleGroups. Ich bitte um Entschuldigung
> falls ich den Ansprüchen nicht gerecht wurde.
> Ich habe mir sed gerade gedownloadtet. Gibt es eine spezielle Syntax um
> meine Datei zu konvertieren unter DOS?
>
Unter Unix geht das so:
sed -e 's/\./,/g' < datei-rein > datei-raus
Unter DOS sollte es analog funktionieren. Damit ersetzt Du Punkte (\.)
durch Kommata (,), allerdings überall (also wird aus "Dr. Müller" dann
"Dr, Müller"). Etwas spezifischer geht es so:
sed -e 's/\([0-9]\)\.\([0-9]\)/\1,\2/g'
(ungetestet). Das ersetzt jeden Punkt (\.) zwischen zwei Ziffern
([0-9]...[0-9]) durch die erste Ziffer (\1), ein Komma (,) und die
zweite Ziffer (\2).
Re: Das deutsche Zahlenformat
am 31.07.2006 12:42:26 von bartez2004-apoll
Vielen dank für die schnellen Antworten.
Re: Das deutsche Zahlenformat
am 31.07.2006 13:14:04 von bartez2004-apoll
Christian Kirsch schrieb:
>
> Unter Unix geht das so:
> sed -e 's/\./,/g' < datei-rein > datei-raus
>
> Unter DOS sollte es analog funktionieren. Damit ersetzt Du Punkte (\.)
> durch Kommata (,), allerdings überall (also wird aus "Dr. Müller" dann
> "Dr, Müller"). Etwas spezifischer geht es so:
> sed -e 's/\([0-9]\)\.\([0-9]\)/\1,\2/g'
> (ungetestet). Das ersetzt jeden Punkt (\.) zwischen zwei Ziffern
> ([0-9]...[0-9]) durch die erste Ziffer (\1), ein Komma (,) und die
> zweite Ziffer (\2).
Hmm,
bist du dir sicher? Wenn ich folgendes eingebe funktioniert es: sed -e
's/\([0-9]\)\,\([0-9]\)/\1.\2/g'
Allerdings wird aus dem Tausender-Punkt auch ein Komma. Wenn ich dies
in eine mysql-Tabelle lade, stimmen die Zahlen nicht.
Re: Das deutsche Zahlenformat
am 31.07.2006 13:34:32 von Andreas Kretschmer
Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)
Re: Das deutsche Zahlenformat
am 31.07.2006 13:39:16 von Thomas Rachel
Chris Schneider wrote:
> bist du dir sicher? Wenn ich folgendes eingebe funktioniert es: sed -e
> 's/\([0-9]\)\,\([0-9]\)/\1.\2/g'
> Allerdings wird aus dem Tausender-Punkt auch ein Komma.
Naja, den muÃt Du dann vorher halt entfernen...
Thomas
Re: Das deutsche Zahlenformat
am 01.08.2006 07:58:21 von bartez2004-apoll
Andreas Kretschmer schrieb:
> begin Chris Schneider wrote:
> >> Unter DOS sollte es analog funktionieren. Damit ersetzt Du Punkte (\.)
> >> durch Kommata (,), allerdings überall (also wird aus "Dr. Müller" =
dann
> >> "Dr, Müller"). Etwas spezifischer geht es so:
> >> sed -e 's/\([0-9]\)\.\([0-9]\)/\1,\2/g'
> >> (ungetestet). Das ersetzt jeden Punkt (\.) zwischen zwei Ziffern
> >> ([0-9]...[0-9]) durch die erste Ziffer (\1), ein Komma (,) und die
> >> zweite Ziffer (\2).
>
> > Hmm,
>
> > bist du dir sicher? Wenn ich folgendes eingebe funktioniert es: sed -e
> > 's/\([0-9]\)\,\([0-9]\)/\1.\2/g'
>
> Christians Beispiel funktioniert IMHO wie von ihm beschrieben. Du
> solltest nicht erwarten, daß jedes Beispiel dieser Welt auf Deinen
> konkreten Fall paßt.
>
>
> > Allerdings wird aus dem Tausender-Punkt auch ein Komma. Wenn ich dies
> > in eine mysql-Tabelle lade, stimmen die Zahlen nicht.
>
> Gut beobachtet. Zur Übung liest Du Dir nun ein Kapitel zu REGEX durch,
> was Du sehr leicht via Google finden wirst. Hint: Du willst zuerst
> einmal in der Zahl den Punkt durch nichts ersetzen.
>
>
>
> end
> Andreas
> --
> q: why do so many people take an instant dislike to mysql?
> a: it saves time (oicu in #postgresql)
> Explaining the concept of referential integrity to a mysql user is like
> explaining condoms to a catholic (Shadda in #postgresql)
Boahh. Jetzt raucht mein Kopf. Werd mal versuchen , mir einen Kaffee
ohne komplizierte Beschreibung zu machen. ;-)
Am besten wirds wohl sein, wenn ich die Datei vorher mit OO-Calc
bearbeite, bevor ich sie in mysql ziehe.
Re: Das deutsche Zahlenformat
am 01.08.2006 13:43:00 von Carsten Wiedmann
Oscar76 schrieb:
> Ich versuche einfach nur eine CSV-Datei zu importieren. In ihr sind die
> Zahlen folgendermaßen sortiert: 1.000,00
> Gibt es Möglichkeit beim Import das Komma als Dezimaltrennzeichen
> durch einen Punkt zu ersetzen?
Nurmal eine Frage:
In was für eine Version von MySQL willst du das Importieren?
BTW:
Wie sieht denn so ein Beispieldatnsatz im CSV genau aus?
Gruß
Carsten
Re: Das deutsche Zahlenformat
am 01.08.2006 14:10:27 von bartez2004-apoll
Carsten Wiedmann schrieb:
> Oscar76 schrieb:
>
> > Ich versuche einfach nur eine CSV-Datei zu importieren. In ihr sind die
> > Zahlen folgendermaßen sortiert: 1.000,00
> > Gibt es Möglichkeit beim Import das Komma als Dezimaltrennzeichen
> > durch einen Punkt zu ersetzen?
>
> Nurmal eine Frage:
> In was für eine Version von MySQL willst du das Importieren?
>
> BTW:
> Wie sieht denn so ein Beispieldatnsatz im CSV genau aus?
>=20
> Gruß
> Carsten
Also ich nutze mysql 4.0.22-nt.
Re: Das deutsche Zahlenformat
am 01.08.2006 16:00:53 von Carsten Wiedmann
Chris Schneider schrieb:
> > Nurmal eine Frage:
> > In was für eine Version von MySQL willst du das Importieren?
> >
> Also ich nutze mysql 4.0.22-nt.
Schad. Mit einer aktuellen Version hättest du dir den Umweg über sed o.ä.
sparen können.
> > Wie sieht denn so ein Beispieldatnsatz im CSV genau aus?
Da das hier jetzt keiner kennt, kann man natürlich nur ein Prinzip nennen
und keine genaue Lösung. Die Lösung von Christian funktioniert aber
einwandfrei:
Zuerst nehmen wir eine CSV-Datei
| >type in.csv
| 1;"Carsten";1.024,24
| 2;"Wiedmann";224,11
Bei der Zahlen muss man also erstes einen Punkt zwischen zwei Ziffern durch
"nichts" ersetzen:
"s/\([0-9]\)\.\([0-9]\)/\1\2/g"
und dann ein Komma zwischen zwei Ziffern durch einen Punkt ersetzen:
"s/\([0-9]\)\,\([0-9]\)/\1.\2/g"
Ergibt:
| >sed -e "s/\([0-9]\)\.\([0-9]\)/\1\2/g" -e
"s/\([0-9]\)\,\([0-9]\)/\1.\2/g" in.csv
| 1;"Carsten";1024.24
| 2;"Wiedmann";224.11
Wenn du da jetzt noch ein " >out.csv" hinten dran hängst, bekommst du es
nicht nur angezeigt, sondern in eine extra Datei (out.csv) gespeichert. Wenn
du statt dessen als ersten Parameter "-i" benutzt, änderst du dirkt die
Eingabedatei (in.csv).
Gruß
Carsten
Re: Das deutsche Zahlenformat
am 02.08.2006 10:03:38 von bartez2004-apoll
Hallo Carsten
>
> Schad. Mit einer aktuellen Version hättest du dir den Umweg über sed =
o.ä.
> sparen können.
>
Kann ich etwa in mysql 5 zahlen mit Komma als Dezimaltrennzeichen
importieren?
>
> > > Wie sieht denn so ein Beispieldatensatz im CSV genau aus?
>
Habe ich vergessen. Sorry. So wie unten sieht es in etwa aus.
>Die Lösung von Christian funktioniert aber einwandfrei:
>
> Zuerst nehmen wir eine CSV-Datei
> | >type in.csv
> | 1;"Carsten";1.024,24
> | 2;"Wiedmann";224,11
>
> Bei der Zahlen muss man also erstes einen Punkt zwischen zwei Ziffern dur=
ch
> "nichts" ersetzen:
> "s/\([0-9]\)\.\([0-9]\)/\1\2/g"
> und dann ein Komma zwischen zwei Ziffern durch einen Punkt ersetzen:
> "s/\([0-9]\)\,\([0-9]\)/\1.\2/g"
>
> Ergibt:
> | >sed -e "s/\([0-9]\)\.\([0-9]\)/\1\2/g" -e
> "s/\([0-9]\)\,\([0-9]\)/\1.\2/g" in.csv
> | 1;"Carsten";1024.24
> | 2;"Wiedmann";224.11
>
> Wenn du da jetzt noch ein " >out.csv" hinten dran hängst, bekommst du es
> nicht nur angezeigt, sondern in eine extra Datei (out.csv) gespeichert. W=
enn
> du statt dessen als ersten Parameter "-i" benutzt, änderst du dirkt die
> Eingabedatei (in.csv).
>=20
> Gruß
> Carsten
Super. Jetzt klappt es einwandfrei. Vielen Dank.
Re: Das deutsche Zahlenformat
am 02.08.2006 15:22:04 von Carsten Wiedmann
Chris Schneider schrieb:
> > Schad. Mit einer aktuellen Version hättest du dir den Umweg über sed
> > o.ä.
> > sparen können.
>
> Kann ich etwa in mysql 5 zahlen mit Komma als Dezimaltrennzeichen
> importieren?
Direkt erkennt MySQL das dort auch nicht. Aber das was sed macht, kannst du
dort recht einfach beim Import erledigen.
> > Zuerst nehmen wir eine CSV-Datei
> > | type in.csv
> > | 1;"Carsten";1.024,24
> > | 2;"Wiedmann";224,11
Mit dem Beispiel CSV im Konsolenclient ausgeführt:
| USE `foo`;
| LOAD DATA LOCAL INFILE 'in.csv'
| INTO TABLE `bar`
| FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
| LINES TERMINATED BY '\r\n'
| (`id`, `name`, @var1)
| SET `zahl` = REPLACE(REPLACE(@var1, '.', ''), ',', '.');
Die letzte Zeile ist dann das, was vorher sed machte. Hat hier dann zudem
den Vorteil, dass es sich auch wirklich nur auf die Spalte `zahl` auswirkt.
(Siehe unten)
> > | sed -e "s/\([0-9]\)\.\([0-9]\)/\1\2/g" -e
> > "s/\([0-9]\)\,\([0-9]\)/\1.\2/g" in.csv
> > | 1;"Carsten";1024.24
> > | 2;"Wiedmann";224.11
>
> Super. Jetzt klappt es einwandfrei. Vielen Dank.
Kein Problem. Wie oben schon angedeutet, musst halt bei dieser einfachen
REGEX auf eines Aufpassen:
Die Erzetzungen passieren hier immer im ganzen Datensatz und nicht nur in
einem Feld. Je nach Inhalt der übrigen Felder, könnest du so natürlich auch
was verändern, dass du gar nicht willst.
Gruß
Carsten
Re: Das deutsche Zahlenformat
am 02.08.2006 16:49:15 von unknown
Post removed (X-No-Archive: yes)
Re: Das deutsche Zahlenformat
am 02.08.2006 18:33:12 von Carsten Wiedmann
Robert Eckl schrieb:
> Am Tue, 1 Aug 2006 16:00:53 +0200 schrieb Carsten Wiedmann:
>
> > Chris Schneider schrieb:
> >
> > > > Nurmal eine Frage:
> > > > In was für eine Version von MySQL willst du das Importieren?
> > > >
> > > Also ich nutze mysql 4.0.22-nt.
> >
> > Schad. Mit einer aktuellen Version hättest du dir den Umweg über sed
> > o.ä. sparen können.
> >
> Jetzt hast Du mich neugierig gemacht.
> Wie geht das mit 5.0.22 oder 5.1.11?
> Hab mir zwar mit sed beholfen (auch Datum mußten angepaßt werden), aber
> eine Alternative zu sed hab ich bislang nicht gefunden.
Eine kurze Frage. ca. eine 3/4h vor deinem Post habe ich Chris in [1]
nochmal geantwortet. Beantwortet das dort grundsätzlich deine Frage?
Gruß
Carsten
[1] <44d0a78e$0$24889$9b4e6d93@newsread4.arcor-online.net>
Re: Das deutsche Zahlenformat
am 02.08.2006 18:48:07 von unknown
Post removed (X-No-Archive: yes)
Re: Das deutsche Zahlenformat
am 03.08.2006 08:08:16 von bartez2004-apoll
Carsten Wiedmann schrieb:
> Mit dem Beispiel CSV im Konsolenclient ausgeführt:
> | USE `foo`;
> | LOAD DATA LOCAL INFILE 'in.csv'
> | INTO TABLE `bar`
> | FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
> | LINES TERMINATED BY '\r\n'
> | (`id`, `name`, @var1)
> | SET `zahl` =3D REPLACE(REPLACE(@var1, '.', ''), ',', '.');
Hallo,
mal wieder eine ganz doofe frage von mir: Was ist "@var1" ?. Ist das
ein Spaltenname?
Re: Das deutsche Zahlenformat
am 03.08.2006 08:25:33 von Thomas Rachel
Chris Schneider wrote:
[...]
>> | LINES TERMINATED BY '\r\n'
>> | (`id`, `name`, @var1)
>> | SET `zahl` = REPLACE(REPLACE(@var1, '.', ''), ',', '.');
>
>
> Hallo,
>
> mal wieder eine ganz doofe frage von mir: Was ist "@var1" ?. Ist das
> ein Spaltenname?
Ohne jetzt im HANDBUCH[1] nachgesehen zu haben, einfach nur aus obigem
erraten: ich vermute, daà in den Klammern die Ziele für die Daten aus der
Datei stehen (entweder Spalten einer Tabelle oder VARIABLEN) und hinter dem
SET dann Anweisungen für weitere Spalten, die sich aus VARIABLEN herleiten.
BTW: Auch vor 5.x kann man auf sed verzichten. Entweder lädt man das Zeugs
in eine temporäre Tabelle und führt dann bei der Ãberführung der Daten in
die permanente Tabelle obiges REPLACE durch, oder man spendiert der
permanenten Tabelle übergangsweise eine zusätzliche Spalte, die man dann
ansschlieÃend modifiziert.
HTH,
Thomas
[1] das ist das Ding, auf welches in dieser Newsgroup so oft hingewiesen
wird. Es sollte somit leicht zu finden sein.
--
Der Begriff »Pessimismus« wird von Optimisten verwendet, um jene Leute zu
diskreditieren, die die Welt so sehen, wie sie wirklich ist.
[Luton in Discworld Noir]