CSV parsen mehrere Zeilen

OnDemand

Top Contributor
Hallo zusammen,

ich habe aus SAP eine CSV bekommen, die es nun mit Java zu lesen gilt. Eigetlich sind alle CSV Dateien so aufgebaut, dass pro Zeile ein Datensatz ausgegeben wird zB:
REnr;Summe;Artikelnr;Beschreibung;
leider habe ich nun eine wie folgt erhalten (ein Datensatz über mehrere Zeilen)
ReNr;Summe;Artikelnr;Beschreibung
Attributnr; Lieferadresse

Im Excel wird es korrekt in eine Zeile geschrieben, aber im Editor ist da irgendwie ein Zeilenumbruch. Mit meinem normalen parser, lese ich Zeile für Zeile, was ja aber zu falschen Daten führt.
Hat jemand ne Idee, was man da machen kann? Den Zeilenumbruch irgendwie enfternen vor dem lesen?!
 

JCODA

Top Contributor
Ist jeder Datensatz zweizeilig? Dann verknüpfe zwei Zeilen im Java-Programm.
Oder soll der Parser allgemein sein? D.h. für alle Formate das richtige parsen? Dann könnte man schauen, ob man durch die Anzahl der Einträge nach einem .split() noch weitere Zeilen lesen muss.
 

OnDemand

Top Contributor
Hi, danke für die Antwort. Manche Datensätze haben auch mehere Zeilen. Aber jede neue Zeile fängt mit true an (aktiv == true) vielleicht kann ich das irgendwie mit nutzen
 

OnDemand

Top Contributor
Das kann ich leider nicht machen, sind interne Unternehmensdaten. Aber so sehen 2 Datensätze aus mit veränderten Daten:
//Erster Datensatz Zeile 1-3
1. "true";"100001";"060833.00.00";"589.99";"385.71";"0";"0";"HWVOLL"
2. [*] Farbe blau
3. [*] Ohne Innengestell
// Zweiter Datensatz Zeile 4-5
4. "true";"100002";"060843.00.00";"4444.99";"385.71";"0";"0";"HWVOLL"
5. [*] Mit Innengestell
//Dritter Datensatz usw
4. "true";"100003";"060843.00.00";"4444.99";"385.71";"0";"0";"HWVOLL"
5. [*] Mit Gestänge
 

JCODA

Top Contributor
wenn das true immer da ist kannst ja immer weitere Zeilen einlesen, bis das nächste true kommt, dann fängt ein neuer Datensatz an ... oder kann das true auch mal false sein? Falls ja kommen denn weitere boolsche Werte im Datensatz vor? nein? dann prüfe auf beides... ansonsten kann man natürlich noch testen, welche Datentypen wo stehen, also Integer/String/Boolean... aber das scheint mir zunächst die Sache eher zu verkomplizieren.
 

OnDemand

Top Contributor
Soweit ich es sehe, fängt es immer mit [*] an ich vermute, SAP hat da eine Logik dahin, damit es selber weiß, wann ein neuer Datensatz beginnt. Aber ansonsten fangen ALLE Datensätze mit true an
 

JStein52

Top Contributor
Und interessieren dich auch Inhalte aus den Folgezeilen ? Diese scheinen ja anders aufgebaut zu sein wie die erste Zeile (kein Semikolon als Trenner z.B. ?)
 

OnDemand

Top Contributor
Leider ja, das sind quasi Attribute zum Datensatz. Zb steht in der Zeile mit Semikolon eine Hose und [*] ist dann jeweils die Größe. So kannst du dir das vorstellen
 

JStein52

Top Contributor
Ja, ok. Und brauchst du diese Attribute nun auch oder kannst du die einfach überlesen ? Steht da ein Attribut pro Zeile ? In deinem Beispiel sind da nämlich keine Trennzeichen zu erkennen (ausser neue Zeile natürlich)
 

OnDemand

Top Contributor
Ja die Attribute brauch ich. Es sollte 1 Attribut per Zeile sein.

Das ist das Problem dass dort keine Trenner drin sind. Aber excel bekommt das auch hin, dann bekommen wir das erst recht hin
 

JStein52

Top Contributor
Was meinst du eigentlich damit dass Excel das hinkriegt. Wenn ich mir so eine Datei erstelle dann kann Excel das auch nicht ordentlich einlesen. Er macht halt aus den Folgezeilen auch jeweils neue Zeilen mit einem einzigen Feld.

Edit: das war meine Eingabedatei
Code:
"true";"100001";"060833.00.00";"589.99";"385.71";"0";"0";"HWVOLL"
[*] Farbe blau
[*] Ohne Innengestell
"true";"100002";"060843.00.00";"4444.99";"385.71";"0";"0";"HWVOLL"
[*] Mit Innengestell
"true";"100003";"060843.00.00";"4444.99";"385.71";"0";"0";"HWVOLL"
[*] Mit Gestänge
 

