CSV Datei einlesen

Status
Nicht offen für weitere Antworten.

Dit

Bekanntes Mitglied
Hallo zusammen :D ,

Ich soll für einen Autohändler Tabellen in MySql speichern.
habe die Excel Datei bereits in CSV konvertiert. :wink:

nun bin ich gerade dabei die CSV einzulesen bzw. zu verarbeiten und da treten schon die ersten Probleme auf :(

die CSV Datei enthält 3 Spalten: Artikelnummer;Artikelbezeichnung;Preis in €
wo z.B. die Werte 1;Reifen;75 drin stehen.

nun soll ich die sachen in eine MySQL DB einlesen. Das Problem ist nun, dass ich alles in einem String "Datei" gespeichert habe, aber es am besten wäre die 3 Spalten in die 3 Sachen zu speichern:

int Artikelnummer;
String Artikelbezeichnung;
int Preis;

denn so könnte ich die einzelnen Variablen Problemlos einlesen...
aber wie bekomme ich den String oder die CSV Datei in die 3 Variablen gespeichert??

Ich bedanke mich schon mal für eure Hilfe :applaus:

Mein Code sieht zur zeit so aus:

Code:
try {
    BufferedReader File = new BufferedReader(new FileReader("Test.csv")); 
    String zeile; 
    
    try{ 
    datei = File.readLine(); 
        while (datei != null) 
    { 
    datei = File.readLine(); 
    System.out.println(datei);
    } 
    File.close(); 
    } 
    catch (IOException e) { 
    System.out.println("Fehler beim einlesen der Datei."); 
    } 
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
}

aber einen Array möchte ich auch nicht haben, da meine CSV Datei unterschiedlich groß sein kann.
 

Mag1c

Top Contributor
Hi,

du liest die Datei zeilenweise ein und splittest den String in die 3 Werte auf. Dabei hilft die z.B. die Methode split aus der Klasse String.

Ich würde aber wahrscheinlich einen anderen Weg gehen. Du könntest aus der CSV-Datei ein SQL-Skript machen, indem du die einzelnen Zeilen in ein INSERT-Statement umwandelst. Ein guter Texteditor sollte dafür ausreichen. Ich würde es wohl mit awk unter Linux machen.
Das wäre natürlich nur dann sinnvoll, wenn es sich um einen einmaligen Vorgang handelt.

Gruß
Mag1c
 

Murray

Top Contributor
Aufspalten kann man so einen String z.B. mit einem StringTokenizer, oder aber "mit der Hand am Arm" (mit indexOf und substring). Teilstrings in ints umwandeln: z.B. Integer.parseInt()

Mit der Forensuche sollten sich dazu diverse Threads finden lassen.
 

Dit

Bekanntes Mitglied
also an datei.split(";"); habe ich auch schon gedacht, oder eher gesagt versucht aber das will er auch nicht so recht...

vielleicht ist es auch doch die bessere Methode es über den String oder StreamTokenizer zu machen, aber auch da gibt es einige Probleme...

naja mal weiter versuchen...
aber thx für deine Hilfe
 

tini

Bekanntes Mitglied
Muss das nicht datei.split("[;]") heißen? also [] um das, wo man splitten will?
Dann sollte es doch funktionieren?
 

Mag1c

Top Contributor
Hi,

Dit hat gesagt.:
also an datei.split(";"); habe ich auch schon gedacht, oder eher gesagt versucht aber das will er auch nicht so recht...

was will denn nicht ?

Code:
String csv = "efiwefg;iwegfiwgf;wiufewifg";
String[] sp = csv.split(";");
System.out.println("sp.length = "+sp.length);

// Ausgabe: sp.length = 3

Gruß
Mag1c
 

RicoSoft

Aktives Mitglied
sonst kannst Du generell regex verwenden, um probleme mit den strings zu umgehen, wenn es strings in der form text="freddy;marcel" gibt (und es gibt ja immer sowas, das man eigentlich nicht haben will)
 

Dit

Bekanntes Mitglied
Dann bringt er genau diese meldung:

Code:
java.lang.Error: Unresolved compilation problem: 
	Unhandled exception type IOException

	at Converter.FileConverter.main(FileConverter.java:26)
Exception in thread "main"
 

Mag1c

Top Contributor
Hi,

bei Datei-Operationen können IOExceptions auftreten, die du auch irgendwie behandeln mußt. Oben in deinem Code ist das noch drin. Haste das alles gelöscht ?

Gruß
Mag1c
 

Dit

Bekanntes Mitglied
ne die Fehlermeldung war mein Fehler --> Sorry

aber der nutze???

denn was soll ich jetzt damit anfangen??

Code:
sp.length = 1
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
sp.length = 3
 

Dit

Bekanntes Mitglied
Ich will doch eigentlich nur die 3 Spalten der CSV Datei in 3 verschiedenen Variablen speichern... :roll:
ich gebe ja zu man findet ne menge im Internet aber nie das was man sucht...

Denkansatz :roll:

ich muss irgendwie eine Schleife schreiben die sofort durchläuft bis die Datein am ende ist...
und in der schleife nur:

den 1 wert in die 1 Variable
den 2 wert in die 2 Variable
den 3 wert in die 3 Variable

den 4 wert in die 1 Variable
den 5 wert in die 2 Variable
den 6 wert in die 3 Variable


usw....

dann wär ich ja zufrieden :lol:
 
B

bygones

Gast
och gott :) der code von magic ist nur bsp wie man split verwendet...

split liefert dir einen array, in dem die elemente drin sind.

Code:
String s = "Hallo;1;Was;0.5";
String[] split = s.split(";");
System.out.println(split[0]); // Ausgabe Hallo
System.out.println(split[1]); // Ausgabe 1
System.out.println(split[2]); // Ausgabe Was
System.out.println(split[3]); // Ausgabe 0.5
 

Dit

Bekanntes Mitglied
Das ist ja schon mal schön...

in System.out.println(split[0]); steht mein A_Nummer

ABER:

System.out.println(split[1]);
System.out.println(split[2]);
will er nicht haben...
ich habe auch deine "Methode" versucht die klappt...

ne was ist das nen müll.... :cry:
 

Mag1c

Top Contributor
Hi,

falls du den Debugger nicht benutzen kannst oder willst, helfen meist ein paar einfache Ausgaben bei der Fehlersuche:

Code:
datei = File.readLine();
System.out.println("Zeile = "+datei);
String[] split = datei.split(";");
System.out.println("Anzahl = "+split.length);
for (int i=0; i < split.length; i++) {
    System.out.println("Element["+i+"] = "+split[i]);
}

Gruß
Mag1c
 

Dit

Bekanntes Mitglied
Danke aber ich versuch es gerade erst mal noch über einen aderen weg...

