2011-03-06 2 views
0

Je suis confronté à un problème auquel j'ai été confronté il y a quelques jours. Je dois analyser ce fichier et convertir la chaîne en date. J'avais fait la même chose avec un autre fichier CSV il y a quelques jours. Cependant, le nouveau fichier donne cette erreur: java.text.ParseException: Date impossible: "" 3/4/2011 ""Je n'arrive pas à analyser la chaîne en date en utilisant jexcel api

Pourquoi la chaîne est-elle imprimée avec deux "" autour d'elle? Je pense que c'est la cause profonde du problème. Je poste le code ci-dessous. S'il vous plaît noter que le même code fonctionne pour un autre fichier où la date est imprimée en 3/4/2011 sans "" autour d'elle.

 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); 
} 
    } 
} 

Répondre

0

Je l'ai résolu. La chaîne contenait déjà des guillemets avant et arrière qui conduisaient à des guillemets lors de l'analyse. C'est pourquoi "" 3/4/2011 "". Je ajouté

 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); 
    } 

Même plus le format de date a été JJ-MM-AAAA; qui a été changé en jj/MM/aaaa. Maintenant, je reçois la bonne réponse.

Questions connexes