Hallo Foris,
mein letztes Java liegt JAHRE zurück, und ich bräuchte ein wenig Hilfe und hoffe diese hier zu finden.
Ich habe eine Fahrtenbuch-Datei im UTF8 Pseudo-CSV Format die vor dem Import in eine Datenbank erst transformiert werden müsste.
Jeder Eintrag hat 3 Zeilen zu 16 Feldern, gefolgt von einer Leerzeile.
Punkte Kommentar Kilometerstand Zweck Stadt Straße Datum Uhrzeit Dauer (Abschnitt) Dauer (Gesamt) Strecke (Abschnitt) Strecke (Gesamt) Durchschn. Geschwindigkeit Max. Geschwindigkeit Lon Lat
Trennzeichen ist jeweils ein TAB – es sind keine „ als Delimiter verwendet.
Ich müsste also jeweils die Headerzeile und die Leerzeile skippen.
Bei jeder gelesenen Zeile wäre dann zu prüfen ob Sie eine Start- oder Ende Zeile ist.
Das Gute daran ist:
Alle Code-Beispiele für CSV Import via Java die ich gefunden habe gehen aber von vielen identischen Zeilen aus; wie lese ich denn nun mehrere Zeilen, verwerfe einzelne und kombiniere dann StartZeile+EndeZeile=FahrtenZeile?
Recht sinnig für mich erscheint mir u.a. der Code auf
https://crunchify.com/how-to-read-c...e-to-arraylist-in-java-using-split-operation/
Voller Code:
[/I][/I][/I]
Mir ist klar, dass ich hier modifizieren muss:
Und zwar so dass ich
crunchifyBuffer.readLine() mehrfach ausführe und jeweils prüfe ob es eine START Zeile ist.
Wenn ja dann die nächste Zeile lesen, prüfen ob es eine ENDE Zeile ist und wenn ja dann eine eine GesamtZeile erzeugen und ausgeben (toFile oder toMySQL)
vllt ein If Construkt mit CurrentLineIsŚTART=True und dann CurrentLineIsENDE=True ..?
Ist die nächste Zeile hingegen nach der Startzeile wieder eine Startzeile, so setze ich EndeZeile=StartZeile, GesamtZeile erzeugen und ausgeben (toFile oder toMySQL)
hier klemmt es an mangelnder Praxis
.. gern kann ich ein Muster der heilen und der defekten 'CSV' anfüge ...
Wäre toll hier etwas Hilfe zu bekommen….
mein letztes Java liegt JAHRE zurück, und ich bräuchte ein wenig Hilfe und hoffe diese hier zu finden.
Ich habe eine Fahrtenbuch-Datei im UTF8 Pseudo-CSV Format die vor dem Import in eine Datenbank erst transformiert werden müsste.
Jeder Eintrag hat 3 Zeilen zu 16 Feldern, gefolgt von einer Leerzeile.
- Zeile 1 ist die Header-Zeile
- Zeile 2 sind alle Daten zum Start der Fahrt
- Zeile 3 sind alle Daten zum Ende der Fahrt (außer es trat ein Schreibfehler auf)
- Zeile 4 ist die nachfolgende Leerzeile (außer es trat ein Schreibfehler auf)
Punkte Kommentar Kilometerstand Zweck Stadt Straße Datum Uhrzeit Dauer (Abschnitt) Dauer (Gesamt) Strecke (Abschnitt) Strecke (Gesamt) Durchschn. Geschwindigkeit Max. Geschwindigkeit Lon Lat
Trennzeichen ist jeweils ein TAB – es sind keine „ als Delimiter verwendet.
Ich müsste also jeweils die Headerzeile und die Leerzeile skippen.
Bei jeder gelesenen Zeile wäre dann zu prüfen ob Sie eine Start- oder Ende Zeile ist.
Das Gute daran ist:
- jede Zeile beginnt eindeutig mit „Punkte, Start oder Ende“.
- es kommt vor dass eine EndeZeile+Leerzeile durch Schreibfehler fehlt.
Alle Code-Beispiele für CSV Import via Java die ich gefunden habe gehen aber von vielen identischen Zeilen aus; wie lese ich denn nun mehrere Zeilen, verwerfe einzelne und kombiniere dann StartZeile+EndeZeile=FahrtenZeile?
Recht sinnig für mich erscheint mir u.a. der Code auf
https://crunchify.com/how-to-read-c...e-to-arraylist-in-java-using-split-operation/
Voller Code:
Java:
package crunchify.com.tutorial;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
/**
* @author Crunchify.com
*
*/
public class CrunchifyCSVtoArrayList {
public static void main(String[] args) {
BufferedReader crunchifyBuffer = null;
try {
String crunchifyLine;
crunchifyBuffer = new BufferedReader(new FileReader("/Users/appshah/Documents/Crunchify-CSV-to-ArrayList.txt"));
// How to read file in java line by line?
while ((crunchifyLine = crunchifyBuffer.readLine()) != null) {
System.out.println("Raw CSV data: " + crunchifyLine);
System.out.println("Converted ArrayList data: " + crunchifyCSVtoArrayList(crunchifyLine) + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (crunchifyBuffer != null) crunchifyBuffer.close();
} catch (IOException crunchifyException) {
crunchifyException.printStackTrace();
}
}
}
// Utility which converts CSV to ArrayList using Split Operation
public static ArrayList<String> crunchifyCSVtoArrayList(String crunchifyCSV) {
ArrayList<String> crunchifyResult = new ArrayList<String>();
if (crunchifyCSV != null) {
String[] splitData = crunchifyCSV.split("\\s*,\\s*");
for (int i = 0; i < splitData.length; i++) {
if (!(splitData[I] == null) || !(splitData[I].length() == 0)) {[/I][/I]
[I][I] crunchifyResult.add(splitData[I].trim());[/I][/I][/I]
[I][I][I] }[/I][/I][/I]
[I][I][I] }[/I][/I][/I]
[I][I][I] }[/I][/I][/I]
[I][I][I] return crunchifyResult;[/I][/I][/I]
[I][I][I] }[/I][/I][/I]
[I][I][I]}
Mir ist klar, dass ich hier modifizieren muss:
Java:
// How to read file in java line by line?
while ((crunchifyLine = crunchifyBuffer.readLine()) != null) {
System.out.println("Raw CSV data: " + crunchifyLine);
System.out.println("Converted ArrayList data: " + crunchifyCSVtoArrayList(crunchifyLine) + "\n");
}
crunchifyBuffer.readLine() mehrfach ausführe und jeweils prüfe ob es eine START Zeile ist.
Wenn ja dann die nächste Zeile lesen, prüfen ob es eine ENDE Zeile ist und wenn ja dann eine eine GesamtZeile erzeugen und ausgeben (toFile oder toMySQL)
vllt ein If Construkt mit CurrentLineIsŚTART=True und dann CurrentLineIsENDE=True ..?
Ist die nächste Zeile hingegen nach der Startzeile wieder eine Startzeile, so setze ich EndeZeile=StartZeile, GesamtZeile erzeugen und ausgeben (toFile oder toMySQL)
hier klemmt es an mangelnder Praxis
.. gern kann ich ein Muster der heilen und der defekten 'CSV' anfüge ...
Wäre toll hier etwas Hilfe zu bekommen….
Zuletzt bearbeitet von einem Moderator: