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

Résolu
remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   -  
ajp55 Messages postés 426 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   23
 
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   Statut Membre Dernière intervention   6
 
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   Statut Membre Dernière intervention   23
 
c'est quoi ça
FileUtils.write(outputPath,resultFile, champ);
et la signifacation des variables?
0
remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   6
 
Merci mais ton code me retourne null à chaque fois.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   6
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   23
 
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   Statut Membre Dernière intervention   6
 
merci pour l'info mais ceci n'est pas le coeur de mon problème
0
remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
 
Je suis passé par une autre méthode merci de votre aide.
0
ajp55 Messages postés 426 Date d'inscription   Statut Membre Dernière intervention   23
 
Merci de poster la solution pour aider les prochains venus qui auront le meme problem
0