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]