2017-10-20 19 views
2

私はOpenCSVを使用してCSVファイルを読み込み、7番目の列を格納する以下のコードブロックを持っています。私が直面している問題は、CSVファイルでデリミタとして;を使用しますが、デリミタとしても,が必要です。どうすればこれを避けることができますか?セミコロンで区切られたcsvを読む

クライアントから編集不可能なファイルを取得するため、CSVに「」を入れることはできません。

 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

これはどの言語ですか?それはJavaのように見えます。質問にはプログラミング言語でタグを付ける必要があります。質問の下にある「編集」リンクを参照してください。 –

+0

はいJAVAは申し訳ありませんがリンクを忘れました。 –

+1

投稿したコードはカンマで反応しません。 [mcve]を入力してください。 – Thomas

答えて

4

私はcount INGが少し間違って行われていたと思いますOpenCSV

CSVReader(reader, ';') 

のセパレータをオーバーロードされたバージョンを使用してください:あなたは、forループの代わりに

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++; 
     } 
    } 

ができ完了しました:

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

第7フィールドはインデックス6を持つ必要があります。

+0

あなたはreader = new CSVReader(sr、 ';')のような意味ですか? これは、セミコロンの最初のインスタンスの後で壊れ、それ以降は読み取られません。 –

+0

zetcode.comの[ReadNumbers2.java](http://zetcode.com/articles/opencsv/)を参照してください。私は答えにいくつかのコードを追加します。 –

+0

ありがとう、これは私が必要としたとおりに正確に働いた。 –

関連する問題