csv Reader für Java?

alfware17

Mitglied
Ich habe kürzlich ein kleines Python-Programm entwickelt, welches eine CSV-Datei einliest und dann mache ich ein bißchen was mit den Zeilen (Menues ausgeben und Module aufrufen, das ist aber nicht wichtig). Nun wollte ich die gleiche Funktionalität auch in Java nachbilden, später auch in (Turbo-)Pascal ohne Objekte. Letzteres ist für mich im Prinzip auch nicht verhandelbar, es soll unter 16bit noch laufen. Ich habe eine 30 Jahre alte Vorlage in dBaseIV und ein wenig jüngeres schon in Pascal, welche aber 3 Nachteile hat (Textfile mehrfach lesen, logischer Fehler drin, kein execute für Module) und das ich eigentlich anpassen wollte. Auf dem Weg dorthin bin ich bei
Python gelandet und vermisse nun leider schmerzlich sowas wie den csv Reader.

Ja ich habe schon was programmiert - nicht schön aber selten, die Quelle kann ich gerne zeigen aber Ihr werdet mich zerreißen. Darum lieber meine Frage: gibt es irgendwelche Standard csv Reader, die nicht so kompliziert sind in der Anwendung? Meine Google Suche erbrachte u.a. openCSV aber ehrlich gesagt verstehe ich das noch nicht so ganz oder die Beispiele sind kompliziert.
Im Grunde habe ich in der Datei nur 6 Integer und 3 Strings, etwa 200 Zeilen, möchte die entweder als Array oder mit dynamische Liste speichern und ich bräuchte ein paar Methoden zB Existenz-Prüfung oder Untermengen als Liste.
 

Robert Zenz

Top Contributor
Im Grunde habe ich in der Datei nur 6 Integer und 3 Strings, etwa 200 Zeilen, möchte die entweder als Array oder mit dynamische Liste speichern und ich bräuchte ein paar Methoden zB Existenz-Prüfung oder Untermengen als Liste.
Wenn du sowohl Eingabeformat als auch Ausgabeformat kontrollierst, spricht nichts dagegen dass du dir "schnell" einen eigenen schreibst. Die meisten CSV-Bibliotheken sind so komplex weil CSV so komplex ist. Wenn du das aber alles nicht brauchst, und ein klar definiertes Format hast, dann kannst du dir auch genau dafuer eigene Logik schreiben, denn in Sonderfaelle und Ausnahmen wirst du nicht laufen.

Meine Google Suche erbrachte u.a. openCSV aber ehrlich gesagt verstehe ich das noch nicht so ganz oder die Beispiele sind kompliziert.
Den verstehe ich aber nicht ganz, die einfachste ist einfach nur ein String-Array aus jeder Zeile zu machen, das Beispiel ist jetzt nicht schoen, har ein paar Probleme, aber ist sehr simpel gehalten.
 

Oneixee5

Top Contributor
Letzteres ist für mich im Prinzip auch nicht verhandelbar, es soll unter 16bit noch laufen.
Den Satz verstehe ich nicht. Weder Python noch Java gibt es als 16Bit Versionen.

Auf dem Weg dorthin bin ich bei
Python gelandet und vermisse nun leider schmerzlich sowas wie den csv Reader.
Das verstehe ich auch nicht ...
The csv module defines the following functions:
csv.reader(csvfile, dialect='excel', **fmtparams)
 

alfware17

Mitglied
Den Satz verstehe ich nicht. Weder Python noch Java gibt es als 16Bit Versionen.


Das verstehe ich auch nicht ...
The csv module defines the following functions:
csv.reader(csvfile, dialect='excel', **fmtparams)
Hi ja deutsche Sprache schwere Sprache, schwerer noch als Java...
Also, ich habe bereits ein Python-Programm und nutze dort auch das csv-Modul, genauer gesagt den DictReader. Nun vermisse ich in Java etwas SO eine komfortable Lösung WIE Pythons csv.DictReader.

Ich poste nachher mal das, was ich selbst entwickelt habe.

