2016-12-21 3 views
0

Я зацикливаю csv. У меня есть два вопроса:Выбор второго столбца (FileReader)

1) Я выбирающие второй столбец по имени, как

if(tab[1].equals("Col2") 

Я не хочу, чтобы поместить название столбца. Я хочу выбрать только второй столбец.

2) как пропустить первую строку (заголовок)

Ниже приведен пример кода для обхвата CSV:

String csvFile = "C:\\test.csv"; 
BufferedReader br = null; 
String line = ""; 
String cvsSplitBy = ";"; 

try{ 
    br = new BufferedReader(new FileReader(csvFile)); 

    while ((line = br.readLine()) != null) { 
     String[] tab=line.split(cvsSplitBy);  

     int tmp; 
     if(tab[1].equals("Col2")){     

      tmp = Integer.parseInt(tab[2]); 

       for(int i=0;i<tmp;i++){ 
        // TO DO 
       } 
     } 
    } 
} 
+1

Привет, вы можете попробовать opencsv LIB. – Cotrariello

+0

1) Вы не выбираете столбец по имени, вы выбираете второй столбец с помощью 'tab [1]', а затем сравниваете его с '' Col2 "'. Или я неправильно понял вопрос? – njlarsson

+0

@njlarsson - правильный – 4est

ответ

1

Лучше, чтобы использовать CSVReader для этого, который предоставляет много интерфейсов для обработки ваши файлы csv. Вот полный рабочий код, конечно, без обработки исключений.

String csvFile = "C:\\test.csv"; 
CSVReader reader; 
String[] nextRow; 
char cvsSplitBy = ';'; 

try { 

    //Last argument will determine how many lines to skip. 1 means skip header 
    reader = new CSVReader(new FileReader(csvFile), cvsSplitBy, CSVParser.DEFAULT_QUOTE_CHARACTER, 1); 

    while ((nextRow = reader.readNext()) != null) { 

     if(nextRow.length > 2){ 
      //nextRow[1] will always give second column value 
      int tmp = Integer.parseInt(nextRow[1]); 
      for (int i = 0; i < tmp; i++) { 
       // TO DO 
      } 
     } 
    } 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

сделал br.readLine(); .......... теперь как выбрать столбец не используя имя? – 4est

+0

Вы использовали 'CSVReader' или ваш' BufferedReader'? –

+0

Im, изменяющийся на CSV ..... Можете ли вы, пожалуйста, показать мне, как теперь смотреть в цикле? while ((line = br.readLine())! = null) – 4est

0

Ниже приведен пример использования Apache Commons CSV, и его CSVParser.

Первая строка считается заголовком и пропускается (withFirstRecordAsHeader()), к «столбцам» каждой записи можно обращаться со своим индексом (get(int)). Индексы основаны на 0.

Просто адаптируйте кодировку и CSVFormat в соответствии с вашими потребностями.

CSVParser parser = null; 

try { 

    parser = CSVParser.parse(new File(csvFile), Charset.forName("UTF-8"), 
      CSVFormat.RFC4180.withFirstRecordAsHeader()); 

    List<CSVRecord> records = parser.getRecords(); 

    for (CSVRecord record : records) { 

     int tmp = Integer.parseInt(record.get(1)); 

     for (int i = 0; i < tmp; i++) { 
      // TO DO 
     } 

    } 

} catch (IOException e) { 

    e.printStackTrace(); 

} finally { 
    try { 
     parser.close(); 
    } catch (IOException e) { 

    } 

} 
0

С univocity-parsers это становится кусок пирога:

CsvParserSettings parserSettings = new CsvParserSettings(); //many options here, check the tutorial. 
parserSettings.setHeaderExtractionEnabled(true); //header is extracted and not part of the result 
parserSettings.selectIndexes(1); //select 2nd column (indexes are 0-based) 
CsvParser parser = new CsvParser(parserSettings); 
List<String[]> allRows = parser.parseAll(csvFile); 

Обратите внимание, что это будет работать, даже если некоторые строки пусты имеют только одну колонку, в то время как все другие решения, размещенные здесь не получится если вы сами не справитесь с такими ситуациями.

Не только это включает в себя меньше кода (и сложности), парсер также ~ в 4 раза быстрее, чем Commons CSV, и ~ 3 раза быстрее, чем OpenCSV.

Отказ от ответственности: Я автор этой библиотеки, он с открытым исходным кодом и бесплатно (Apache v2.0 Лицензия)

+0

привет, под csvFile, могу я поставить: String csvFile = "C: \\ test.csv"? – 4est

+0

Вам не нужно: Файл csvFile = new File ("c: /test.csv"); –

Смежные вопросы