n'Abend Pit,
ich habe zwar bisher nicht Sachliches beigetragen, aber jetzt mische ich mich doch noch als stellenweise genervter Mitleser ein. Genervt, weil ich auch den Eindruck hatte, dass du mit Informationen nur häppchenweise um die Ecke kommst, anstatt gleich die Karten auf den Tisch zu legen. Als jemand, der gewillt ist, das Thema anzupacken und zu helfen, fühlt man sich dann ausgenutzt oder veräppelt.
Die Datei ist wie folgt aufgebaut:
Feld1|Feld2|Feld3|Feld4|Feld5
Feld1|Feld2|Feld3|Feld4|Feld5
Feld1|Feld2|Feld3|Feld4|Feld5
Feld1|Feld2|Feld3|Feld4|Feld5
Feld1|Feld2|Feld3|Feld4|Feld5
...
Nein, das ist sie offensichtlich nicht.
Doch, genau davon bin ich ausgegangen als ich das Post schrieb.
Nach einigen Dateien aber kam mir eine Datei unter, die inmitten eines feldes eines csv-Satzes einen zeilenumbruch hatte.
Daher also die Idee, die Zahl der Delimiter (also eigentlich die Zahl der Felder pro Datensatz) zu zählen und zu überprüfen. Ein kleiner Nebensatz an der passenden Stelle, der uns sagt, dass das eine neue Erkenntnis ist, wäre völlig ausreichend gewesen. So aber wirkt es, als hättest du das von Anfang an gewusst, aber "vergessen" zu erwähnen.
Abgesehen davon: Eine CSV-Datei, die an unpassender Stelle einen Zeilenumbruch hat, würde ich als ungültig abweisen.
Erst dann kam ich auf die Idee, je Zeile die Anzahl der Delimiter zu zählen. Es ging also danach um einen Ausbau der vorhandenen Lösung, die prinzipiell gut funktionierte.
Angenommen, du holst Zeile für Zeile mit fgetcsv(), dann erledigt diese Funktion das Zählen für dich. Und wenn in der Datei auch nur eine Zeile vorkommt, die zu viele oder zu wenige Felder hat - Fehler beim Import, Eingabedatei ungültig!
Das, was Du uns als Vorgabe nennst, trifft in Wirklichkeit auf Dein Problem nicht zu.
Will heißen: Du sagst, du müsstest CSV-Dateien in eine Datenbank importieren. Die CSV-Dateien seien nicht immer ganz "sauber", deshalb muss deine Import-Funktion eine gewisse Fehlertoleranz haben.
Gut, akzeptiert. Aber dann kommst du mit der Neuigkeit raus, du selbst würdest die CSV-Dateien aus Excel generieren. Ja mei, dann hast du das Ergebnis doch auch selbst in der Hand und brauchst nicht am Ende nachzubessern, sondern kannst es gleich am Anfang richtig machen.
Was bemängelst Du?
Das eine csv-Datei nur 5 Spalten hat, eine andere aber 10?
Nein. Verschiedene Tabellen haben eine unterschidliche Anzahl von Spalten. Aber eine Import-Tabelle (Excel, CSV), die für einen bestimmten Zweck gedacht ist, muss eine bestimmte, vorgegebene Struktur haben. Dazu gehört nicht nur die Anzahl der Felder, sondern auch deren Typ (z.B. Zahl, Datum, Text). Diese Struktur ist von der Anwendung vorgegeben, für die die Daten gedacht sind. Passt da beim Import etwas nicht - Fehler beim Import, Eingabedatei ungültig!
Und das ich im DB-Import alles nach Spalte 5 der csv in die db-Spalte namens "Bemerkungen" eintrage?
Das ist ein ungewöhnliches Vorgehen. Das bedeutet, deine CSV-Datei kann 6 oder mehr Felder haben, und die Werte der Felder 6..n landen alle zusammen in einer Spalte in der DB?
Wenn wir Dir wirklich unter die Arme greifen sollen, müsstest Du uns reinen Wein einschenken.
Reinen Wein? Übertreibst Du nicht ein bißchen? 😉
Ja, Felix übertreibt vielleicht ein bisschen. Aber nicht viel.
Nochmal: Auf die Anzahl der Spalten der csv habe ich gar keinen Einfluß.
Aber sicher doch! Wenn du sie aus einer Excel-Tabelle erzeugst, bist du der Einzige, der einen Einfluss darauf hat.
Solltest Du wirklich Hilfe wollen, dann sei ehrlich und nenne alle(!) wesentlichen Fakten. Ansonsten beutest Du unsere Hilfsbereitschaft in einer Weise aus, die unredlich ist.
Schade, dass sich (für Dich) Dinge anscheinend nicht entwickeln können/dürfen/sollen. Oder aber, dass man ggf. etwas vergisst, zu einem bestimmten Zeitpunkt nicht oder noch nicht weiß oder auch Fehler bei der Fragestellung macht.
Das ist völlig okay, solange nicht der Eindruck entsteht, das sei schon immer so gewesen und du hättest es bloß nicht erwähnt.
Übrigens hätte ich noch einen ganz anderen möglichen Ansatz: Wenn die Daten aus einer Excel-Tabelle kommen, bietet es sich doch an, sie direkt in Excel passend aufzubereiten und von da direkt in die DB zu schreiben. AFAIK hat Excel einen SQL-Client integriert (im Detail wahrscheinlich MSSQL, es wäre zu prüfen, ob MySQL auch geht), und VBA ist auch kein Hexenwerk.
Ciao,
Martin
--
Ich stamme aus Ironien, einem Land am sarkastischen Ozean.