Zum Thema 16bit - Python und Java nicht, da hast du recht. Aber (Turbo oder Free) Pascal schon. Und da mein Ziel eigentlich ein funktionierendes
Pascal Programm ist, welches ich gegenüberstelle dem dBaseIV (was natürlich auch noch läuft bei mir), beschränke ich mich bei Pascal doch gleich auf die Sprachmittel von Turbo-Pascal, obwohl ich in Lazarus/FreePascal sicher auch schicke Units finden werde.

Noch mal zur Historie:
1. dBaseIV mit Tabelle läuft im Prinzip immer noch (ich erfasse Fußballergebnisse seit 40 Jahren)
2. Umsetzung in Turbo Pascal, später FreePascal, leider mit einem Bug/Schönheitsfehler den ich nicht finde und vermutlich wegen meiner blöden Umstellung von DBF auf File/CSV
3. Python erst versucht zu portieren aus dem Pascal -> ging schief bzw sieht ebenso doof aus. Also:
4. Neu entworfen in Python mit csv-Modul und sogar objektorientiert (habe schnell und viel gelernt...)
5. CSV-Lesen in Pascal erzeugt, naja noch verbesserungswürdig, will erst Erfahrungen sammeln in Java
6. CSV-Lesen in Java erzeugt - nun ja, schau es dir an...
7.(geplant) restliche Logik in Java ergänzen (kann nicht schlimm sein, weil das Python Programm nun dank eine Python-Forums fast gut ist/läuft)
8.(geplant) restliche Logik in Pascal ergänzen und zwar nach der Java-Vorlage, WEIL ich mich direkt von Python nicht traue bzw nicht will weil ich vielleicht eh wieder auf den Bug/Schönheitsfehler laufe, ich will erstmal im "unparteiischen" Java sehen, daß und wie mein Algorithmus läuft
Nebenbei ist der Algorithmus komisch oder ungewöhnlich, aber das soll hier (noch) keine Rolle spielen.
Menues neu entwerfen mit GUI in Python und/oder Java/Pascal soll es eben nicht sein. Mir kommt es nur auf den Algorithmus/Ablauf an, so wie der da ist
 

alfware17

Mitglied
Hallo Robert Zenz und M.L. auch Euch vielen Dank. Ich zeige nun mal, was ich habe, vielleicht reicht das ja schon:


