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

avec Java Discussion :

Compter le nombre des occurences dans un fichier txt.


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef du projet web
    Inscrit en
    Août 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef du projet web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 18
    Par défaut Compter le nombre des occurences dans un fichier txt.
    Bonjour,

    Je cherche à parcourir un fichier "fruits.txt" où il y a plusieurs occurrences du même fruit (ou pas) sur certaines lignes. L'idée c'est qu'en premier temps de parcours la liste, prendre de la liste seulement une fois le nom de chaque fruit, son répétition.


    Affiche des fruits (un seul mot sans redondance) avec le nombre occurrences.

    A ce stade, je ne gère pas l'enregistrement du résultat dans un fichier resultat.txt

    Merci d'avance.
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    /*
    fruits.txt
    ...
    pomme 
    banane
    pomme 
    orange
    orange
    kiwi
    pomme 
    banane
    banane
    ...
    */
     
      package src.com.hemebiotech.analytics;
     
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
     
    public class ReadFruits {
     
     
    private String filepath;
    public ReadFruits(String filepath) {
    	super();
    	this.filepath = filepath;
    }
     
    	// serialisation
    	public List<String> GetFruits() {
    		ArrayList<String> result = new ArrayList<String>();
    		List<String> list = new ArrayList<String>();
     
    		if (filepath != null) {
    			try {
    				BufferedReader reader = new BufferedReader (new FileReader(filepath));
    				String line = reader.readLine();
     
    				  //transvaser resultat dans liste 
    				 //pour comparer et extraire seulement une fois le contenu d'une ligne
     
    				while (line != null) {
    					result.add(line);					
    					line = reader.readLine();
    					System.out.println(" - " + line);
     
    				}
    				reader.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
     
    		/*la liste des fruits dans un tableau list après 
    		serialisation dans le fichier fruits.txt */
     
    		list.addAll(result);
    		int occurenceNomber = 0;
    		for(int j=0; j < result.size(); j++) {
    			//comparer les deux index si l'accurrence existe on l'injecte dans la liste
    			// une seule occurence
    			if(list.get(j).equals(result.get(j))) {
    				list.add(result.get(j));
     
    				System.out.println(occurenceNomber + "nombre d'accurence");
    				occurenceNomber++;
    			}
    		}
     
    		return result;
    	}
     
     
     
     
    }

  2. #2
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    pourquoi pas un map?
    il existe de nombreuses discussions internet sur le sujet du décompte des occurrences:
    exemple: https://stackoverflow.com/questions/...-a-map-in-java

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 469
    Par défaut
    Citation Envoyé par linusminus Voir le message
    Bonjour,

    Je cherche à parcourir un fichier "fruits.txt" où il y a plusieurs occurrences du même fruit (ou pas) sur certaines lignes. L'idée c'est qu'en premier temps de parcours la liste, prendre de la liste seulement une fois le nom de chaque fruit, son répétition.


    Affiche des fruits (un seul mot sans redondance) avec le nombre occurrences.

    A ce stade, je ne gère pas l'enregistrement du résultat dans un fichier resultat.txt

    Merci d'avance.
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    /*
    fruits.txt
    ...
    pomme 
    banane
    pomme 
    orange
    orange
    kiwi
    pomme 
    banane
    banane
    ...
    */
     
      package src.com.hemebiotech.analytics;
     
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
     
    public class ReadFruits {
     
     
    private String filepath;
    public ReadFruits(String filepath) {
    	super();
    	this.filepath = filepath;
    }
     
    	// serialisation
    	public List<String> GetFruits() {
    		ArrayList<String> result = new ArrayList<String>();
    		List<String> list = new ArrayList<String>();
     
    		if (filepath != null) {
    			try {
    				BufferedReader reader = new BufferedReader (new FileReader(filepath));
    				String line = reader.readLine();
     
    				  //transvaser resultat dans liste 
    				 //pour comparer et extraire seulement une fois le contenu d'une ligne
     
    				while (line != null) {
    					result.add(line);					
    					line = reader.readLine();
    					System.out.println(" - " + line);
     
    				}
    				reader.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
     
    		/*la liste des fruits dans un tableau list après 
    		serialisation dans le fichier fruits.txt */
     
    		list.addAll(result);
    		int occurenceNomber = 0;
    		for(int j=0; j < result.size(); j++) {
    			//comparer les deux index si l'accurrence existe on l'injecte dans la liste
    			// une seule occurence
    			if(list.get(j).equals(result.get(j))) {
    				list.add(result.get(j));
     
    				System.out.println(occurenceNomber + "nombre d'accurence");
    				occurenceNomber++;
    			}
    		}
     
    		return result;
    	}
     
     
     
     
    }
    Je verrai bien un split et deux listes
    Rapidement
    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
     
    public class Fruits {
     
    	public static void main(String[] args) 
    	{
    		String listeFruits = "pomme\nbanane\npomme\norange\norange\nkiwi\npomme\nbanane\nbanane";
    		String[] fruits = listeFruits.split("\n");
    		List<String> noms = new ArrayList<String>();
    		List<Integer> quantites = new ArrayList<Integer>();
    		for(String s : fruits)
    		{
    			if (noms.contains(s))
    			{
    				int n = noms.indexOf(s);
     
    				quantites.set(n, quantites.get(n) + 1);
    			}
    			else
    			{
    				noms.add(s);
    				quantites.add(1);
    			}
    		}
    		for(int i = 0; i < noms.size(); i++)
    		{
     
    			System.out.println(noms.get(i) + "\t" + quantites.get(i));
    		}
     
    	}
     
    }
    Voilà.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Sauf que tu ne lis pas de fichier, là. Un split sur des données venant d'un fichier, c'est un peu ridicule a priori.

    Et franchement, une solution à base de Map est bien plus pratique. Plus efficace aussi en théorie, s'il y avait des milliers de mots.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 469
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Sauf que tu ne lis pas de fichier, là. Un split sur des données venant d'un fichier, c'est un peu ridicule a priori.

    Et franchement, une solution à base de Map est bien plus pratique. Plus efficace aussi en théorie, s'il y avait des milliers de mots.
    Ne connaissant pas la taille de son fichier j'ai opté pour quelques choses de simples algorithmiquement et ne nécessitant pas de grosses connaissances pour un débutant.
    Je partais du principe que son fichier pouvait tenir en mémoire et donc ma solution était faisable. Je supposais aussi d'après son code qu'il savait passer le contenu d'un fichier texte dans une String.
    Plus généralement je n'aurai pas de jugement aussi tranché que toi sur les solutions proposées ("ridicule" même un peu, "bien plus pratique" ...). Comme il s'agit d'une liste de fruits je ne pense pas que l'on va trouver plusieurs milliers de fruits différents ... mais je peux me tromper.
    Peut-être un exemple de lecture du fichier avec utilisation de Map aiderait le demandeur.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Patrice Henrio Voir le message
    Je supposais aussi d'après son code qu'il savait passer le contenu d'un fichier texte dans une String.
    C'est pourtant une idée étrange. Il y a de nombreuses manières directement fournies de lire un fichier texte ligne par ligne, ou de récupérer toutes les lignes d'un fichier texte, d'un coup.
    Mais le récupérer en une seule String, ça... C'est possible, bien sûr, mais avec des moyens plus indirects.


    A part ça, laissant possiblement de côté l'idée d'optimisation, il reste la praticité. Gérer une structure de Map qui contient les données directement bien organisées, c'est plus pratique que de gérer deux List distinctes, dont on se promet à soi-même qu'on maintient correctement les liens.
    Il est vrai que pour un débutant qui ne connaît pas les structures, une Map ça peut impressionner, et une List moins. Mais bon...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. compter le nombres d'occurence dans des chaines
    Par Lekno dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 13/03/2015, 13h41
  2. [PowerShell] Compter le nombre d'occurences dans un fichier en Powershell
    Par olivierjouanno dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 17/02/2014, 18h13
  3. Compter le nombre d'occurence dans une chaine
    Par shirya dans le forum Langage
    Réponses: 2
    Dernier message: 16/10/2007, 20h39
  4. Compter le nombre de ligne dans un fichier
    Par amine_en_france dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 31/05/2007, 17h19
  5. Réponses: 2
    Dernier message: 02/03/2004, 19h38

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