CSV Datei einlesen und verarbeiten

Jefferio_19

Mitglied
Die Datei sieht folgendermaßen aus:
#
Name, Zahl, Zahl, Zahl
Name, Zahl, Zahl, Zahl
Name, Zahl, Zahl, Zahl
#

Ich kriegs einfach nicht gebacken diese werte in eine Variable zu schreiben

Java:
String line="";
        try{   
            BufferedReader in = new BufferedReader(new FileReader("File.txt"));
            while( (line = in.readLine()) != null) {
                String[]Information=line.split(",");
                
                String Name=((Information[0].split(","))[0]);         
                //int Zahl1=Integer.parseInt((Information[0].split(","))[1]);
                //int Zahl2=Integer.parseInt((Information[0].split(","))[2]);
                //int Zahl3=Integer.parseInt((Information[0].split(","))[3]);
            } 
         }catch (FileNotFoundException e){
                    e.printStackTrace();
                    }

Wenn ich mir den Namen ausgebe funktionier alles, ab Zahl 1 bekomm ich nen IndexOutOfBounds.

PS: Wie schaffe ich es das er die Zeilen mit # überspringt?
 
Java:
public static void CSVReader() throws FileNotFoundException, IOException{
        String csvFile = "File.txt";
	BufferedReader br = null;
	String line = "";
	String cvsSplitBy = ",";
        try{
            
            br = new BufferedReader(new FileReader(csvFile));
		while ((line = br.readLine()) != null) {
 

			String[] Info = line.split(cvsSplitBy);
			System.out.println("Name= " + Info[0] + " , Zahl=" + Info[1]);
 
		}
            
            
         }catch (FileNotFoundException e){
                    e.printStackTrace();
                    }
    }

Sollte doch funktionieren?
Name wird ausgegeben, dann erhalte ich wieder ein IndexOutOfBounds.
Was mach ich den falsch?
 
Sollte doch funktionieren?

Ja wenn die gelesene Zeile richtig ist dann schon.

Name wird ausgegeben, dann erhalte ich wieder ein IndexOutOfBounds.

Weil du auf einen Index zugreifst den es nicht gibt

Was mach ich den falsch?

Du vergisst zu überprüfen ob es sich um eine Zeile mit dem Inhalt "#" handelt.
Wenn dies zutrifft brauchst du keine Splitt usw. machen.
Oder du testest einfach ob nach dem Split die Länge das Arrays > X ist.
 
Was mir der IndexOutOfBounds Fehler vermitteln will ist mir klar.
Habe die CSV Datei der weilen ohne # gespeichert.

Mein Problem ist nur, dass ich nicht weis wie ich auf die Zahl zugreifen kann.
Den Namen kann ich mittels String[] Info = line.split(cvsSplitBy); bzw Info[0] aufrufen, aber wie die Zahlen?

Bin ein Anfänger, so tut es mir leid, wenn ich etwas offensichtliches übersehe.
 
Mein Problem ist nur, dass ich nicht weis wie ich auf die Zahl zugreifen kann.
Den Namen kann ich mittels String[] Info = line.split(cvsSplitBy); bzw Info[0] aufrufen, aber wie die Zahlen?

"split(...)" gibt dir ein Array zurück.
Jedes Array hat eine Länge, welche du mit "[ArrayVariable].length" abfragen kannst.
So kannst du kontrollieren wieviel Werte in deinem Array stehen.

Hier würde ich ansetzen und mal kontrollieren welche Zeile wurde gelesen und wieviele Element hat das Array nach dem Split.
 
Danke.
Das Array hat 4 Werte, so wie es auch eigentlich sein sollte.
Aufrufen der Referenzen:
System.out.println(Info[0]); //Name wird ausgegeben

System.out.println(Info[1]); //IndexOutOfBounds?
Mit 1 befinde ich mich noch im Wertebereich? Sollte doch klappen?
 
Ausgabe:
//? Da stimmt was nicht! Deshalb erhalte ich einen IndexOutOfBounds
1 //?
Joe Effro,1998,4,20
4
Jane Clue,1960,5,19
4
.
.
.

Java:
public static void CSVReader() throws FileNotFoundException, IOException{
        String csvFile = "File.txt";
	BufferedReader br = null;
	String line = "";
	String cvsSplitBy = ",";
        try{
 
            br = new BufferedReader(new FileReader(csvFile));
		while ((line = br.readLine()) != null) {
                        String[]Info=line.split(",");
                        System.out.println(line);
                        int Anz=Info.length;
                        System.out.println(Anz);
                        

                        //System.out.println(Info[1]);
                        //System.out.println(Info[2]);
                        
 
		}
 
 
         }catch (FileNotFoundException e){
                    e.printStackTrace();
                    }
    }


Datei: Anhang anzeigen File.txt
 
Zuletzt bearbeitet:
Also ich seh' da keinen Fehler. Du solltest (z.B. mit einem Hexeditor) prüfen, ob deine File.txt nicht mit einer Leerzeile beginnt; die hier verlinkte sieht korrekt aus.
 

Zurück
Oben