2017-10-20 14 views
2

Ich habe den folgenden Codeblock, der OpenCSV verwendet, um eine CSV-Datei zu lesen und die 7. Spalte zu speichern. Das Problem, dem ich gegenüberstehe, ist, dass ich ; als Trennzeichen in der CSV-Datei verwende, aber es , als Trennzeichen auch nimmt. Wie kann ich das vermeiden?Semikolon mit Trennzeichen lesen csv

Das Setzen von "" in CSV ist nicht möglich, da wir eine nicht editierbare Datei vom Client bekommen.

 CSVReader reader = null; 
    String[] nextCsvLine = new String[50]; 
    String splitBy = ";"; 

    int count = 0; 

    try { 
     StringReader sr = new StringReader(new String(in, offset, len)); 
     reader = new CSVReader(sr); 

     while ((nextCsvLine = reader.readNext()) != null) { 
      for (String linewithsemicolon : nextCsvLine) { 
       log.debug("Line read : "+linewithsemicolon); 
       String[] b = linewithsemicolon.split(splitBy); 
       if (count==0){ 
        count++; 
        continue; 
       } 
       else {  
        detailItems.add(b[7]); 
        log.debug("7th position: "+b[7]); 
        count++; 
       }     
      } 
+0

Welche Sprache ist das? Es sieht wie Java aus. Sie müssen Ihre Frage mit der Programmiersprache taggen - siehe den Link "Bearbeiten" unter Ihrer Frage. –

+0

Ja seine JAVA hat leider vergessen zu verlinken. –

+1

Der von Ihnen gepostete Code reagiert überhaupt nicht auf Kommas. Bitte geben Sie eine [MCVE] an. – Thomas

Antwort

4

Verwenden Sie die überladene Version mit Separator OpenCSV

CSVReader(reader, ';') 

Ich denke, die count ing etwas falsch gemacht wurde:

try (CSVReader reader = new CSVReader(sr, ';')) { 
    String[] nextCsvLine; 
    while ((nextCsvLine = reader.readNext()) != null) { 
     int count = 0; 
     for (String field: nextCsvLine) { 
      log.debug("Line read : "+linewithsemicolon); 
      if (count == 6) { // 7th column 
       detailItems.add(field); 
       log.debug("7th position: " + field); 
      }     
      count++; 
     } 
    } 

Statt die for-Schleife Sie könnten getan haben:

  if (nextCsvLine.length > 6) { 
      detailItems.add(nextCsvLine[6]); 
     } 

Wobei das siebte Feld Index 6 haben sollte.

+0

Meinten Sie etwas wie reader = new CSVReader (sr, ';'); Dies bricht nach der ersten Instanz von Semikolon und liest danach nicht mehr. –

+0

Siehe [ReadNumbers2.java] (http://zetcode.com/articles/opencsv/) von zetcode.com. Ich füge der Antwort etwas Code hinzu. –

+0

Danke, das hat genau so funktioniert, wie ich gebraucht habe. –

Verwandte Themen