Разбор txt файла с использованием open csv - PullRequest
0 голосов
/ 19 февраля 2012

Может кто-нибудь сказать мне, как я могу проанализировать файл с помощью Open CSV?Я пытаюсь из многих дней, но я не получил результат.Вот мой код

package csv;

import java.io.IOException;

import au.com.bytecode.opencsv.CSVReader;
import java.io.FileReader;
import csv.*;
import java.io.*;
public class CSVParser {

public static void main(String[] args) throws IOException,java.io.FileNotFoundException   {

 try{ 
        CSVReader reader = new CSVReader(new FileReader("D:\\error.txt"));

     String sLine = null;

     String[] nextLine;

     int count=0,flag=0;
     nextLine=reader.readNext();
     while( (nextLine!=null)  )  
        {
            count++;
            System.out.println("count::: "+count + "and length is" +nextLine.length);
            System.out.println("String:::"+nextLine[0]);
            if ( (nextLine.length!= 9)   ) {

               flag=1;
                break;
            }

            nextLine=reader.readNext();
        }
    System.out.println("No of lines:::"+count);


    if(flag==1)
        {
                reader.close();
                System.out.println("errror");
                movefiles m= new movefiles();
                m.move("D:\\error.txt");
        }

    else{

                System.out.println("No error");

            try{
           while((nextLine=reader.readNext())!=null)      {
          String   code                = nextLine[0].toString();
          String   commodity           = nextLine[1].toString();
          float          contract_price      = Float.parseFloat(nextLine[2].toString());
          float          open_contract_vol   = Float.parseFloat(nextLine[3].toString());
          float          open_contract_price = Float.parseFloat(nextLine[4].toString());
          float          unpriced_vol        = Float.parseFloat(nextLine[5].toString());
          float          holdover_prod       = Float.parseFloat(nextLine[6].toString());
          String          date                = nextLine[7].toString();
          String          time                = nextLine[8].toString();
          System.out.println("Data From File is :::" + code +commodity +contract_price +open_contract_vol +open_contract_price +unpriced_vol +holdover_prod +date +time);
            }}catch(Exception e)

        {
            e.printStackTrace();
            System.err.println("here is error:::"+e.getMessage());
        }
    }
    reader.close();

    } catch(Exception e) {
        e.printStackTrace();
        System.err.println("error:::" +e.getMessage());
    }
  }
}

Но проблема в том, что когда я запускаю этот код, даже если мой файл содержит одну строку, он показывает две строки, а вторая строка ничего не содержит.Я думаю, что это может содержать пробелы.Кто-нибудь может сказать мне, почему, даже если мой файл содержит одну строку, он показывает мне 2 и как я могу преодолеть это.Как читать одну строку за раз.Пожалуйста, помогите мне, я новичок в CSV для этого я использую библиотеку jar opencsv

1 Ответ

2 голосов
/ 19 февраля 2012

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

if(flag==1) {
    reader.close();
    System.out.println("errror");
    movefiles m= new movefiles();
    m.move("D:\\error.txt");
} else{
    // ...
}

Проверка else не нужна, если не было ошибок ни в одной из строк (количество столбцов меньше 9), то первая часть кода уже перебралась бы до конца файла. Вы либо хотите:

  • Переместить разбор данных строки в первый цикл while.
  • Сохраняйте каждый массив String [] в списке, чтобы вы могли перебирать его позже

Создайте pastebin со своим входным файлом, чтобы мы могли убедиться, что в нем нет ошибок.

...