Ищете библиотеку Java CSV, которая позволяет читать столбцы по имени - PullRequest
3 голосов
/ 18 июля 2011

Кроме того, позволяет обрабатывать длинные строки в удобочитаемой / удобной форме, как при их написании, так и при чтении.

Я изучил opencsv, но он не относится к элементам в строке каким-либо последовательным образом, и supercsv не позволяет просматривать столбец по имени, а только по номеру.

Еще одна оговорка - для которой мне нужно иметь возможность обращаться к столбцам по имени - это то, что число столбцов не является постоянным, и только часть заголовков столбцов является постоянным, что-то вроде:все цвета от 1 до 67 присутствуют в любом данном файле CSV.

Ответы [ 3 ]

6 голосов
/ 18 июля 2011

Я не могу говорить с opencsv, но если у вас фиксированное количество полей , вы можете использовать привязку JavaBean для выполнения чего-то подобного .

Super CSV однако, безусловно, поддерживает чтение и запись строк CSV по имени, используя CsvBeanReader, CsvDozerBeanReader или CsvMapReader (и их записи).

Если вы предпочитаете сохранять вещипросто и используйте карту (с именем столбца в качестве ключа и значением столбца в качестве значения), тогда вы можете использовать CsvMapReader .На сайте Super CSV есть примеры чтения и записи с помощью CsvMapReader.

Пример чтения:

 ICsvMapReader mapReader = new CsvMapReader(
      new FileReader("foo.csv"), CsvPreference.EXCEL_PREFERENCE);
 try {
  final String[] headers = mapReader.getHeader(true);
  Map<String, String> row;
  while( (row = mapReader.read(headers)) != null) {
    for (String header : headers) {
      System.out.println(header + " is " + row.get(header));
    }
  }
} finally {
  mapReader.close();
}

Запись очень похожа.

3 голосов
/ 14 мая 2015

Вы можете использовать библиотеку с открытым исходным кодом uniVocity-parsers .С помощью этой библиотеки вы можете не только выбирать столбцы по своему усмотрению, но и выбирать столбцы в любой последовательности.

Со следующими заголовками: Имя | Номер | Цвет1 | Цвет2 ...... | Цвет67|

Мы выбираем только столбцы "Color1", "Color3" и "Color2" из CSV со следующим кодом:

public static void main(String[] args) throws FileNotFoundException {

    // 1st, config the CSV reader
    CsvParserSettings settings = new CsvParserSettings();
    settings.getFormat().setLineSeparator("\n");
    settings.selectFields("Color1", "Color3", "Color2");

    // 2nd, creates a CSV parser with the configs
    CsvParser parser = new CsvParser(settings);

    // 3rd, parses all rows of data in selected columns from the CSV file into a matrix
    List<String[]> resolvedData = parser.parseAll(new FileReader("/examples/example.csv"));

    // 3rd, process the matrix with business logic
    for (String[] row : resolvedData) {
        StringBuilder strBuilder = new StringBuilder();
        for (String col : row) {
            strBuilder.append(col).append("\t");
        }
        System.out.println(strBuilder);
    }
}

И вы получите выходные данные для этих 3столбцы:

красный синий серый
синий желтый белый

1 голос
/ 18 июля 2011

CsvReader имеет метод get() для чтения столбца по имени.Однако копия CsvWriter не может выполнить запись в именованный столбец, поэтому она может решить только половину вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...