1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Große CSV-Datei parsen

Dieses Thema im Forum "AppleScript" wurde erstellt von Katzenfutter, 21.02.07.

  1. Katzenfutter

    Katzenfutter Kaiser Wilhelm

    Dabei seit:
    16.12.06
    Beiträge:
    174
    Hallo...
    Stehe grade vor einem größeren Problem.
    Meine Aufgabe: ich muss eine ca. 27MB umfassende CSV-Datei parsen und deren Inhalt letztendlich in eine Datenbank pressen. Letzteres dürfte kein größeres Problem darstellen, MySQL ist da recht gutmütig...

    Nur Java bereitet mir grade Kopfschmerzen.
    Eine unschöne Lösung (oder auch schön, Ansichtssache!) habe ich: ich lasse immer nur eine Zeile einlesen, parse sie, schreibe sie in die DB und lese die nächste... solange bis EndOfFile.

    Hat jemand ne andere, eventuell bessere Lösung für mein kleines CSV-Problem?

    Help is much appreciated!
     
  2. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Nimm Perl
     
  3. Katzenfutter

    Katzenfutter Kaiser Wilhelm

    Dabei seit:
    16.12.06
    Beiträge:
    174
    Nach eigenem Geschmack würde ich mich mit PHP dran versuchen...
    Aber nein.

    Soll eine Anwendung für den gewöhnlichen Desktop werden, CrossPlatform und grafisch.
    Also Java, da ich sonst nix beherrsche (oder so tue als ob) ;)
     
  4. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    grafisch? Baust' halt AppleScript drumrum...

    crossplattform? Nimmst halt Tcl/Tk ;)

    Wie auch immer: Wo ist das Problem? Wenn die Zeilen nicht gigantomanisch lang sind (naja, < 27MB schätze ich) liest Du halt Zeile für Zeile ein und pumpst es in die Datenbank. Sowas sollte Java doch locker hinbekommen.

    Also ich sehe da keine Probleme. Zumindest keine, die Du hier beschrieben hättest.
     
  5. Trapper

    Trapper Boskop

    Dabei seit:
    12.05.05
    Beiträge:
    213
    Zumindest das "Schreiben in die Datenbank" könntest du mit Hilfe eines Puffers eleganter machen, indem du immer erst n Einträge sammelst und diese dann in einem Rutsch wegschreibst. Dazu würde sich ein BatchStatement (siehe addBatch in PreparedStatement) anbieten.
    Bringt Performance-mäßig vor allem dann etwas, wenn die Datenbank auf einem externen Host läuft und du dich via Netzwerk zu ihr verbindest.
     
  6. smile

    smile Klarapfel

    Dabei seit:
    11.01.05
    Beiträge:
    280
    jdbc -> autocommit ausschalten und die sql statements vernünftig zu batches zusammenfassen. Dann gibts keine Probleme. 27MB sind ja nun auch nicht sooo viel - das würde ja sogar noch in den Speicher passen <duckundrenn>
     
  7. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Also ich sehe da jetzt auch nicht so das Problem.

    27MB ist jetzt auch nicht sooo irre viel.

    Wie liest Du denn genau die Daten ein?
     
  8. Katzenfutter

    Katzenfutter Kaiser Wilhelm

    Dabei seit:
    16.12.06
    Beiträge:
    174
    FileReader, meinetwegen BufferedReader, mit den gängigen Readern eben.
    Muss die einzelnen Reihen aus der CSV-Datei noch parsen, da das Ganze ein leicht seltsames Format hat...
    Bin da ein bißchen am Rumspielen, grade auch was JDBC angeht.
    Muss dabei auch ein bisschen auf die Performance achten... der Heap wird bei 27MB Daten schon knapp ;)
     
  9. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Und das übliche

    Code:
    
    		BufferedReader bufferedReader = new BufferedReader(new FileReader(path));
    		String tmpLine = null;
    		while((tmpLine = bufferedReader.readLine())!=null) {
    			//Verarbeitun
    		}
    
    
    taugt dir nicht?

    Ich hab damit gerade testhalber ein 50MB Datei eingelesen und das lief wunderbarst.
    Die SQL-Statemens würde ich halt nicht unbedingt "sammeln" und dann abschiessen.
     
  10. Katzenfutter

    Katzenfutter Kaiser Wilhelm

    Dabei seit:
    16.12.06
    Beiträge:
    174
    Die Lösung liegt in einem einzigen SQL-Statement.
    MySQL liest auch CSV-Dateien ein und schreibt sie, wie gewünscht vergleichbar einem INSERT-Statement, in die Datenbank.

    Wen das Statement interessiert, einfach fragen :)
     
  11. Katzenfutter

    Katzenfutter Kaiser Wilhelm

    Dabei seit:
    16.12.06
    Beiträge:
    174
    So mag das vielleicht auch funktionieren, klar.
    Nur sollte das ganze per JAVA und JDBC funktionieren.
    Also muss da ein passendes SQL-Statement her.

    Ich will ein Programm schreiben, welche die Daten importiert, anzeigt und nachher auch auswertet... mit Charts und Hastenichgesehen ;)
     

Diese Seite empfehlen