Hallo zusammen,
ich hab den Inhalt einer CSV-Datei in einem Byte-Array (bzw. String) geladen und möchte nun den Inhalt überprüfen.
Aufbau der Datei:
Das Auslesen der Datei funktioniert, ich bekomme den Inhalt der Datei als byte-Array (also ASCII Werte mit CR, LR etc) bzw. wandle das Array in einen String um.
Ich möchte jedoch sicherstellen, dass in der Zeile1, Spalte1 "Ueberschrift1", in Zeile1, Spalte2 "Ueberschrift2" und in den folgenden Zeilen bspw. nur numerische Werte stehen.
Außerdem sollte nur 2 Spalten gefüllt sein und min. 2 Zeilen müssen gefüllt sein.
Variante1:
Zeichenweise durch das Byte-Array und dauerhafte Abfrage wann ein CR+LR kommt, wann ein ; kommt etc. -> sehr umständlich
Variante2:
Hier wandle ich das Byte-Array in einen String um, und gehe die einzelnen Zeilen + Spalten mit 2 StringTokenizern durch. Diese Variante scheint mir schon ein wenig besser, jedoch auch nicht wirklich optimal zu sein.
Frage: Hätte jmd. einen besseren Vorschlag? (Die CSV-Datei steht mir zu diesem Zeitpunkt nicht mehr zur Verfügung, d.h. ich kann nicht mit einer CSV-Lib arbeiten.)
ich hab den Inhalt einer CSV-Datei in einem Byte-Array (bzw. String) geladen und möchte nun den Inhalt überprüfen.
Aufbau der Datei:
Code:
Ueberschrift1;Ueberschrift2
A1;B1
A2;B2
A3;B3
Das Auslesen der Datei funktioniert, ich bekomme den Inhalt der Datei als byte-Array (also ASCII Werte mit CR, LR etc) bzw. wandle das Array in einen String um.
Ich möchte jedoch sicherstellen, dass in der Zeile1, Spalte1 "Ueberschrift1", in Zeile1, Spalte2 "Ueberschrift2" und in den folgenden Zeilen bspw. nur numerische Werte stehen.
Außerdem sollte nur 2 Spalten gefüllt sein und min. 2 Zeilen müssen gefüllt sein.
Variante1:
Zeichenweise durch das Byte-Array und dauerhafte Abfrage wann ein CR+LR kommt, wann ein ; kommt etc. -> sehr umständlich
Variante2:
Java:
StringTokenizer tokenizer1 = new StringTokenizer(content);
StringTokenizer tokenizer2 = null;
int row = 0;
int column = 0;
String tmp = "";
if (tokenizer1.countTokens() < 2) {
throw new Exception("Es müssen mindestens 2 Zeilen gefüllt sein.");
}
while (tokenizer1.hasMoreTokens()) {
row++;
tokenizer2 = new StringTokenizer(tokenizer1.nextToken(), ";");
if (tokenizer2.countTokens() > 2) {
throw new Exception("Es sind mehr als 2 Spalten gefüllt.");
}
while (tokenizer2.hasMoreTokens()) {
column++;
tmp = tokenizer2.nextToken();
if (row == 1) {
if (column == 1) {
if (!tmp.equals("Ueberschrift1")) {
throw new Exception("Zeile 1, Spalte 1 != Soll, " + tmp);
}
} else if (column == 2) {
if (!tmp.equals("Ueberschrift2")) {
throw new Exception("Zeile 1, Spalte 2 != Soll, " + tmp);
}
} else {
// ...
}
} else { // alles ab Zeile2
// Ueberpruefung auf numerische Werte etc.
}
System.out.println(tmp);
}
column = 0;
}
Frage: Hätte jmd. einen besseren Vorschlag? (Die CSV-Datei steht mir zu diesem Zeitpunkt nicht mehr zur Verfügung, d.h. ich kann nicht mit einer CSV-Lib arbeiten.)