не удалось разобрать строку в дату с помощью jexcel api - PullRequest
0 голосов
/ 06 марта 2011

Я столкнулся с проблемой, с которой столкнулся несколько дней назад. Я должен проанализировать этот файл и преобразовать строку в дату. Я сделал то же самое с другим файлом CSV несколько дней назад. Тем не менее новый файл выдает эту ошибку: java.text.ParseException: Unparseable date: "" 3/4/2011 ""

Почему строка печатается с двумя "" вокруг нее? Я думаю, что это коренная причина проблемы. Я публикую код ниже. Обратите внимание, что тот же код работает для другого файла, в котором дата печатается как 3/4/2011 без "" вокруг нее.

     WritableWorkbook wbwrite=null;
     WritableSheet sheet=null;
     Label lwrite=null;
     BufferedReader br=null;
     Number n=null;

     String strFile="quotes.csv";
 String strLine = "";
     String st[];
     String delimiter="[,]";

int lineNumber = 0, tokenNumber = 0;
    int length=0;
    int counter=0;
    Calendar cal = Calendar.getInstance();

    DateTime datecell=null;

     if(strFile.equals("quotes.csv"))
     {
         System.out.print("in loop if");

         try
         {
            File file=new File("quotes.xls");
            wbwrite=Workbook.createWorkbook(file);
            System.out.print("file created");
            //path=file.getCanonicalPath();
            sheet = wbwrite.createSheet("Sheet 1", 0);
            lwrite=null;
            n=null;
            Date dtest=null;
            DateFormat df=null;
            Date dadd=null;

            df=new SimpleDateFormat("dd-mm-yy");

    //create BufferedReader to read csv file
    br = new BufferedReader( new FileReader(strFile));
    strLine = "";
    //st[]=empty;
            delimiter="[,]";
    lineNumber = 0; tokenNumber = 0;
            length=0;
    //read comma separated file line by line
    while( (strLine = br.readLine()) != null)
    {
        //System.out.print("strline="+strLine);
        //break comma separated line using ","
        st=strLine.split(delimiter);
                    length=0;
        while(length<st.length)
        {
            //display csv values
            //
            System.out.println("Line # " + lineNumber +
                    ", Token # " + tokenNumber
                    + ", Token : "+ st[length]);
                           if(tokenNumber==2)
                           {
                                 System.out.print("date="+st[length]);
                                  DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
                                  Date date = (Date)formatter.parse(st[length]);
                                  System.out.print("date="+date);
                                  cal.setTime(date);
                                  cal.set(Calendar.HOUR_OF_DAY, 17);
                                  cal.set(Calendar.MINUTE, 30);
                                  cal.set(Calendar.SECOND, 0);
                                  cal.set(Calendar.MILLISECOND, 0);
                                  date = cal.getTime();
                                  System.out.print("date="+date);
                                  datecell=new DateTime(tokenNumber,lineNumber,date);
                                  sheet.addCell(datecell);
                                  lwrite=new Label(tokenNumber,lineNumber,st[length]);
                                  sheet.addCell(lwrite);
                         }
                     if(tokenNumber==1||tokenNumber==5||tokenNumber==6||tokenNumber==7)
                     {
                            n=new Number(tokenNumber,lineNumber,Float.parseFloat(st[length]));
                           sheet.addCell(n);
                     }
                     tokenNumber++;
                     length++;
    }
    //reset token number
            //tokenNumber = 0;
}
    wbwrite.write();
    wbwrite.close();
}
catch(Exception e)
{
        System.out.print("error="+e);
}
  }
 }

1 Ответ

0 голосов
/ 06 марта 2011

Я решил это.Строка уже имела начальные и конечные кавычки, что приводило к двойным кавычкам при разборе.вот почему "" 04.03.2011 "".Я добавил

      if (st[length].startsWith("\""))
     {
      st[length] = st[length].substring(1, st[length].length());
      }
     if (st[length].endsWith("\""))
  {
        st[length] = st[length].substring(0, st[length].length() - 1);
  }

Плюс. Даже формат даты был дд-мм-гггг;который был изменен на дд / мм / гггг.Теперь я получаю правильный ответ.

...