2017-01-13 2 views
0

Ich versuche, eine Klasse, die die Zeichenfolgen in einer CSV-Datei in ein Array setzen, wenn instanziiert. Das Array wird jedoch mit Nullwerten gefüllt. Auch mein Zeilenzählcode zählt immer sechs zu hoch. Wer sieht die Fehler?CSV-Java-Klasse funktioniert nicht

public class CSV { 

    private String [] []Data; 
    public CSV(int linesSkip, String filename) throws IOException{ 
     Scanner in = null; 
     int length = 0, width = 0; 
     String input =""; 

     try{    
      in = new Scanner (new BufferedReader(new FileReader(filename))); 
      in.useDelimiter(","); 
      while(in.hasNextLine()){ 
       input = in.nextLine(); 
       width++; 
      } 
     }catch (Exception e){ 
      System.out.println(e); 
     } 
     String[] inArray = input.split(","); 
     length = inArray.length; 
     //System.out.println(width-6+ " "+ length); 
     String[][] data = new String[width-6][length]; 
     int row=0; 
     try{ 
      while(in.hasNextLine()){ 
       input = in.nextLine(); 
       String[] Arr = input.split(","); 
       for(int i=0; i < Arr.length; i++){ 
        data[row][i]=(Arr[i]); 
        System.out.print(data[row][i]); 
       } 
       row++; 
      } 
     }catch (Exception e){ 
      System.out.println(e);  
     } 
     this.Data=data; 
    } 
    public static void main (String [] args) throws IOException{ 
     CSV test = new CSV (0,"test.rtf"); 

     System.out.println(test.Data[0][0]); //this should print the 
    } 
} 
+0

warum das Rad neu erfinden? –

+1

Ihre erste Schleife liest alle Zeilen. Ihre zweite Schleife hat somit nichts zu lesen. –

+0

CSV-Verarbeitung ist schwieriger als es zuerst aussieht - verwenden Sie eine vorhandene Java-Bibliothek, um das für Sie zu tun. 'a,", ", c" ist gültig (so behandelt es _inside_ eines Kommas). CSV erfordert nicht, dass alle Zeilen auch die gleiche Anzahl von Spalten haben (und Sie werden oft feststellen, dass sie tatsächlich variieren, wobei regelmäßig die größte Anzahl von Spalten ein beliebiger Punkt weit von der ersten Zeile entfernt ist). Ihr Ansatz von [Spalte] [Zeilen] ist also "rückwärts". Es ist eine Liste von Zeilen mit jeweils unterschiedlicher Spaltenanzahl. –

Antwort

0

Sie sollten eine CSV-Bibliothek verwenden:

CSVReader reader = new CSVReader(new FileReader(filename)); 
List<String[]> allLines = reader.readAll(); 

for(String[] line: allLines){ 
    for(String field: line){ 
     System.out.print(field + "\t"); 
    } 
    System.out.println(); 
} 

Für den Code oben, müssen Sie die folgende Maven Abhängigkeit:

<dependency> 
    <groupId>com.opencsv</groupId> 
    <artifactId>opencsv</artifactId> 
    <version>3.8</version> 
</dependency> 
Verwandte Themen