Hoi,
folgendes Problem: obwohl die verwendete Liste, welche die Zeichen zum Schreiben beinhaltet vollständig und richtig ist, so werden in die neu zu erstellende Datei nur ca 99% der Zeilen geschreiben, 10 Zeilen vor tatsächlichem Ende wird mitten in einer Zeile ein "cut" gemacht. Wo liegt der Hund begraben?
Aufgabe: ich muss eine CSV Datei einlesen und bereinigen (Linux)
Datei Encoding: unrecognized 8-bit
Glücklicherweise liegen alle "gültigen" Zeichen im ISO-8859-15 an den richtigen Stellen, Datei wird so eingelesen:
gibt man sich jetzt meine Liste (alCSVZeile) aus, ist alles schön, sauber, vollständig enthalten. Von der ersten, bis zur letzten Zeile. Unerwünschte Zeichen sind alle weg. Gewünschte (Umlaute ß.,;- Buchstaben und Zahlen und das NewLine an der richtigen Stelle) sind alle ordentlich drin.
Auszug der Ausgabe (der erstellten Liste, die letzten 14 Zeilen):
ZU ;ZU ;fach;name;strasse;plz ort;tel;
ZUB ;ZUB ;fach;name;strasse;plz ort;tel;
ZUBERA;ZUBERA;fach;name;strasse;plz ort;tel;
ZUCH ;ZUCH ;fach;name;strasse;plz ort;tel;
hier gehts noch 10 Zeilen weiter, dann Listenende
aber das wird in die Datei geschrieben:
ZU ;ZU ;fach;name;strasse;plz ort;tel;
ZUB ;ZUB ;fach;name;strasse;plz ort;tel;
ZUBERA;ZUBERA;
Folgende Methode übernimmt das Abspeichern:
Weiss nicht wo ich nach einem Fehler suchen soll. Denkanstöße (oder Lösungen) wären ne feine Sache .
folgendes Problem: obwohl die verwendete Liste, welche die Zeichen zum Schreiben beinhaltet vollständig und richtig ist, so werden in die neu zu erstellende Datei nur ca 99% der Zeilen geschreiben, 10 Zeilen vor tatsächlichem Ende wird mitten in einer Zeile ein "cut" gemacht. Wo liegt der Hund begraben?
Aufgabe: ich muss eine CSV Datei einlesen und bereinigen (Linux)
Datei Encoding: unrecognized 8-bit
Glücklicherweise liegen alle "gültigen" Zeichen im ISO-8859-15 an den richtigen Stellen, Datei wird so eingelesen:
Java:
void bereinigeDatei{
String strCSVDatei = "/home/datei.csv";
String strEncoding = "ISO-8859-15";
String strTmp = "";
FileInputStream fis = null;
InputStreamReader in;
try {
fis = new FileInputStream(strCSVDatei);
in = new InputStreamReader(fis, strEncoding);
for (int c; (c = in.read()) != -1;) {
//gültige zeichen A-Za-z0-9ÄÖÜäöü,.-;newLine
if (c == 10 || c == 32 || c == 44 || c == 45 || c == 46 || c == 48 || c == 49 || c == 50 || c == 51
|| c == 52 || c == 53 || c == 54 || c == 55 || c == 56 || c == 57 || c == 59 || c == 65
|| c == 66 || c == 67 || c == 68 || c == 69 || c == 70 || c == 71 || c == 72 || c == 73
|| c == 74 || c == 75 || c == 76 || c == 77 || c == 78 || c == 79 || c == 80 || c == 81
|| c == 82 || c == 83 || c == 84 || c == 85 || c == 86 || c == 87 || c == 88 || c == 89
|| c == 90 || c == 97 || c == 98 || c == 99 || c == 100 || c == 101 || c == 102 || c == 103
|| c == 104 || c == 105 || c == 106 || c == 107 || c == 108 || c == 109 || c == 110 || c == 111
|| c == 112 || c == 113 || c == 114 || c == 115 || c == 116 || c == 117 || c == 118 || c == 119
|| c == 120 || c == 121 || c == 122 || c == 196 || c == 214 || c == 220 || c == 228 || c == 246
|| c == 251) {
strTmp = strTmp + (char) c;
}
if (c == 10) {
alCSVZeile.add(strTmp);
strTmp = "";
}
}
} catch (IOException ex) {
javax.swing.JOptionPane.showMessageDialog(null, ex, "IOException", 0);
} finally {
try {
fis.close();
} catch (Exception ex) {
javax.swing.JOptionPane.showMessageDialog(null, ex, "Exception", 0);
}
}
}
gibt man sich jetzt meine Liste (alCSVZeile) aus, ist alles schön, sauber, vollständig enthalten. Von der ersten, bis zur letzten Zeile. Unerwünschte Zeichen sind alle weg. Gewünschte (Umlaute ß.,;- Buchstaben und Zahlen und das NewLine an der richtigen Stelle) sind alle ordentlich drin.
Auszug der Ausgabe (der erstellten Liste, die letzten 14 Zeilen):
ZU ;ZU ;fach;name;strasse;plz ort;tel;
ZUB ;ZUB ;fach;name;strasse;plz ort;tel;
ZUBERA;ZUBERA;fach;name;strasse;plz ort;tel;
ZUCH ;ZUCH ;fach;name;strasse;plz ort;tel;
hier gehts noch 10 Zeilen weiter, dann Listenende
aber das wird in die Datei geschrieben:
ZU ;ZU ;fach;name;strasse;plz ort;tel;
ZUB ;ZUB ;fach;name;strasse;plz ort;tel;
ZUBERA;ZUBERA;
Folgende Methode übernimmt das Abspeichern:
Java:
private void schreibeDateiNeu{
String strCSVDatei = "/home/dateineu.csv";
String strEncoding = "ISO-8859-15";
FileOutputStream fos = null;
OutputStreamWriter out;
// //ausgabe inhalt Liste
// for (int i = 0; i < alCSVZeile.size(); i++) {
// System.out.println(alCSVZeile.get(i));
// }
try {
fos = new FileOutputStream(strCSVDatei);
out = new OutputStreamWriter(fos, strEncoding);
out.write(alCSVZeile.get(0));
for (int i = 1; i < alCSVZeile.size(); i++) {
out.append(alCSVZeile.get(i));
}
javax.swing.JOptionPane.showMessageDialog(null, "fertig", "Info", 1);
} catch (IOException ex) {
javax.swing.JOptionPane.showMessageDialog(null, ex, "IOException", 0);
} finally {
try {
fos.close();
} catch (IOException ex) {
javax.swing.JOptionPane.showMessageDialog(null, ex, "IOException", 0);
}
}
System.out.println("dateineu.csv geschrieben");
}
Weiss nicht wo ich nach einem Fehler suchen soll. Denkanstöße (oder Lösungen) wären ne feine Sache .