Bonjour
Comment lire un fichier texte qui comporte des lignes vides car la méthode readline() me retourne:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
alors que la ligne suivante n'est pas vide.
Merci d'avance
Bonjour
Comment lire un fichier texte qui comporte des lignes vides car la méthode readline() me retourne:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
alors que la ligne suivante n'est pas vide.
Merci d'avance
il faudrait que tu nous montre ton code car le parcour d'un fichier jusqu'a EOF ne doit pas fournir se type d'exception...
Le voici
merci pour la promptitude
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 public class Flux_1 { public static void main(Statement stmt, String fichier, String[] val) { String nom_tbl = val[2]; String sep_chp = val[3]; String titre_col = val[4]; String def_tbl = val[6]; String[] num_chp = val[7].split("[|]"); Integer nb_chp = 0; String sql = ""; String valeur = ""; StringBuffer sql0 = new StringBuffer(); //System.out.println(val[8]); if(val[8].equals("no_concat")) { try{stmt.execute("TRUNCATE TABLE `"+nom_tbl+"`");}catch(final SQLException e){} if(nom_tbl.equals("f_emat")) {librairie.Init_tbl_import.f_emat(stmt);} if(nom_tbl.equals("f_matart")) {librairie.Init_tbl_import.f_matart(stmt);} if(nom_tbl.equals("t_detdep")) {librairie.Init_tbl_import.simat_it(stmt);} if(nom_tbl.equals("t_invgen")) {librairie.Init_tbl_import.simat_it(stmt);} if(nom_tbl.equals("t_invgendet")) {librairie.Init_tbl_import.simat_it(stmt);} if(nom_tbl.equals("t_matnom")) {librairie.Init_tbl_import.simat_it(stmt);} if(nom_tbl.equals("t_matref")) {librairie.Init_tbl_import.simat_it(stmt);} if(nom_tbl.equals("compta")) {librairie.Init_tbl_import.simat_it(stmt);} if(nom_tbl.equals("result_h")) {librairie.Init_tbl_import.simat_it(stmt);} } try {InputStream ips=new FileInputStream(fichier); InputStreamReader ipsr=new InputStreamReader(ips); BufferedReader br=new BufferedReader(ipsr); String ligne; //lecture ligne à ligne while ((ligne=br.readLine())!=null) {//nbre de colonnes dans le fichier importé if(ligne.split("["+sep_chp+"]").length > nb_chp){nb_chp = ligne.split("["+sep_chp+"]").length;} sql0 = new StringBuffer("INSERT INTO "+nom_tbl+" VALUES ( "); //découpage de la ligne suivant le séparateur SEP_CHP //si la ligne finit par le séparateur on ajoute " " if(ligne.substring(ligne.length()-1, ligne.length()).equals(sep_chp))ligne=ligne+" "; //découpage val = ligne.split("["+sep_chp+"]", 0); //si la taille de val < nb_chp -> ligne avec retour chariot on concatène avec la ligne suivante while(val.length<nb_chp) {ligne += br.readLine(); val = ligne.split("["+sep_chp+"]", 0);} //extraction et construction de la rqte d'insertion for(int i=0;i<num_chp.length;i++) {valeur = val[Integer.parseInt(num_chp[i], 10)-1]; //System.out.println(num_chp[i]+" - "+valeur); if(valeur.equals("")||valeur.equals(" ")){valeur = "NULL ,";}else{valeur = "'"+valeur+"' ,";} sql0 = sql0.append(valeur);} sql = sql0.substring(0, (sql0.length()-1))+")"; //insertion try{stmt.execute(sql);}catch(final SQLException e){} System.out.println("Sql: "+sql); } br.close(); } catch (Exception e) {System.out.println("popo:"+e.toString());} } }
L'exception est levée sur quelle ligne ? ( je doute fortement que se soit sur le readline... )
sur la ligne qui suit el while
et les lignes lues sont de la forme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 while(val.length<nb_chp) {ligne += br.readLine(); val = ligne.split("["+sep_chp+"]", 0);}
12545896;UTIL;19991201;347002;F;I;;00;N;;;VALISE;20;OUTILLAGE;;VALISE
;;;;0;;;M;;;;;;;;C;;;;;;#;
Tu peux nous donner la stack complète de l'exception ?
Au lieu de faire
fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 catch (Exception e) {System.out.println("popo:"+e.toString());}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 catch (Exception e) { System.err.print("popo:"); e.printStackTrace(); System.err.println() }
Tu es sûr que ton Exception est levée à la ligne
?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 while ((ligne=br.readLine())!=null)
Edit : tiens lol même réflexion que iohack ^^
Partager