Hallo Sandy, Am Mittwoch, 31. Januar 2007 11:53 schrieb Sandy Drobic:
Rolf-Hubert Pobloth wrote:
Es liegen die Daten einmal als Datei.csv vor, die aus einer ms.doc generiert wurde. Es sind rd. 16 000 Kundenkarten mit insgesammt 470 000 Zeilen. Die CSV-Datei habe ich mit knoda (phpadmin kann so große Dateien nicht verarbeiten) eingelesen und habe nun die TEST Datensatz Feld1 Feld2 Feld3 Feld4 Feld 5 und Feld6 MySQL Datenbank.
Ist das dann auch wirklich eine comma separated value Liste, keine weiteren Komma, die die Feldreihenfolge durcheinanderbringen können?
Okay, hier hast du mich schon abgehängt. Von welcher Datei redest du? Der MySQL-Datenbank, die physikalisch irgendwo liegt, oder von einer bisher nicht erwähnten Quelldatei, wo die Rohdaten im Textformat vorliegen, die jetzt in Datensätze und Felder getrennt und in die SQL-Datenbank importiert werden sollen? Sandy
Nach einer nochmaligen Überprüfung des Sachverhaltes bin ich auf folgenden Lösungsansatz gekommen, den ich leider aus Mangel an Programmierkenntnissen nicht umsetzen kann:
Die DATEN.csv Datei beginnt wie folgt
KUNDENKARTE;;;; also den Text KUNDENKARTE und 5 Semikolons (;) Feldtrenner. Wenn man diese Textdatei nun Satz für Satz lesen würde und beim Auftreten des KUNDENKARTE im selben Satz einen Zählerwert hinten anfügen würde und diese Datensätze (natürlich ALLE) in eine neue Datei schreibt, dann hätte ich das Problem gelöst.
Wieder so ein Schwammausdruck. (^-^) Was heißt "alle" hier. Bitte mal ein PRÄZISE Darstellung des Datensatzes. Das mit einem Shellscript/AWK/Perl zu machen, sollte nur ein paar Minuten dauern, aber das Herausfinden, was genau du brauchst, das scheint eine kleine Geduldaufgabe zu werden. Tschuldigung für diesen unpräziesen Ansatz.
1. Es ist eine Komma-Separierte-Datei, wobei das Trennzeichen der Spalten ein Semikolon ist AAAAA;BBBBB;CCCCC, Läßt sich auch unter MySQL als csv Datei einlesen.
Die Zählervariable wird immer um 1 erhöht und somit entstehen rd. 16000 Zeilen mit einem aufsteigenden Zähler im Datensatz. Kann mir jemand vielleicht einen Shell-Script zur Lösung anbieten?
Nach bisherigem Verständnis würdest du eine Datei mit 16.000 Zeilen erhalten, die am Ende jeweils eine laufende Nummer erhalten. Ist das wirlich dein Ziel? Dann brauchst du die Quelldatei nicht, das kann ein Script auch so generieren. Nein, so sollte es nicht sein.
Der erste Datensatz hat im Feld1 den Wert KUNDENKARTE und nur in diesem Datensatz soll im neuen Feld7 der Wert mit 000001 beginnen. Die nachfolgenden Zeilen werden ebenfalls im Feld7 nit dem Wert 00001 beschrieben(append).Wenn dann der Datensatz 80 im Feld 1 den Wert KUNDENKARTE hat, soll der Zähler 000002 in das Feld7geschrieben werden bis der nächste Datensatz im Feld1 sich auf KUNDENKARTE ändert.. Quelle: Datei.csv KUNDENKARTE;;; (Feld2 bis Feld 6 sind IMMER leer) Textzeile Textzeile und dann z.B bei Zeile 80 kommt wieder KUNDENKARTE;;;;;; Ziel: Datei1.csv KUNDENKARTE;;;;;00001 Textzeile 2 - 79 haben im Feld7 ebenfalls den Zählerwert 00001 KUNDENKARTE;;;;;00002 Textzeile 81 - 133 haben im Feld7 ebenfalls den Zählerwert 00002 usw bis zum Ende der Dateien Nach dieser Satzverlängerung in der Zieldatei.csv kann ich diese dann mit MySQL in die Datenbank einlesen. In der Datenbank sind dann im Feld 7 alle zusammen gehörenden Datensätze (KUNDENKARTE) mit einer eindeutigen Zahl im Feld7 gekennzeichnet. Hoffentlich habe ich des Problem nun verständlicher beschrieben.
Beispiel Input-Datei KUNDENKARTE ; ; ; ; ; (CR-LF) Output-Datei KUNDENKARTE ; ; ; ; ; 0000001 (CR-LF)
Dieses müsste doch mit einem kleine Bash-Programm zu lösen sein?
Bash/AWK/Perl, sind nur ein paar Zeilen. Das scheint mir auch am sinnvollsten zu sein ehe ich irgendwelche Verrenkungen bei MySQL mache. Die Dateien sind ja auch nicht gerade klein. Sandy
Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com
Vielen Dank für die bisherige Hilfe Rolf-Hubert -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org