0

csv ファイルの例を次に示します。

顧客番号、名、姓、生年月日、郵送先住所、既婚、子供の数、お気に入りの見積もり、電子メール、ロイヤルティポイント

1,John,Dunbar,13/06/1945,"1600 Amphitheatre Parkway Mountain View, CA 94043 United States",,,"""フォースと共にありますように"" - スターウォーズ",jdunbar@gmail.com, 0
2,Bob,Down,25/02/1919,"1601 Willow Rd. Menlo Park, CA 94025 United States",Y,0,"""率直に言って、私の愛する人、私は気にしません."" -風と共に去りぬ",bobdown@hotmail.com,123456

たとえば、lastName に属するすべての列の値を取得するにはどうすればよいですか?
結果は [Dunbar, Down] になるはずです。

ドキュメントを検索しようとしましたが、有用な例が見つかりませんでした。

もう 1 つの質問は、getLineNumber() メソッドの意味は何ですか? ドキュメントを読んだところ、「ファイル内の現在の位置を取得します。ファイルの最初の行は行番号 1 です。 」と書かれています。しかし、私はまだ混乱しています。

4

2 に答える 2

1

いくつかのオプションがあります。私は CsvListReader を使用しましたが、代わりに CsvMapReader または CsvBeanReader を簡単に使用できます。

Collectorセル プロセッサを使用できます。

private static final String CSV = "firstName,lastName\nJohn,Dunbar\nBob,Down";

@Test
public final void testCollector() throws IOException {
    ICsvListReader reader = new CsvListReader(new StringReader(CSV), 
        CsvPreference.STANDARD_PREFERENCE);
    reader.getHeader(true); // skip header

    // Collector processor 'collects' values from a column
    List<Object> firstNames = new ArrayList<Object>();
    CellProcessor[] processors = {new Collector(firstNames), null};

    while(reader.read(processors) != null){
        // just keep reading - Collector will collect the values
    }

    // prints: [John, Bob]
    System.out.println(firstNames);
}

または、Super CSV が各行を読み取った後に、関連する列を取得します。

@Test
public final void testManual() throws IOException {
    ICsvListReader reader = new CsvListReader(new StringReader(CSV), 
        CsvPreference.STANDARD_PREFERENCE);
    reader.getHeader(true); // skip header

    List<String> firstNames = new ArrayList<String>();

    List<String> line;
    while((line = reader.read()) != null){
        firstNames.add(line.get(0));
    }

    // prints: [John, Bob]
    System.out.println(firstNames);
}

いずれにせよ、ファイル全体を読み取る必要があります。CSV はスプレッドシートではなく、特定の列のすべての値を簡単に取得することはできません (レコードは複数の行にまたがる可能性があります!)。それはあなたの次の質問に私をもたらします...

javadoc から直接:

getLineNumber() : ファイル内の現在の位置を取得します。ファイルの最初の行は行番号 1 です。

getRowNumber() : 現在の行番号 (ヘッダーを含む、読み取られた CSV レコードの数) を取得します。これは、ファイルで読み取られた実際の行数である lineNumber とは異なります。最初の行は行 1 (通常はヘッダー行) です。

于 2014-02-02T21:19:29.137 に答える
0

たとえば readline を使用して csv の各行を読み取ることができる場合は、文字列を分割して列 2 を読み取るだけです。

String[] csvLine = getLine().split(",");  
String lastName = csvLine[2];  
于 2014-02-02T09:55:00.920 に答える