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

Entrée/Sortie Java Discussion :

Extraire des données d'un fichier txt dans un vecteur [Débutant(e)]


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 27
    Points : 17
    Points
    17
    Par défaut Extraire des données d'un fichier txt dans un vecteur
    Bonjour je suis débutant en Java, je suis actuellement une formation pour devenir developpeur, et je viens de commencer un stage en entreprise.
    Mon tuteur ma demandé d' extraire des données d'un fichier text dans un vecteur
    le fichier texte ressemble à ça:

    At 18:3:49
    ECC0CrysA Missing GOCCE Ratio (Gated Word/Raw) = 100.000
    ECC0CrysA Missing GOCCE Ratio (Gated Word/Raw) = 100.000
    ECC0CrysA AC suppression ratio = 10.8
    ECC0CrysB Missing GOCCE Ratio (Gated Word/Raw) = 100.000
    ECC0CrysB Missing GOCCE Ratio (Gated Word/Raw) = 100.000
    ECC0CrysB AC suppression ratio = 10.3
    ECC0CrysC Missing GOCCE Ratio (Gated Word/Raw) = 100.000
    ECC0CrysC Missing GOCCE Ratio (Gated Word/Raw) = 100.000
    ECC0CrysC AC suppression ratio = 8.9

    Je dois extraire à l'aide d'un vecteur les données en rouge.
    Pouvez vous m'aidez svp, ça fait 2 jours que je cherche et que je tourne en rond, merci à ceux qui m'aideront.

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par sam14 Voir le message
    Je dois extraire à l'aide d'un vecteur les données en rouge.
    Pouvez vous m'aidez svp, ça fait 2 jours que je cherche et que je tourne en rond, merci à ceux qui m'aideront.
    Tu peux faire quelque chose respectant l'algo suivant :
    1. Lire ligne par ligne
    2. Pour chaque ligne, vérifier si celle-ci respecte "ECC0Crys" puis "AC suppression ratio ="
    3. Si oui, extraire la lettre après "ECC0Crys" et la fin de ta chaîne
    4. Enregistrer ces données dans ton Vecteur

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Points : 89
    Points
    89
    Par défaut
    1ère étape : lire ton fichier ligne par ligne (pour ça, il y a foison d'exemples sur internet)

    2ème étape : détecter les lignes "intéressantes". Au jugé, je dirais que les lignes qui t'intéressent sont les lignes qui contiennent "AC suppression ratio ="
    -> String.contains("AC suppression ratio="); renvoie le booléen que tu cherches

    3ème étape : lire les données des lignes intéressantes. Là, j'imagine que tu veux ce qu'il y a juste avant et juste après "AC suppression ratio ="
    -> la méthode String.split(String) te sera très utile:

    renvoie un tableau contenant {"A";"B";"C"}

    et donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "ECC0CrysC AC suppression ratio = 8.9 ".split(" AC suppression ratio = ")
    renvoie un tableau contenant {"ECC0CrysC";"8.9"}

    Voilà, a priori, tu as tous les éléments.
    Juste au cas où, je te rajoute un lien vers la javadoc http://docs.oracle.com/javase/7/docs/api/index.html

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 27
    Points : 17
    Points
    17
    Par défaut Merci pour vos réponses
    Merci pour vos réponses,

    Jusque là j'ai réussi seulement à lire le fichier et je ne sais pas comment vérifier ligne par ligne les éléments qu'elle contient, voilà ce que j'ai fait pour le moment:

    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
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    public class test1 {
    	public static void main(String[] args){
    		String chaine="";
    		String fichier ="LogFileDataCheck.log";
     
    		//lecture du fichier	
    		try{
    			InputStream ips=new FileInputStream(fichier); 
    			InputStreamReader ipsr=new InputStreamReader(ips);
    			BufferedReader br=new BufferedReader(ipsr);
    			String ligne;
    			while ((ligne=br.readLine())!=null){
    				System.out.println(ligne);
    				chaine+=ligne+"\n";
    			}
    			br.close(); 
    		}		
    		catch (Exception e){
    			System.out.println(e.toString());
    		}
    }
    }

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Points : 89
    Points
    89
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ((ligne=br.readLine())!=null){
    System.out.println(ligne);
    chaine+=ligne+"\n";
    }
    A cette endroit là, la variable "ligne" contient la ligne courante. Donc au lieu de l'afficher et de l'ajouter à "chaine", il te suffit de la traiter

    tu peux donc faire un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while ((ligne=br.readLine())!=null){
      if(ligne.contains("AC suppression ratio =")){
      //traitement de la ligne...
      }
    }
    Ou mieux, envoyer la ligne dans une méthode à part qui se chargera d'effectuer le traitement

  6. #6
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par sam14 Voir le message
    Jusque là j'ai réussi seulement à lire le fichier et je ne sais pas comment vérifier ligne par ligne les éléments qu'elle contient, voilà ce que j'ai fait pour le moment
    Eh bien maintenant, il ne te reste qu'à parcourir la Javadoc de String et de trouver les méthodes qui pourraient t'intéresser (contains, startsWith, split, ...).

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 27
    Points : 17
    Points
    17
    Par défaut encore un petit coup de main svp
    Merci pour votre aide, comme je vous ai dit aupparavant je suis débutant et je maitrise pas les vecteurs, j'ai tenté qd même de l'inserer dans mon traitement mais en vains voici mon code:

    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
    public class test1 {
    	public static void main(String[] args){
    		String chaine="";
    		String fichier ="LogFileDataCheck.log";
     
    		//lecture du fichier	
    		try{
    			InputStream ips=new FileInputStream(fichier); 
    			InputStreamReader ipsr=new InputStreamReader(ips);
    			BufferedReader br=new BufferedReader(ipsr);
     
    			String ligne;
    			Vector vect=new Vector();
    			while ((ligne=br.readLine())!=null){
    				 if(ligne.contains("AC suppression ratio =")){
    					  //traitement de la ligne...
    					 vect.addElement(ligne.split("AC suppression ratio ="));
    					 for (int i = 0; i < vect.size(); i++) {
    						 System.out.println(vect.elementAt(i).toString());
    						 } 
     
    					  }
    					}
    			br.close(); 
    		}		
    		catch (Exception e){
    			System.out.println(e.toString());
    		}
    }
    }

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Points : 89
    Points
    89
    Par défaut
    Tu sembles ne pas comprendre ce que tu mets dans ton Vector.
    A la déclaration du Vector :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector vect=new Vector();
    Tu ne dis pas quel est le type de données contenues dans ton Vector. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Vector<Integer> vect=new Vector<Integer>(); //Déclaration d'un Vector contenant des entiers
    Vector<Float> vect=new Vector<Float>(); //Déclaration d'un Vector contenant des flottants
    Vector<MaClasse> vect=new Vector<MaClasse>(); //Déclaration d'un Vector contenant des objets de classe MaClasse.
    Ton code compile mais si tu utilises un éditeur correct, il doit au minimum te mettre un warning à cause de ça.

    Donc premièrement, tu dois décider ce que tu vas mettre dans ton Vector.

    Perso, je pense que le mieux est de faire une classe "MyData" à part contenant 2 attributs: "name" et "ratio" avec des Getters et Setters qui vont bien.

    Du coup, ta boucle se fait de la façon suivante :

    Vector<MyData> vect=new Vector<MyData>();

    Pour chaque ligne intéressante du fichier:
    -MyData data=new MyData();
    -Remplir l'objet data à partir des données issues de la ligne
    -vect.addElement(data);

  9. #9
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 318
    Points
    8 318
    Billets dans le blog
    52
    Par défaut
    Rapidement voici une liste de petites modifications :
    -> Déclaration du type d'objet contenu dans le vecteur.
    -> Programmation sous forme d'objet
    -> Déclaration de fonctions pour simplifié les opérations à réaliser.

    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
    import java.io.*;
    import java.util.Vector;
     
    public class FileParser {
     
    	public FileParser(){
    	}
     
    	public Vector<String[]> vect = new Vector<String[]>();
     
    	public static void main(String[] args){
    		String fichier ="LogFileDataCheck.log";
    		FileParser myFileParser = new FileParser();
    		myFileParser.parseFile(fichier);
    		myFileParser.displayVector();
    	}
     
    	public void parseFile(String filePath){
    		//lecture du fichier	
    		try{
    			InputStream ips = new FileInputStream(filePath); 
    			InputStreamReader ipsr = new InputStreamReader(ips);
    			BufferedReader br = new BufferedReader(ipsr);
    			String ligne;
    			while ( (ligne = br.readLine()) != null ){
    				this.parseLine(ligne);
    			}
    			br.close(); 
    		}		
    		catch (Exception e){
    			System.out.println(e.toString());
    		}
    	}
     
    	public void parseLine(String ligne){
    		if(ligne.contains("AC suppression ratio =")){
    			//traitement de la ligne...
    			this.vect.addElement(ligne.split("AC suppression ratio ="));
    		}
    	}
    	public void displayVector(){
    		for (int i = 0; i < this.vect.size(); i++) {
    			String[] liste = this.vect.elementAt(i);
    			System.out.println(liste[0]+""+liste[1]);
    		} 
    	}
    }
    Note : la fonction toString sur un tableau renvoie son hash qui ne te sert à rien. Tu dois faire un parcours de celui-ci pour l'afficher proprement. Ici, on a deux entrées dans le tabeau d'on j'ai directement affiché les deux valeurs sans réaliser de foreach.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 27
    Points : 17
    Points
    17
    Par défaut Merci
    Merci, je dois encore travailler sur le sujet afin de bien le comprendre,
    en tous cas votre aide ma été tres precieuse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. extraire des données d'un fichier .txt
    Par granbapt dans le forum C
    Réponses: 6
    Dernier message: 09/08/2012, 12h39
  2. [AC-2003] extraire des données d'un fichier txt en VBa
    Par afifaNancy dans le forum VBA Access
    Réponses: 8
    Dernier message: 24/04/2012, 16h41
  3. [Débutant] Besoin d'extraire des données d'un fichier txt
    Par Paul.R dans le forum MATLAB
    Réponses: 24
    Dernier message: 09/12/2009, 18h20
  4. Extraire des données d'un fichier .txt
    Par carlou135 dans le forum C++
    Réponses: 3
    Dernier message: 18/02/2008, 16h55
  5. Réponses: 7
    Dernier message: 29/09/2005, 10h19

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