Bonjour tout le monde, cela fait a peu pres 1 semaine que j'apprend le java, et je suis actuellement entrain de codé un logiciel qui devrait me permettre de tronquer des chaines de caracteres a un endroit précis.
Explications :
J'ai un fichier texte qui est constitué d'exactement 310 caracteres par ligne.
On attend de mon logiciel qu'il coupe ces 310 caracteres afin que je puisse l'insérer dans une base de donnée ensuite.
exemple :
Mon fichier texte de 310 caractere :Ce que je voudrais que mon logiciel fasse :Code:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Comme il n'y a aucun séparateur dans ce fichier texte, je n'ai pas trouver d'autre moyen que de devoir insérer des ";" en guise de séparateur. (je ne sais pas si il y a un moyen plus facile, perso c'est le seul que j'ai trouvé)Code:zzz;zz;zzzz;zzzzzzzzzzz;zz;zzzzzzzzzzzzzzzzzzzzzz;zzzzzzz;zzzzzzzzzzzzzzzzzzzzz;zzzzzzzzzzzzzz;zzzzzzzzzzzz;zzzzzz;zzzz
Mon logiciel fonctionne très bien pour la premiere ligne de mon fichier, mais des qu'il passe a la 2e ligne, on dirait qu'il compte a partir de 3, puis 5, puis 7 ...
Voici mon code :
Je trouve que mon code est correct, pourtant voici ce qu'il renvoie :Code:
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103 public class lire { private static int n; public static void main(String[] args) throws IOException { ArrayList al1= new ArrayList(); // cette liste contient tout les emplacements exacte où il faut mettre un ";" al1.add(3); // Apres le 3e carac al1.add(3); //puis apres 3 carac al1.add(1); //puis 1 ... al1.add(6); al1.add(4); al1.add(2); al1.add(9); al1.add(2); al1.add(4); al1.add(8); al1.add(30); al1.add(65); al1.add(1); al1.add(47); al1.add(8); al1.add(8); al1.add(8); al1.add(8); al1.add(8); al1.add(85); //ce qui nous fait 310 caracteres FileInputStream fis = null; BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("test2.txt", true)); try { fis = new FileInputStream(new File("test.txt")); byte[] buf = new byte[8]; // Je n'ai trouvé que cette méthode pour lire caractere par caractere int n = 0; int compteurCaractere = 0; // a chaque caractere ecrit, ce compteur fait son travail int compteurCaractere2 = 0; // ce compteur compte jusqu'au 310e caractere, pour que je sache quand j'ai fini la ligne int compteurAl1 = 0; //compteur qui me permet de naviguer dans mon arraylist afin de placer les ";" while ((n = fis.read(buf)) >= 0) { for (byte bit : buf) { bufferedWriter.write((char)bit);// j'ecris ce qu'a lu la boucle au format char System.out.print( (char) bit); compteurCaractere += 1; compteurCaractere2 +=1; if ( compteurCaractere ==(int) al1.get(compteurAl1)){ //si le compteur = 1er element de mon arraylist, je réinitialise compteur, //et j'ajoute 1 a compteurAl1 pour passer au 2e element de mon array .. etc bufferedWriter.write(";"); System.out.print(";"); //fos.write(10); compteurCaractere = 0; compteurAl1 += 1; /*if (compteurAl1 == 20){ compteurCaractere =0; compteurAl1 = 0; }*/ } if ((compteurCaractere2 == 310) && (compteurAl1 == 20) ){ //si j'arrive au 310e caractere ou que je suis au bout de mon Arraylist //compteurCaractere = 0; compteurAl1 = 0; //je reviens au debut de mon Arraylist compteurCaractere2=0; //je réinitialise mon compteur de caractere }; } //je réinitialise le buffer à vide //au cas où les derniers byte lus ne soient pas un multiple de 8 //Ca me permet d'avoir un buffer vierge à chaque lecture et ne pas avoir de doublon en fin de fichier buf = new byte[8]; } System.out.println("Copie terminée !"); bufferedWriter.close(); } catch (FileNotFoundException e) { // Cette exception est levée si l'objet FileInputStream ne trouve // aucun fichier e.printStackTrace(); } catch (IOException e) { // Celle-ci se produit lors d'une erreur d'écriture ou de lecture e.printStackTrace(); } finally { // je ferme les flux de données dans un bloc finally pour s'assurer // que ces instructions seront exécutées dans tous les cas même si // une exception est levée ! try { if (fis != null) fis.close(); } catch (IOException e) { e.printStackTrace(); } } }}
Ce que je voudrais :Code:
1
2
3
4 zzz;zzz;z;zzzzzz;zzzz;zz;zzzzzzzzz;zz;zzzz;zzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;z;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz; z;zzz;z;zzzzzz;zzzz;zz;zzzzzzzzz;zz;zzzz;zzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;z;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;zz ; zz;z;zzzzzz;zzzz;zz;zzzzzzzzz;zz;zzzz;zzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;z;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;zzz;z
Code:
1
2
3
4 zzz;zzz;z;zzzzzz;zzzz;zz;zzzzzzzzz;zz;zzzz;zzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;z;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz; zzz;zzz;z;zzzzzz;zzzz;zz;zzzzzzzzz;zz;zzzz;zzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;z;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz; zzz;zzz;z;zzzzzz;zzzz;zz;zzzzzzzzz;zz;zzzz;zzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;z;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzz;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;
comme vous pouvez le voir, la premiere ligne est bien coué tout les 3/3/1/6/4/2... caracteres
Mais la 2e ligne est coupé apres 1/3/1/6/4/2..
et la 3e tout les 2/1/6/4/2..
Comme si il décalait de +2 caracteres a chaque ligne. j'ai pensé a un caractere invisible comme le \n
Mais je ne trouve pas de solution :(
N'hésiter pas a me dire si il y a des méthodes beaucoup plus simple pour insérer un caractere, ou si il y a une méthode plus simple de remplir son ArrayList, et je suis surtout perdu au niveau de la lecture/ecriture, il y a tellement d'outil ..
Merci d'avance pour votre aide