2016-06-14 53 views
0

Apache Commons CSVを使用してCSVファイルの列数をカウントするにはどうすればよいですか?私の目標は、列の数を決定できる限り、CSVParserのヘッダーを生成することです。Apache Commons CSVを使用してCSVの列数を数えるには?

例CSVファイル:この場合

0,1,0 
1,2,3 
2,3,4 
... 

列の数が3つであろう。

CSVParser parser = format.parse(file); 
CSVRecord firstRecord = parser.iterator().next(); 
int numColumns = firstRecord.size(); 



注:だから、私が探しているようなものがあり、私が最初にうまく限り、彼らは余分なラインを持っているように、ファイルを解析することができるように見えますそして私のような、フォーマットを作成します。

ファイル:

asdf 
0,1,0 
1,2,3 
2,3,4 
... 

形式:

CSVFormat = format.withFirstRecordAsHeader().withSkipHeaderRecord() 

答えて

0

私が見つけた解決策は、ファイルの内容の前に偽の行を追加し、ヘッダーレコードを抜く形式を使用することです。

public static CSVParser getParserForUnknownCSV(FileInputStream inputStream) 
{ 
    Byte[] fakeLine = ("fake line" + System.lineSeparator()).toByteArray(); 
    ByteArrayInputStream fakeLineStream = new ByteArrayInputStream(fakeLine); 
    SequenceInputStream prependedStream = new SequenceInputStream(fakeLineStream, inputStream); 
    InputStreamReader prependedReader = new InputStreamReader(prependedStream) 

    CSVFormat formatWithFakeHeader = CSVFormat.DEFAULT 
     .withSkipHeaderRecord() 
     .withHeader("fake header") 
     .withAllowMissingColumnNames(); 
    CSVParser parser = new CSVParser(prependedReader, formatWithFameHeader); 

    return parser; 
} 
0

これは、あなたが使用しているバージョンのわからない&にお答えするには遅すぎです。 Apache commonCSV 1.4(JDK 6+)では、firstRecord.size()を使用できます。

+0

私は実際に答えを見つけ、それを投稿するのを忘れました。上記の答え。 firstRecord.size()を使用する際の問題は、ヘッダーの列数が多すぎるか少なすぎる場合に、絶対にヘッダーが必要な場合にCommons CSVがファイルを拒否することです。 – Gladclef

関連する問題