Code:
  try {
		  	String fn = "StreamTokenizerDemo.java";

		    StreamTokenizer st = new StreamTokenizer(new FileReader("Test.csv") );
		    st.slashStarComments( true );
		    st.parseNumbers();
		    st.eolIsSignificant( true );

		    for ( int tval; (tval = st.nextToken()) != StreamTokenizer.TT_EOF; )
		    {
		      if ( tval == StreamTokenizer.TT_NUMBER ){
		      	StreamTokenizer A;
		      	A = st;
		      	System.out.println( "Artikel Nummer: " + A.nval );
		      }
		      else if ( tval == StreamTokenizer.TT_WORD )
		        System.out.println( "Wort: " + st.sval );
		      else if ( tval == StreamTokenizer.TT_EOL )
		        System.out.println( "Ende der Zeile" );

		      else
		        System.out.println( "Zeichen: " + (char) st.ttype );
		    }

nach dieser Methode kann ich schon mal String von Int unterscheiden...
die Strings schreibe ich schon mal in meine Variable rein...

dann bleiben noch die 2 Integer (Artikelnummer und Preis)

dann frag ich nach float.... und da Artikelnummer kein float ist müsste das ja eigentlich klappen...
 

messi

Bekanntes Mitglied
Warum benutzt du jetzt Code, der sich deiner CSV-Datei anpasst? Es muss genau anders herum sein! Die Daten müssen deinen Anforderungen genügen.

Du machst das Ganze wie bisher:
  • 10 Du liest eine Zeile ein.
    20 Wenn der String null ist, brichst du ab und schließt alle Streams, wie es sich gehört.
    30 Dann zerteilst du die Zeile bei jedem Semikolon. Für solche Einmal-Jobs reicht String.split(). Pass aber auf mit Semikolons, die zu einem Wert gehören und die meist escape't sind oder mit in dem quote't String stehen.
    40 Jetzt prüfst du, ob du genau drei Werte hast. Wenn nicht, dann gibst du eine Warnung aus und brichst ab oder schreibst diese Zeile in eine andere Datei und führst fort.
    50 Da sichergestellt ist, dass an dieser Stelle drei Werte vorhanden sind. Wird der erste und der dritte fest mit Integer.parseInt() bzw. Float.parseFloat() umgewandelt. Wenn auch nur einer nicht klappt, brichst du auch hier ab oder merkst dir diese unsaubere Zeile in einer anderen Datei.
    60 Nun hast du für die Zeile einen int, einen String und einen float und schreibst entweder SQL in eine Datei oder direkt in die DB. Wenn du in eine Datei schreibst, dann achte darauf, dass bestimmte Zeichen escape't werden müssen.
    70 GOTO 10
 

LordSam

Mitglied
Für das einlesen von CSV Dateien gibt es zahlreiche Bibliotheken, denn es reicht meist nicht aus, einfach nur den String zu 'splitten'. Gerade Excel hat ein spezielles Format um Textfelder zu speichern, so wird Text in Anführungszeichen (") gestellt. Anführungszeichen im Text werden wiederum 'escaped' durch ein doppeltes Anführungszeichen ("")... usw.

Bevor man also loszieht und die Datei selbst verarbeitet, nimmt man doch gleich eine der vielen Bibliotheken.

zum Beispiel: opencsv -> http://opencsv.sourceforge.net/

In deinem Fall wäre das etwa so:
Code:
    CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
    String[] firstLine = reader.readNext();    // liest die Kopfzeile. Wenn nur Daten drin sind, auskommentieren!!!
    if (firstLine != null) {
        String [] nextLine;
        while ((nextLine = reader.readNext()) != null) {
            // nextLine[] is an array of values from the line
            if (nextLine.length == 3) {     // sind es nicht genau 3 Werte, ist die Zeile 'falsch'
                String nummer = nextLine[0];
                String bezeichnung = nextLine[1];
                float preis = Float.parseFloat(nextLine[2]);    
            } else {
                System.out.println("Zeile konnte nicht richtig gelesen werden...");
            }
        }
    }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup) Allgemeine Java-Themen 4
Master3000 Java Datei mehrmals einlesen Allgemeine Java-Themen 4
R Sonderzeichen aus Datei einlesen und in Datei ausgeben. Allgemeine Java-Themen 17
F Datei in String-Array einlesen Allgemeine Java-Themen 8
N Datei Zeilenweise Einlesen, Versteckte Zeichen Allgemeine Java-Themen 5
R .txt Datei einlesen und auf der Konsole ausgeben lassen Allgemeine Java-Themen 11
K Datei (CSV-ähnlich) in Java einlesen & mit teil der Daten Graphen erstellen Allgemeine Java-Themen 9
J Input/Output Word Datei einlesen, verarbeiten und abspeichern Allgemeine Java-Themen 3
J Java 8 Datei einlesen Allgemeine Java-Themen 1
K Input/Output String aus einer Datei einlesen und in anderer Datei speichern Allgemeine Java-Themen 20
R Datei einlesen mit Win7 Allgemeine Java-Themen 8
F Datei einlesen funktioniert nicht Allgemeine Java-Themen 3
J BufferedReader Datei einlesen Allgemeine Java-Themen 8
J Jar Datei mit anderer .jar einlesen Allgemeine Java-Themen 4
J Best Practice Java 8 Datei einlesen und verarbeiten Allgemeine Java-Themen 2
T xls-Datei per Apache Commons CsvParser einlesen UTF-8 Zeichen russische Zeichen Allgemeine Java-Themen 2
D Wörter aus Datei einlesen Allgemeine Java-Themen 9
Ananaskirsche Input/Output Zeile aus Datei einlesen Allgemeine Java-Themen 10
H Excel Datei einlesen mit Apache POI Allgemeine Java-Themen 1
P Input/Output Datei einlesen per Scanner(f) - mit Cron gehts nicht Allgemeine Java-Themen 1
AssELAss XML Datei einlesen und anschließen formatiert ausgeben in Datei Allgemeine Java-Themen 0
L Input/Output Datei einlesen und Inhalt in Array schreiben Allgemeine Java-Themen 3
M Parameter-Datei einlesen (zeilenweise); Dateiintegrität Allgemeine Java-Themen 7
I Input/Output .csv Datei einlesen Allgemeine Java-Themen 4
S Datei in File-Objekt mit UTF-8 einlesen Allgemeine Java-Themen 2
K JAVA Datei einlesen Allgemeine Java-Themen 2
F JavaMail - Lokale eMail-Datei einlesen und parsen? Allgemeine Java-Themen 9
Q Text Datei einlesen Allgemeine Java-Themen 27
M Einlesen einer Datei in Java Allgemeine Java-Themen 3
D class Datei einlesen Allgemeine Java-Themen 4
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
C Datei als ASCII text einlesen ? Allgemeine Java-Themen 16
D Shortcut statt Datei einlesen Allgemeine Java-Themen 2
B Applet .java Datei einlesen, anzeigen Allgemeine Java-Themen 3
S Daten in Array als INT-Wert einlesen - jetzt als csv Datei Allgemeine Java-Themen 5
J Große Datei einlesen und gestückelt verarbeiten Allgemeine Java-Themen 4
Y Property Datei einlesen Allgemeine Java-Themen 2
FoolMoon Datei zeilenweise einlesen, aber nicht die erste Zeile! Allgemeine Java-Themen 3
J Mit Scanner-Klasse eine Datei zeilenweise einlesen und nur bestimmte Zeichen abfragen Allgemeine Java-Themen 11
G Datei einlesen: Umlaute sind Fragezeichen Allgemeine Java-Themen 23
G HTML-Datei einlesen, Plain Text in Textfile speichern Allgemeine Java-Themen 4
Y Excel datei einlesen und inhalt verarbeiten Allgemeine Java-Themen 8
H Mit Log4j erzeugte Datei einlesen Allgemeine Java-Themen 2
data89 Datei aus ausführbarer Jar einlesen Allgemeine Java-Themen 2
Noar Datei einlesen, bearbeiten, ausgeben Allgemeine Java-Themen 5
H Datei (zeilenweise) einlesen Allgemeine Java-Themen 3
D Datei im DOS/ASCII-Format einlesen. Allgemeine Java-Themen 9
D binäre Datei einlesen und schreiben? Allgemeine Java-Themen 3
J Text einer .csv Datei einlesen und Zeile in NEUE Zeile hänge Allgemeine Java-Themen 1
H2SO3- csv Datei mit unterschiedlichen Formatierungen einlesen Allgemeine Java-Themen 15
F Double mit Streams aus Datei einlesen Allgemeine Java-Themen 3
A Ini Datei einlesen Allgemeine Java-Themen 5
MQue Datei einlesen Allgemeine Java-Themen 10
K Datei als HEX oder dezimal gem. ASCII einlesen Allgemeine Java-Themen 4
MQue Datei einlesen/auslesen Allgemeine Java-Themen 4
T (Binary)Datei einlesen, Inhalt ändern, Datei schreiben Allgemeine Java-Themen 4
G Datei einlesen und in HashMap verarbeiten Allgemeine Java-Themen 3
G Einlesen von Parameterwerten aus einer txt-Datei Allgemeine Java-Themen 2
pikay TXT-Datei in 2-Dimensionales Array Einlesen Allgemeine Java-Themen 8
J XML-Datei byteweise einlesen und Kodierung auslesen Allgemeine Java-Themen 4
spacegaier Performanceproblem beim Einlesen aus Datei mittels Threads Allgemeine Java-Themen 23
P IOException beim einlesen einer XML- Datei Allgemeine Java-Themen 8
M bei Klick auf Button Datei einlesen Allgemeine Java-Themen 3
S große Datei einlesen! Allgemeine Java-Themen 7
P XML- Datei einlesen Allgemeine Java-Themen 11
S Problem beim Einlesen von byte-werten aus datei Allgemeine Java-Themen 2
E Datei rückwärts einlesen Allgemeine Java-Themen 5
B Problem bei Datei einlesen (Applet) Allgemeine Java-Themen 4
G 180 MB CSV-datei einlesen. Problem! Allgemeine Java-Themen 14
L Frage zu java.util.regex und Einlesen einer Datei Allgemeine Java-Themen 2
T iso datei (Image) mit Java einlesen und Inhalt entpacken Allgemeine Java-Themen 3
R Datei einlesen, Strings hinzufügen, abspeichern Allgemeine Java-Themen 4
K .ini Datei einlesen? Allgemeine Java-Themen 6
G outOfMemoryError beim Einlesen einer Datei abfangen? Allgemeine Java-Themen 13
flashfactor Komischer Fehler beim Einlesen einer Datei. Allgemeine Java-Themen 2
K .wav Datei einlesen Allgemeine Java-Themen 2
T Tastatureingabe in Datei einlesen Allgemeine Java-Themen 5
S Datei endlos einlesen (am Dateiende warten) Allgemeine Java-Themen 3
P Probleme beim Einlesen einer TXT/CSV-Datei aus einem JAR Allgemeine Java-Themen 7
M Datei in String einlesen Allgemeine Java-Themen 3
F NullpointerException beim Einlesen einer Datei Allgemeine Java-Themen 13
C Datei vollständig einlesen Allgemeine Java-Themen 3
D Bilder einlesen, bearbeiten und wieder in Datei schreiben Allgemeine Java-Themen 3
kodela StatusBar-Anzeigen auch in Log-Datei ausgeben Allgemeine Java-Themen 3
G Maven Projekt JAR-Datei Allgemeine Java-Themen 6
E XML - Datei Darstellung in IntelliJ als Baum Allgemeine Java-Themen 2
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
D Erste Schritte Mp3 Datei kann nicht von der Festplatte geöffnet werden - mit ChatGPT erstellt Allgemeine Java-Themen 7
J Filenotfoundexception obwohl Datei existiert Allgemeine Java-Themen 6
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
E Datei verschoben Event Allgemeine Java-Themen 3
D Datei mit "Kohsuke GitHub API" in Repository hochladen Allgemeine Java-Themen 2
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
G JavaFX Maven Projekt als .exe Datei exportieren Allgemeine Java-Themen 10
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
Neumi5694 Datei komprimiert Allgemeine Java-Themen 6
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
E java mithilfe url .jar datei öffnen Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben