обход карты, созданной из OpenCSV - PullRequest
0 голосов
/ 11 января 2019

У меня есть один столбец данных, выводимый из Google Sheets как CSV, а также из LibreOffice как CSV. Я попытался упорядочить оба файла, используя OpenCSV, но получаю лишь небольшую часть доступных данных.

Как я могу прочитать этот файл? Я не вижу запятых в этом CSV файле ... но это только один столбец данных.

файл:

thufir@dur:~/jaxb$ 
thufir@dur:~/jaxb$ head input.csv 
Field 1
Foo # 16

bar

baz

fdkfdl

fdsfdsfsdfgh
thufir@dur:~/jaxb$ 

вывод:

thufir@dur:~/NetBeansProjects/BaseXFromJAXB$ 
thufir@dur:~/NetBeansProjects/BaseXFromJAXB$ gradle run

> Task :run
Jan 10, 2019 3:36:08 PM net.bounceme.dur.basexfromjaxb.csv.ReaderForCVS printMap
INFO: Foo # 16
Jan 10, 2019 3:36:08 PM net.bounceme.dur.basexfromjaxb.csv.ReaderForCVS printMap
INFO: Field 1
Jan 10, 2019 3:36:08 PM net.bounceme.dur.basexfromjaxb.csv.ReaderForCVS printMap
INFO: Foo # 16

BUILD SUCCESSFUL in 1s
3 actionable tasks: 1 executed, 2 up-to-date
thufir@dur:~/NetBeansProjects/BaseXFromJAXB$ 

код:

package net.bounceme.dur.basexfromjaxb.csv;

import com.opencsv.CSVReaderHeaderAware;
import java.io.File;
import java.io.FileReader;
import java.net.URI;
import java.util.Collection;
import java.util.Map;
import java.util.logging.Logger;

public class ReaderForCVS {

    private static final Logger LOG = Logger.getLogger(ReaderForCVS.class.getName());
    private Map<String, String> values;

    public ReaderForCVS() {
    }

    public void unmarshal(URI inputURI) throws Exception {
        FileReader f = new FileReader(new File(inputURI));
        values = new CSVReaderHeaderAware(f).readMap();
    }

    public void printMap() {
        Collection<String> stringValues = values.values();
        for (String s : stringValues) {
            LOG.info(s);
        }

        for (Map.Entry<String, String> item : values.entrySet()) {
            String key = item.getKey();
            String value = item.getValue();
            LOG.info(key);
            LOG.info(value);
        }
    }
}

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

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

Чтение в файле в виде текста дает желаемый результат ...

1 Ответ

0 голосов
/ 01 февраля 2019

Похоже, что он работает аналогично другим CSVReaders Чтение руководства OpenCSV . Вот пример кода, который я использовал, который, кажется, работал:

CSVReaderHeaderAware csvReaderHeaderAware= new CSVReaderHeaderAware(new StringReader(DAOConstants.IND_DATA));
while (((values = (Map<String, String>) csvReaderHeaderAware.readMap())) != null)
{
      for (Map.Entry<String,String> entry : values.entrySet())  
            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

}
...