2016-02-17 2 views
0

У меня есть файл CSV для чтения и выборочные данные ниже:данные CSV генерируют убывающей последовательности

SEQ  NAME GROUP 
1  MARK  A 
2  KEVIN  A 
3  JOE  A 
1  MARY  B 
2  JANE  B 
3  ANN  B 
4  MAY  B 

Я не могу найти простой способ сделать это в Java, который будет читать вышеуказанный файл CSV и добавить еще один столбец, который просто последовательность нисходящей как REV колонок:

SEQ  REV  NAME GROUP 
1  3  MARK A 
2  2  KEVIN A 
3  1  JOE  A 
1  4  MARY B 
2  3  JANE B 
3  2  ANN  B 
4  1  MAY  B 

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

Любые идеи, пожалуйста?

Обновление: Извините, но я должен использовать обычную java без какой-либо библиотеки, поскольку мы работаем с унаследованной системой.

+0

Посмотрите на некоторые библиотеки CSV, такие как [this] (http://opencsv.sourceforge.net). Они облегчили бы эту работу. – ArcticLord

+0

Прочитайте значения всего файла в 2D-массиве, а затем перепишите данные в этом массиве в файл вместе с новым столбцом. – cdaiga

ответ

0

Вы можете попробовать использовать supercsv, который даст вам карту карты значений столбцов (проверьте метод CsvMapReader) , после чего вы можете перебирать и группировать его в соответствии с вашими требованиями.

Надеется, что это помогает

0

Если вы читаете одну строки, вы не знаете длину группы для текущей группы. Так разделил его на два прохода.

Передача 1 предназначена только для определения длины группы для каждой группы. Вы можете сохранить его в Map<String, Integer> с именем группы в качестве ключа и (до сих пор) максимальной длиной группы. Для каждой строки вы должны посмотреть, если уже есть запись для этой группы. Если да, увеличьте значение. Если не сохранить 1 для этой группы.

Затем в Pass 2 вы читаете файл строки за строкой во второй раз. Но с приведенной выше картой вы уже знаете максимальную длину группы для текущей группы.

Если файл слишком велик для хранения всех групп в памяти, вы должны сохранить их в файле, например. с RandomAccessFile. Но легче увеличить память.