Récupération d'un champ dans un fichier

Résolu/Fermé
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 - 4 févr. 2013 à 10:29
ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 - 4 févr. 2013 à 16:22
Bonjour,

J'ai un fichier dans lequel le mot VALEUR peut être présent plusieurs fois.
Ce que je veux faire c'est récupérer les 34 caractères situés après le deuxième champ VALEUR rencontré.

J'ai fait ce bout de code mais cela ne fonctionne pas.

Pouvez-vous m'éclairer ?

for (File fic : lst){
			try{
				System.out.println("Fichier en cours de traitement : " + fic.getName());
				String line;
				String champ;
				int champCount = 0 ;
				BufferedReader br = new BufferedReader(new FileReader(fic));
				while ((line = br.readLine()) != null)
					{
					int startF = 0;
					if ( line.indexOf("VALEUR") != -1){
						champCount++;
						System.out.println("VALEUR n°" + champCount);
						startF = line.indexOf("VALEUR");
						System.out.println("Index de début" + startF);
					}
					if (champCount == 2){
						System.out.println("VALEUR 2 OK");
						champ = line.substring(startF, startF + 34);
						FileUtils.write(outputPath,resultFile, champ);
					}
					}
					br.close();
				}
				catch(FileNotFoundException exc) { 
					System.out.println("File not found" );  
					}
				catch(IOException ioe) { 
					System.out.println("Erreur IO" ); 
					}
		}

A voir également:

7 réponses

ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 23
4 févr. 2013 à 10:46
je comprend pas ton code, tu a plusieurs fichiers dans lequel tu veux chercher le mot VALEUR ou t'a un seul fichier. Si t'a un seul fichier, a quoi te sert le
 for (File fic : lst)
lst est-il un tableau ou vector de File ?

0
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
4 févr. 2013 à 10:48
En effet, j'ai plusieurs fichiers et dans chaque fichier je veux récupérer les 34 caractères après la deuxième occurrence de la chaine VALEUR.
0
ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 23
4 févr. 2013 à 11:28
c'est quoi ça
FileUtils.write(outputPath,resultFile, champ);
et la signifacation des variables?
0
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
4 févr. 2013 à 11:38
C'est une méthode que j'utilise pour sauvegarder le champ que j'ai récupérer ça n'a rien à voir avec la lecture de mon fichier.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 4/02/2013 à 11:53
Un peu d'expressions régulières peut-être ?

for (File fic : lst)
{
    Scanner sc = new Scanner(fic);
    sc.findWithinHorizon("VALEUR",0);
    String s = sc.findWithinHorizon("VALEUR[\\x00-\\xffff]{34}",0);
    sc.close();
    System.out.println(s==null ? null : s.substring(6));
}
La confiance n'exclut pas le contrôle
0
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
4 févr. 2013 à 11:42
Merci mais ton code me retourne null à chaque fois.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 févr. 2013 à 11:47
Donc, c'est que tu n'as jamais deux champs VALEUR avec 34 caractères après le deuxième VALEUR...

Voici, un fichier que j'ai testé, ça fonctionne bien :

abcdefghijkl
mnopVALEURqrstuvw
xyzVALEUR1234567890123456789012345678901234567890

Résultat renvoyé :

1234567890123456789012345678901234
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 4/02/2013 à 12:00
Remarque : je viens de modifier \p{ASCII} en [\x00-\xffff] pour supporter tout l'UTF-16 de Java.
0
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
4 févr. 2013 à 12:02
tous mes fichiers contiennent 2 fois le champs VALEUR et ce dernier est suivi de 34 caractères, le problème vient surement du fait que les fichiers ont un format propriétaire et du coup lorsque je l'ouvre avec notepadd++ je me retrouve avec des caractères NUL surligné en gras.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 févr. 2013 à 12:06
Je ne connais pas notepad++ je ne saurais pas dire à quoi correspond les "caractères NUL surligné en gras", essayes de lire ton fichier avec le bloc-notes Windows pour voir...
Mais c'est peut-être des caractères Unicode, donc essaye mon code avec la modification que j'ai faite sur l'UTF-16.
0
ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 23
4 févr. 2013 à 11:47
aulieu d'utiliser ton FileUtils, déclare une ouputfile avant d'entrer dans ta boucle de for
PrintWriter outputfile = new PrintWriter(new FileWriter(filename));

et a chaque lecture fait un print dans le outputfile
outputfile.print(champ);
, dc à la place de FileUtils, use ouputfile.print.....
0
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
4 févr. 2013 à 12:03
merci pour l'info mais ceci n'est pas le coeur de mon problème
0
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
4 févr. 2013 à 14:49
Je suis passé par une autre méthode merci de votre aide.
0
ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 23
4 févr. 2013 à 16:22
Merci de poster la solution pour aider les prochains venus qui auront le meme problem
0