Ich speichere eine Excel Tabelle als CSV (UTF - 8 Trennzeichen).
Soll eine Sprachdatenbank werden. Also mit Kanji-Zeichen etc..
Beim Anlegen meiner DB habe ich mit der Matrix-Formel "{=MAX(LÄNGE(Spalte:Spalte))}" zunächst einmal die größten Einträge der jeweiligen Spalten ermittelt.
Ich lege beim Import eine Spalte mit Guids an und "update" diese Einträge dann Spalte für Spalte. Nun habe ich das Problem, dass eine Spalte (größter Eintrag acht Zeichen lang, laut Formel) mir diesen Fehler zurück gibt "com.microsoft.sqlserver.jdbc.SQLServerException: Zeichenfolgen- oder Binärdaten würden abgeschnitten".
Ich Trage die Werte, der Spalte, in ein "nvarchar(20)" DB Feld ein. Das sollte theoretisch passen.
Wenn ich die DB in dieser Spalte nach NULL - Einträgen filtere und die IDs der Einträge dann in meiner CSV suche, finde ich jedes mal eine Leere Zelle vor (von der Spalte an der scheitere).
Hat jemand eine Idee wie das zu Stande kommen kann?
PS: Die Tabelle ist ziemlich groß und ich bekomme manchmal einen Arbeitsspeicher-Fehler wenn ich die Matrixformel auf zu große Spalten anwende.
Und letzteres macht jedes übliche Programm (zumindest hab ich bisher noch nichts gegenteiliges gesehen)
War das bei deiner Ursprungs-CSV nicht der Fall? Dann würde ich das mal als Bug melden. Excel zB macht das automatisch beim Speichern, eine invalide CSV-Datei hab ich da bisher noch nicht rausbekommen.
Und letzteres macht jedes übliche Programm (zumindest hab ich bisher noch nichts gegenteiliges gesehen)
War das bei deiner Ursprungs-CSV nicht der Fall? Dann würde ich das mal als Bug melden. Excel zB macht das automatisch beim Speichern, eine invalide CSV-Datei hab ich da bisher noch nicht rausbekommen.
Man hat die Möglichkeit in Excel ein Makro aufzunehmen. Sprich man startet den Rekorder und Excel erstellt ein Makro aus den Funktionen, die man ausführt.
Dieses Makro habe ich dann nur noch anpassen müssen.
Man hat die Möglichkeit in Excel ein Makro aufzunehmen. Sprich man startet den Rekorder und Excel erstellt ein Makro aus den Funktionen, die man ausführt.
Dieses Makro habe ich dann nur noch anpassen müssen.
Achso.. Das ist jetzt auch schon etwas her. Bin auf den Beitrag nur nochmal eingegangen, um meine Lösung nochmal mit zu teilen.
Nun ja.. ich hab mir was eigenes gebastelt.
Aber das wurde nie angepasst.. Ich habe das mittlerweile als WebApp umgesetzt.
Php hat aber die gleichen Fehler gebracht, wenn ich die Zeichen nicht ersetzt habe.
Na in dem Bild sieht man nur eine sehr lange logische CSV-Zeile, obs wirklich 216 sind hab ich natürlich nicht nachgezählt, den Beginn sieht man ja auch nicht.
Aber alle Zeilenumbrüche darin sind passend mit Anführungszeichen umgeben, jeder CSV-Parser sollte das passend einlesen können - Excel zB konnten das ja bei dir auch.
Dein eigener Parser ist halt nicht CSV-konform, zB ignoriert er ja generell als Anführungszeichen. Falls du in PHP genauso parst, ist klar, woher der Fehler kommt - aber auch in PHP sollte man vernünftige Parser finden können.
Dein eigener Parser ist halt nicht CSV-konform, zB ignoriert er ja generell als Anführungszeichen. Falls du in PHP genauso parst, ist klar, woher der Fehler kommt - aber auch in PHP sollte man vernünftige Parser finden können.
Dass mein eigener Parser das nicht kann, ist mir klar. Als ich das damals geschrieben habe, waren mir CSVs auch komplett neu.
Allerdings wundert es mich, dass die CSV Korrekt ist.. Eigentlich benutze ich von Php eine Funktion die das Parsen übernimmt .
Ich habe nahezu die gleichen Fehler gehabt, als ich die unveränderte CSV importiert hatte. Es hat zwar keinen Fehler aufgrund der Maximierung der DB Felder gegeben, allerdings sind viele Zellen leer gewesen, in denen eigentlich Inhalt sein sollte.