JCODA

Top Contributor
Du kannst ja mal in Notepad++ "alle Zeichen anzeigen" anklicken, vielleicht ist der Zeilenumbruch von einem anderen OS. Die unterscheiden sich nämlich.
 

Dompteur

Top Contributor
Wenn ich das recht verstehe, dann hast du bereits ein Programm zum Importieren von CSV-Files.
Dann würde ich einen Arbeitsschritt davor setzen, indem du dein File in das "richtige" CSV Format bringst. Dazu musst du eigentlich nur "\n[*] " durch ";" ersetzen. Danach hast du ein CSV File, in dem jede Zeile einem Satz entspricht.
 

OnDemand

Top Contributor
Hallo Dompteur,
das hab ich schon versucht, klappt aber irgendwie nicht habe mit "\n" oder "\\n" auch mit r versucht, aber er ersetzt es einfach nicht.

Java:
 while ((line = reader.readLine()) != null) {

                System.out.println(line);

                String[] parts = line.replaceAll("\\r|\\n", "\";\"").split("\";\"", -1);
}
 

OnDemand

Top Contributor
Habe grad gesehen, dass die Datensätz mir CR LF in NP++ von ein ander getrennt werden, aber dennoch klappts nicht. die Attribute sind mit LF getrennt, also müsste ja \n mit ; ersetztn klappen, aber das LF wird nicht ersetzt :(
 

Meniskusschaden

Top Contributor
Wenn du zeilenweise einliest (also mit readLine()), bekommst du natürlich immer nur die Daten bis zum nächsten Zeilenende ohne das Zeilenende-Symbol. Da kannst du dann logischerweise kein Zeilenendesymbol mehr ersetzen.
 

tommysenf

Top Contributor
Code:
List<Article> articles = ...
Article article = null;
for each line in file {
  if line.startsWith("[*]") {
     article.addOption(line);
  } else {
     article = new Article(line.split(";"));
     aricles.add(article);
  }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
2 mehrere Json Werte Parsen Allgemeine Java-Themen 3
T Jsoup: Mehrere Links nacheinander parsen Allgemeine Java-Themen 11
K Inhalte Parsen von Website Allgemeine Java-Themen 15
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
O JSON in Integer parsen Allgemeine Java-Themen 5
S Ini Text aus String parsen Allgemeine Java-Themen 1
OnDemand Datenbankdatei parsen Allgemeine Java-Themen 2
N svg(xml) parsen und manipulieren? Allgemeine Java-Themen 3
G JSON parsen Allgemeine Java-Themen 3
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
looparda Datei parsen Allgemeine Java-Themen 1
C Benutzereingabe von EXCEL-Funktionen parsen Allgemeine Java-Themen 4
B Such-String parsen mit Klammern Allgemeine Java-Themen 2
L Windows CMD werte Parsen. Allgemeine Java-Themen 2
B XML parsen Allgemeine Java-Themen 13
H Bestimmten Wert aus String parsen Allgemeine Java-Themen 7
0 Parsen Allgemeine Java-Themen 7
W Best Practice Dateien parsen Allgemeine Java-Themen 3
X Tags "parsen" Allgemeine Java-Themen 8
A Parsen mit java_cup - Shift/Reduce Problem Allgemeine Java-Themen 12
C Roboter, Befehle parsen Allgemeine Java-Themen 12
M Informationen aus komplexen String parsen Allgemeine Java-Themen 13
W Dateinamen dynamisch Parsen Allgemeine Java-Themen 12
F JavaMail - Lokale eMail-Datei einlesen und parsen? Allgemeine Java-Themen 9
T String in Date parsen (*ohne* bekanntes Format) Allgemeine Java-Themen 8
M Dateien mit Quelltext parsen Allgemeine Java-Themen 7
W RegEx Zeile parsen Medium Allgemeine Java-Themen 8
S Dateiname mit Regex parsen Allgemeine Java-Themen 3
K _alle_ Sonderzeichen parsen Allgemeine Java-Themen 2
S Feher beim Parsen eines Datums Allgemeine Java-Themen 4
E Reguläre Txt in Tree parsen Allgemeine Java-Themen 2
S Strings zu Color-Instanzen parsen? Allgemeine Java-Themen 7
S Überprüfung/Parsen eines Byte-Arrays Allgemeine Java-Themen 9
martin82 Java-Code aus Text-Datei parsen Allgemeine Java-Themen 3
A String zu Datum parsen - SimpleDateFormat Problem Allgemeine Java-Themen 8
A Datum parsen Allgemeine Java-Themen 9
G Parsen von: if(a > 15 AND (b == 3 OR c != 4)) Allgemeine Java-Themen 3
G String nach Float parsen Allgemeine Java-Themen 2
P OutOfMemoryError beim XML erstellen bzw parsen, mehr RAM? Allgemeine Java-Themen 4
H2SO3- Exception beim date parsen des Jahres 00 Allgemeine Java-Themen 6
H2SO3- date mit pm and am parsen Allgemeine Java-Themen 3
Z Datum ohne Format-Kenntnisse parsen Allgemeine Java-Themen 5
T Wie kontinuierlichen asci input parsen? Allgemeine Java-Themen 3
C Java Quellcode parsen Allgemeine Java-Themen 8
alexpetri Date Parsen Allgemeine Java-Themen 3
G String parsen und Problem mit escaped zeichen Allgemeine Java-Themen 4
M Html parsen Allgemeine Java-Themen 2
D Parameter parsen? Allgemeine Java-Themen 15
V Datum parsen Allgemeine Java-Themen 6
MQue String parsen Allgemeine Java-Themen 11
M wie sinnvoll parsen ? Allgemeine Java-Themen 4
M Link parsen bzw. zerlegen Allgemeine Java-Themen 9
padde479 String in double parsen Allgemeine Java-Themen 6
W Package via Reflection parsen Allgemeine Java-Themen 4
M MP3 Datei selber parsen/werte auslesen Allgemeine Java-Themen 13
J parsen von verschiedenen dokument typen Allgemeine Java-Themen 3
B textzeile parsen Allgemeine Java-Themen 6
T Schlüsseldatei mit Umlauten parsen, aber wie. Allgemeine Java-Themen 6
G mail body parsen (->attachment & filename) Allgemeine Java-Themen 2
J DirectPlay Server-Antwort parsen Allgemeine Java-Themen 2
S String parsen Allgemeine Java-Themen 15
V LogFile parsen Allgemeine Java-Themen 5
E Field-Objekt in JTextField parsen Allgemeine Java-Themen 3
L Prozesse parsen ? Allgemeine Java-Themen 2
I Mehrere Klassen mit den selben Daten Allgemeine Java-Themen 5
berserkerdq2 Ist es schlechter Programmierstyle mehrere Panes aufeinander zu machen? Allgemeine Java-Themen 1
Tarrew OpenAPI Schnittstelle - Mehrere Kunden mit unterschiedlichen Zugriffsrechten Allgemeine Java-Themen 2
A Mehrere for-Schleifen Allgemeine Java-Themen 2
M Mehrere Sounds Allgemeine Java-Themen 3
M Mehrere Ressourcen in einem package ablegen Allgemeine Java-Themen 1
Avalon DTO aus mehrere Entitäten erstellen Allgemeine Java-Themen 5
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
bueseb84 Git : Mehrere Server verwenden Allgemeine Java-Themen 3
L Mehrere .Jar Files aufrufen Allgemeine Java-Themen 9
L mehrere Methoden Allgemeine Java-Themen 19
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
B StAX Parser - mehrere Methoden, ein XML Allgemeine Java-Themen 4
T String mehrere Worte Allgemeine Java-Themen 2
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
F Listen - Mehrere Objekte Allgemeine Java-Themen 1
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
S libGDX mehrere Texturen zu Einer zusammenfassen Allgemeine Java-Themen 0
X Mehrere booleans in Datei Speichern, Updaten und Laden Allgemeine Java-Themen 1
K Mehrere Programmiersprachen gleichzeitig lernen Allgemeine Java-Themen 3
C Mehrere Seiten drucken in Hoch- und Querformat Allgemeine Java-Themen 0
perlenfischer1984 Mehrere Komponenten erstellen Allgemeine Java-Themen 3
F AWT Mehrere Tastatureingaben verarbeiten Allgemeine Java-Themen 5
J Mehrere Wörter getrennt in eine Array einlesen, wie ? Allgemeine Java-Themen 7
HarleyDavidson Best Practice Integer-Zahlenfolge über mehrere Programmstarts Allgemeine Java-Themen 7
F Mehrere JTables' drucken Allgemeine Java-Themen 0
stylegangsta Mehrere html seiten einer Homepage einlesen und als Textdatei ausgeben Allgemeine Java-Themen 14
P Mehrere Java Versionen auf dem Rechner Allgemeine Java-Themen 3
B JAVA - mehrere Clienten gleichzeitig starten. Nicht bei Code! Allgemeine Java-Themen 3
S PrintWriter.println() schreibt mehrere Zeilen Allgemeine Java-Themen 19

Ähnliche Java Themen

Neue Themen


Oben