Java:
package csvReader;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class CSVReader {
    private static final int MAX_RECORDS = 200;

    // TRecord-Klasse entspricht dem Pascal Record
    static class TRecord {
        int M1, M2, M3, N1, N2, L1;
        String PROG, BEZEICHNER, CODE;

        // Konstruktor für TRecord
        TRecord(int m1, int m2, int m3, String prog, String bezeichner, String code, int n1, int n2, int l1) {
            this.M1 = m1;
            this.M2 = m2;
            this.M3 = m3;
            this.PROG = prog;
            this.BEZEICHNER = bezeichner;
            this.CODE = code;
            this.N1 = n1;
            this.N2 = n2;
            this.L1 = l1;
        }

        @Override
        public String toString() {
            return "M1=" + M1 + ", M2=" + M2 + ", M3=" + M3 + ", PROG=" + PROG + ", BEZEICHNER=" + BEZEICHNER + ", CODE=" + CODE + ", N1=" + N1 + ", N2=" + N2 + ", L1=" + L1;
        }
    }

    // TDatei-Klasse entspricht der Pascal-Struktur mit RecordCount
    static class TDatei {
        List<TRecord> records = new ArrayList<>();
    }

    static TDatei datei = new TDatei(); // CSV-Daten
    static TDatei matchingRecords = new TDatei(); // Gefundene Sätze

    // Hilfsfunktion zur Konvertierung von String in Integer (Fehler wird als 0 behandelt)
    static int strToInt(String s) {
        try {
            return Integer.parseInt(s.trim());
        } catch (NumberFormatException e) {
            return 0;
        }
    }

    // Funktion zum Extrahieren eines Feldes aus einer CSV-Zeile (mit Semikolon als Trennzeichen)
//    static String csvStrip(String line) {
//        int semicolonPos = line.indexOf(';');
//        if (semicolonPos >= 0) {
//            String field = line.substring(0, semicolonPos);
//            return line.substring(semicolonPos + 1);
//        } else {
//            return line; // Letztes Feld
//        }
//    }

    // Funktion, die einen Satz basierend auf dem Index zurückgibt
    static boolean getRecordByIndex(int index, TRecord[] rec) {
        if (index >= 0 && index < datei.records.size()) {
            rec[0] = datei.records.get(index);
            return true;
        }
        return false;
    }

    // Funktion, die alle Sätze zurückgibt, die zu M1 und M2 passen
    static boolean getRecordsByKeys(int key1, int key2, TDatei resultRecords) {
        resultRecords.records.clear();
        boolean found = false;
        for (TRecord record : datei.records) {
            if (record.M1 == key1 && record.M2 == key2) {
                resultRecords.records.add(record);
                found = true;
            }
        }
        return found;
    }

    // CSV-Datei einlesen und die Daten in das Array laden, 1. Zeile überspringen
    static void loadCSV(String fileName) throws IOException {
        try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
            String line = br.readLine(); // Überspringe die erste Zeile (Header)
            while ((line = br.readLine()) != null && datei.records.size() < MAX_RECORDS) {
                String[] fields = line.split(";");

                // Parst die Zeile und fügt den Satz der Liste hinzu
                TRecord record = new TRecord(
                    strToInt(fields[0]), // M1
                    strToInt(fields[1]), // M2
                    strToInt(fields[2]), // M3
                    fields[3],           // PROG
                    fields[4],           // BEZEICHNER
                    fields[5],           // CODE
                    strToInt(fields[6]), // N1
                    strToInt(fields[7]), // N2
                    strToInt(fields[8])  // L1
                );
                datei.records.add(record);
            }
        }
    }

    public static void main(String[] args) {
        try {
            loadCSV("daten.csv");

            // Test: Suche nach einem Datensatz über den Index
            TRecord[] rec = new TRecord[1];
            boolean found = getRecordByIndex(4, rec); // Index 4 (entspricht dem 5. Satz)
            if (found) {
                System.out.println("Datensatz 5: " + rec[0]);
            } else {
                System.out.println("Datensatz nicht gefunden.");
            }

            // Test: Suche nach Sätzen mit M1=2 und M2=3
            found = getRecordsByKeys(2, 3, matchingRecords);
            if (found) {
                System.out.println("Gefundene Datensätze für M1=2, M2=3:");
                for (TRecord record : matchingRecords.records) {
                    System.out.println(record);
                }
            } else {
                System.out.println("Keine Datensätze für M1=2, M2=3 gefunden.");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Ein paar Methoden und etwas Logik brauche ich dann schon noch, aber die Datenbasis dürfte ich erstmal haben. Nicht wundern, ich habe die eine Methode csvStrip noch als Kommentar drin gelassen um zu zeigen, womit ich mich in den verschiedenen Sprachen herumschlagen darf.
Das csvStrip brauche ich in Pascal, ich benutze es auch in anderen Sprachen. In Java habe ich immerhin schon das .split(';') welches es im Prinzip auch in Python tun würde aber da bin ich noch bequemer und nutze das csv.DictReader. Ich muß dann aber wieder vom Komfortablen zurück gehen zur Handarbeit bzw mir in Pascal einiges selber schreiben. Habe ich nun mein Problem/meine Vorgehensweise deutlich gemacht?
 

Oneixee5

Top Contributor
Also du hast Daten von 40 Jahren und Daten in einem alten Datenbankformat. Warum lernst du da 60 Programmiersprachen? Wenn du immer etwas neues fummelst wirst du nie mit irgend etwas fertig.
Wenn Daten in einem alten DB-Format vorhanden sind, dann ist doch das Naheliegendste die Daten in ein neues DB-Format umzuwandeln. So kannst du bspw. mit SQL zugreifen, filtern, umwandeln ....
DB-Programme gibt es zu Hauf und du kannst da GUIs in 1000 Programmiersprachen drumherum bauen , immer auf der gleichen Datenasis. Fußball-Ergebnisse wären auch was fürs Web.
 

alfware17

Mitglied
Also du hast Daten von 40 Jahren und Daten in einem alten Datenbankformat. Warum lernst du da 60 Programmiersprachen? Wenn du immer etwas neues fummelst wirst du nie mit irgend etwas fertig.
Wenn Daten in einem alten DB-Format vorhanden sind, dann ist doch das Naheliegendste die Daten in ein neues DB-Format umzuwandeln. So kannst du bspw. mit SQL zugreifen, filtern, umwandeln ....
DB-Programme gibt es zu Hauf und du kannst da GUIs in 1000 Programmiersprachen drumherum bauen , immer auf der gleichen Datenasis. Fußball-Ergebnisse wären auch was fürs Web.

Es ist schlimmer als du ahnst - ich halte mir die Daten in Excel, der Weg wie sie da hineinkommen sei mal dahingestellt und hat sich auch mehrfach geändert, am Anfang war zB Abtippen per Hand. Die exportiere ich dann nach dBase und mein Programm zeigt sie mir. Einfach nur um zu sehen, ob es das virtuell oder real aufgerufene dBase noch tut.

In Java wollte ich das eigentlich recht umfangreiche dBase Programm sowieso nie machen, du hast recht, es gibt weit Besseres und auch im Web.
Mir ging es nur um die Idee von damals, das Menue selbst auch in der Datenbank äh Tabelle zu verwalten, so kann das aufgerufene Modul bzw die Parameter verwaltet werden. Um das alles geht es hier nicht, nur um das Stück Lesen bzw Rufen der Datenbank äh Tabelle nun CSV.

Mit 60 Programmiersprachen könntest du mittlerweile ziemlich nah dran sein. Und ja, es gibt schon 1000 Ligaverwaltungssysteme aber ich glaube nur meins in dBase hatte damals so Orakel-Funktionen, sprich Ergebnisse voraussagen und daß es zu einem parallelen Excel-Projekt kompatibel ist,
will ich auch nicht weggeben.

Hast du zu meinem Java etwas (nicht) zu meckern? Wahrscheinlich mehr meckern als nicht meckern
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Reader für Benutzereingabe in Eclipse importieren Java Basics - Anfänger-Themen 3
Haubitze_Broese Pattern für Links in RSS-Reader Java Basics - Anfänger-Themen 6
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
R CSV Reader läuft nicht richtig an Java Basics - Anfänger-Themen 8
S Input/Output Reader/Writer finden file nicht Java Basics - Anfänger-Themen 3
L Klassen NFC Reader und JavaFx Problem -> threads? Java Basics - Anfänger-Themen 2
A Reader wohin werden Daten gespeichert? Java Basics - Anfänger-Themen 7
Textsurfer Erste Schritte CSV Import Reader Writer Java Basics - Anfänger-Themen 0
W Reader Java Basics - Anfänger-Themen 9
W Java XML-Reader: Content not allowed in Prolog Java Basics - Anfänger-Themen 7
D Jpg in BufferedImage Reader oder Array ablegen? Java Basics - Anfänger-Themen 5
H "Conways GameofLife - Vom Reader ins Array" Java Basics - Anfänger-Themen 5
C FileWriter bzw. Reader fehlerhaft Java Basics - Anfänger-Themen 6
Sogomn Input/Output Reader, Writer und Streams Java Basics - Anfänger-Themen 6
P txt reader Problem Java Basics - Anfänger-Themen 17
L buffered reader produziert zu viele und seltsame zeichen Java Basics - Anfänger-Themen 2
A Interface Reader interface verwenden Java Basics - Anfänger-Themen 4
S Input/Output Reader: "null" wenn While-Ende Java Basics - Anfänger-Themen 5
F Reader - brauche Hilfe Java Basics - Anfänger-Themen 19
M Reader-Problem Java Basics - Anfänger-Themen 5
Haubitze_Broese RSS-Reader? Java Basics - Anfänger-Themen 2
A Problem Reader Java Basics - Anfänger-Themen 39
Developer_X Sav-Data reader, fehler Java Basics - Anfänger-Themen 2
V Buffered Reader, erst ab bestimmter Zeile auslesen? Java Basics - Anfänger-Themen 8
K Probleme mit Buffered Reader Java Basics - Anfänger-Themen 8
P Buffered Reader an Anfang setzen Java Basics - Anfänger-Themen 4
D RSS Reader mit Redaktionssystem Java Basics - Anfänger-Themen 7
L Streams und Reader/Writer Java Basics - Anfänger-Themen 8
F Was gibt der Buffered Reader zurück bei Dateiende? Java Basics - Anfänger-Themen 2
T Writer/Reader Problem Java Basics - Anfänger-Themen 4
H Buffered Reader Java Basics - Anfänger-Themen 7
G Buffered REader, String, ist mein code korrekt? Java Basics - Anfänger-Themen 4
S Bitte Ratschläge für Console-MenuFührung... Java Basics - Anfänger-Themen 20
tomzen Java Unterstützung für exel dateien installieren. Java Basics - Anfänger-Themen 2
M Code aus IntelliJ in "Textform" für Word-Paper? Java Basics - Anfänger-Themen 10
G Icon für App Java Basics - Anfänger-Themen 1
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
V Durchschnittliche Volatility in Prozent für 4 Stunden berechnen Java Basics - Anfänger-Themen 14
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
D Apache HTTPClient für alle Fälle Java Basics - Anfänger-Themen 41
J Layout Manager, welcher ist der Richtige für mein Program? Java Basics - Anfänger-Themen 1
J Fehlermeldung unverständlich für Jakarta Java Basics - Anfänger-Themen 17
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
M GUI für Vier-Gewinnt. Java Basics - Anfänger-Themen 4
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
Ostkreuz Counter für Booleanwerte Java Basics - Anfänger-Themen 8
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
Jxhnny.lpz Randomisier für Buttons Java Basics - Anfänger-Themen 13
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
M generate Methode für Streams Java Basics - Anfänger-Themen 6
I Datenmodell für "Tags" Java Basics - Anfänger-Themen 6
Lion.King for-Kontrollstruktur für Pyramide Java Basics - Anfänger-Themen 8
B Mit Countdown Midnestdauer für Teilaufgabenerledigung erzwingen Java Basics - Anfänger-Themen 8
J File length als Prüfwert für Download Java Basics - Anfänger-Themen 5
K Spieleidee gesucht für Informatikprojekt - JAVA (BlueJ)? Java Basics - Anfänger-Themen 15
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
javamanoman Java für Online Banking Java Basics - Anfänger-Themen 12
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
I SQL / JPA Query für StartDate und EndDate Java Basics - Anfänger-Themen 1
T getMethode für ein Array Java Basics - Anfänger-Themen 2
Fats Waller Farben mixen für den Hintergrund ? Java Basics - Anfänger-Themen 1
H Suche jemanden für kleine Uni-Abgabe/ mit Vergütung Java Basics - Anfänger-Themen 1
K Für was braucht man die left und right shift operatoren? Was bringen die, also welchen Zweck haben die? Java Basics - Anfänger-Themen 15
N Api nur für Textdatein (.txt) Java Basics - Anfänger-Themen 2
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
R Ist Java das Richtige für mich? Java Basics - Anfänger-Themen 4
E Mittelquadratmethode für Hexadezimalzahlen Java Basics - Anfänger-Themen 1
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
S BubbleSort für ArrayLists Java Basics - Anfänger-Themen 3
T Übungsbuch für Anfänger Java Basics - Anfänger-Themen 3
L Konzept für Quiz Java Basics - Anfänger-Themen 33
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
L loop für Namen Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben