IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages Discussion :

Extraction de plusieurs données dans des fichiers texte


Sujet :

Langages

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Extraction de plusieurs données dans des fichiers texte
    Bonjour
    Je viens ici pour vous demander votre aide.
    J'ai un dossier dans lequel il y a 300 .jpg et 300 fichier .txt, 1 images correspond a un fichier texte ce qui veut dire qu'il ont le même nom, juste pas la même extension.
    Mon objectif est d'extraire diverses lignes dans ces 300 fichier .txt mais j'ai un problème :
    - Voici le code en images que j'ai fait juste qu'a présent avec quelques commentaires pour plus de lisibilité.
    - Le problème c'est que quand je lance le programme, la console d'eclipse ne m'affiche rien du tout et je ne sais pas du tout pourquoi, c'est la 1 ère fois que j'utilise la classe File
    J'espère que des personnes pourront m'éclairer car ça fait 1 jours et demi que je suis dessus et je m'arrache les cheveux
    J'avais pour idée de :
    - Lister tous les fichiers présent dans le répertoire
    - Les stocker dans un tableau
    - Parcourir ce tableau
    - et ensuite faire une condition du style - Si le fichier se termine par ".txt" alors je fais la suite d'instruction
    Mais ca ne fonctionne malheureusement pas
    En vous remerciant par avance pour votre aide

    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
     public class Main {
     
    	public static void main(String[] args) {
     
    		// Recuperation tous les fichiers d'un repertoire
    		File repertoire = new File("E:\\Apollo_7");
    		// Et les mets dans un tableau
    		File[] files = repertoire.listFiles();
     
    		// Lecture des fichiers texte du repertoire
    		try {
    			// Boucle For permettant de parcourir le tableau
    			for (int i = 0; i < files.length; i++) {
    				// Permet d'obtenir le nom des fichiers dans le tableau
    				String fileName = files[i].getName();
    				System.out.println(fileName);
    				if (fileName.equals(".txt")) {
    					// Ces lignes de codes permettent d'ouvrir les fichiers texte et de pouvoir les
    					// lires
    					InputStream ips = new FileInputStream(fileName);
    					InputStreamReader ipsr = new InputStreamReader(ips);
    					BufferedReader br = new BufferedReader(ipsr);
    					String ligne;
    					while ((ligne = br.readLine()) != null) {
    						// Suite de condition permettant d'extraire des lignes grace a leurs debut
    						if (ligne.startsWith("Photographer :")) {
    							System.out.println(ligne);
    						} else {
    							if (ligne.startsWith("Photo URL")) {
    								System.out.println("Photo URL : " + ligne.substring(66, 77));
    							} else {
    								if (ligne.startsWith("Taken Date")) {
    									System.out.println(ligne);
    								} else {
    									if (ligne.startsWith("AS")) {
    										System.out.println("Titre : " + ligne);
    									} else {
    										if (ligne.startsWith("Ap")) {
    											System.out.println("Description : " + ligne);
    										} else {
    											if (ligne.startsWith("N", 1)) {
    												System.out.println("Tags : " + ligne.substring(0));
    											}
    										}
    									}
    								}
    							}
    						}
    					}
    					br.close();
    				}
    			}
    		} catch (Exception e) {
    			System.out.println(e.toString());
    		}
    	}
    }

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Je vois déjà un problème ligne 17:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (fileName.equals(".txt"))
    Tu compares le nom du fichier avec ".txt", alors qu'il faut comparer l'extension…

    Tatayo.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'ai deja essayé de recuperer l'extension dans une variable et puis de la comparer mais ca ne marchais toujours pas, j'avais récupérer l'extension avec substring

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Montres-nous le code qui récupère l'extension, on pourra peut-être te dire ce qui ne va pas.

    Tatayo.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    j'avais teste deux méthodes :

    - La première :
    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // Boolean qui nous serviras plus tard
    boolean bName;
     
    // Permet de rechercher le motif specifie donc ce qui est dans la parenthese
    					Pattern uName = Pattern.compile("[a-zA-Z0-9_.+-]+\\.txt");
    					//Rechercher le motif specifie precedent dans la chaine fileName
    					Matcher mUname = uName.matcher(fileName);
    					// Boolean qui permet de confirmer qu'on a bien trouve le motif specifie dans la chaine
    					bName = mUname.matches();
    					//Si on l'a trouve, on affiche les fichiers avec le motif specifie
    					if (bName) {
    						System.out.println(mUname.group());
    					}
    et la deuxième méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for (int i = 0; i < files.length; i++) {
    				// Permet d'obtenir le nom des fichiers dans le tableau
    				String fileName = files[i].getName();
    				String extension = fileName.substring(22,25);
    				System.out.println(fileName); // Me sers d'affichage pour que je puisse voir a quoi correspond fileName
    				if (fileName.equals(extension)) {

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Pour la regex je ne me prononce pas, je mets toujours des heures pour trouver la bonne.
    Pour le deuxième code, tu sembles considérer que le nom du fichier fait toujours 25 caractères. Or rien ne prouve que ce soit le cas.
    Il n'existe pas une méthode toute faites pour extraire l'extension ? Sinon il faut prendre les 4 derniers caractères et comparer à ".txt".

    Je ne sais pas avec quel environnement tu développes, mais VS permet de poser des points d'arrêt et de surveiller le contenu des variables.
    Ca permet très souvent de trouver l'origine d'un problème.

    Tatayo.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je suis sous eclipse et donc sous windows, mais hormis ce problème pour recuperer l'extension est ce que le reste du code est cohérent je veux dire, si ca une logique et un sens.
    Et après en faite les fichiers dans le dossier ont une taille définie, ils s’arrêtent soit au 25 eme caractères ou 26 ème et ca aussi c'est un problème, j'ai cherché sur internet, si il y a une méthode pour récupérer automatiquement l'extension mais peut-etre avec FilenameUtils.getExtension ?
    Et pour la regex, pour moi c'est ça, je vois pas comment faire d'autres

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Ce qui m'embête le plus dans le code, c'est l'empilement de if else if.
    Je ne sais pas de quel langage il s'agit (C++ ? Java ?), mais il y a surement mieux à faire, par exemple avec une chaine de responsabilité.
    Le code serait bien plus lisible.
    Sinon pour les expression régulières (car il m'arrive de m'y frotter), j'utilise https://regex101.com/ pour les créer.

    Je pense qu'Eclipse permet de faire du débogage, donc je persiste: pose un point d'arrêt, avance pas à pas en surveillant les variables. Tu devrais rapidement trouver ce qui ne va pas.

    Tatayo.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'ai prévu d'enlever les if, else la c'est juste pour partir avec une base fonctionnel, après des que ca marcheras comme ça, j'organiserai ça avec des méthodes, je ferais appel a d'autres classe, bref je rendrais le tout plus lisible, j'ai été voir sur ton site pour le regex, bah ca commence mal, vu que ca m'affiche rien non plus ^^. Je connais pas du tout les chaines, je vais voir pour essayer de comprendre un peu comment ca fonctionne, et oui il y a un mode debogeur sur eclipse, je verrais à l'utiliser, mais pourtant quand je fais le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(fileName);
    , bah dans le terminal de eclipse il m'affiche le nom de tous les fichiers qui a dans le répertoire, je pense qui faut vraiment que j'arrive à choper cette extension de fichier , mais merci de ton coup de main

  10. #10
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    A la place (ou en complément) de la classe File, tu peux utiliser la classe FileInfo, qui entre autre à une propriété Extension qui te retourne ce que tu cherche.


    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

Discussions similaires

  1. extraction des données dans un fichier texte avec python
    Par mery gi dans le forum Général Python
    Réponses: 4
    Dernier message: 01/12/2016, 14h46
  2. Stockage de données dans des fichiers texte ou dans une base de données?
    Par Marc22 dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 17/12/2010, 01h39
  3. Extraction des données dans un fichier texte brut
    Par Patrice.peace dans le forum Langage
    Réponses: 10
    Dernier message: 16/03/2010, 09h40
  4. Sauvegarde de plusieurs données dans un fichier texte
    Par Christinita dans le forum MATLAB
    Réponses: 9
    Dernier message: 23/11/2008, 09h37
  5. Réponses: 3
    Dernier message: 22/02/2004, 20h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo