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 de lignes


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

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

    Informations forums :
    Inscription : Août 2014
    Messages : 48
    Points : 62
    Points
    62
    Par défaut Compter le nombre de lignes
    Bonjour, j'ai fichier texte dont je souhaiterai compter le nombre de ligne. Pour chaque fin de ligne j'ai ajouté /
    voici une ligne du fichier:

    nom:prenom:adresse:255:pooy:ghiko:jiel:@:0/

    Maintenant je veux lire la ligne (on vas dire 3) je compte le nombre de ; avec le scanner, mais je bloque... je sais pas comment dire au scanner sc2 qu'apré 2 / Tu scan les :

    Code java : 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
     
    public void ficheClientRecuperer(GestClientUI gestClientUI)
    	{		
    		try 
            {
    			String champ;
    			int i;
    			int nbLigne= 0;
    			int compteur= gestClientUI.getCompteur();
     
    			Scanner sc = new Scanner(new File("Client.txt"));
    			Scanner sc2 = new Scanner(new File("Client.txt"));
    			sc.useDelimiter(Pattern.compile(":"));
    			sc2.useDelimiter(Pattern.compile(";"));
    			BufferedReader buff = new BufferedReader(new FileReader("Client.txt")); 
     
    			for(i=0;i<compteur;i++)
    			{	
     
    				if(nbLigne == compteur)
    				{
    					champ = sc.next();
    					gestClientUI.textNom.setText(champ);  
    					champ = sc.next();
    					gestClientUI.setStringPrenom(champ);
    					champ = sc.next();
    					gestClientUI.setStringAdresse(champ);    
    					champ = sc.next();
    					gestClientUI.setStringCodePostal(champ);
    					champ = sc.next();
    					gestClientUI.setStringVille(champ); 
    					champ = sc.next();
    					gestClientUI.setStringPays(champ);   
    					champ = sc.next();
    					gestClientUI.setStringTel(champ);   
    					champ = sc.next();
    					gestClientUI.setStringMel(champ);  
    					champ = sc.next();
    					stringCompteur = champ;
    					compteur = Integer.parseInt(stringCompteur);
    					gestClientUI.setCompteur(compteur);
    				}
    				nbLigne++;
    				 //System.out.println (nbLigne);
    			}
     
    			sc.close();
            }

    merci d'avance.

  2. #2
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut
    Salut,

    Il y a surement quelque chose que j'ai pas compris, mais pourquoi pas utiliser la méthode readLine() ?
    Tu te fais un compteur = 0,
    readLine();
    compteur++;
    readLine();
    compteur++;
    readLine();
    compteur++;
    ...
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

  3. #3
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            int counter = 0;
            try {
                BufferedReader buff = new BufferedReader(new FileReader("Client.txt"));
                while(buff.readLine()!=null) {           
                     counter++;
                }
            } catch (Exception ex) {
                Logger.getLogger(JdbcProjectsDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
            System.out.println(counter + "lines found");
    Mais ça ne doit pas être seulement ça, j'ai pas trop compris pourquoi tu parles des ";" et des ":" ?
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

  4. #4
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Slt,
    Peux tu montrer plus de ligne stp?

    nom:prenom:adresse:255:pooy:ghiko:jiel:@:0/

    Maintenant je veux lire la ligne (on vas dire 3) je compte le nombre de ; avec le scanner, mais je bloque... je sais pas comment dire au scanner sc2 qu'apré 2 / Tu scan les :
    dans la ligne tu n'as que des ":" et le "/" correspondant à ton caractère de fin, peux tu expliquer "je sais pas comment dire au scanner sc2 qu'apré 2 /" = toute les deux lignes??

    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

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

    Informations forums :
    Inscription : Août 2014
    Messages : 48
    Points : 62
    Points
    62
    Par défaut
    enfaite j'ai un fichier client avec nom, prénom etc. La fiche du client est sauvegarder sur une ligne et chaque donnés (nom prenom, etc) sont séparé par des : et la fin de la ligne et marqué par un / . L'utilisateur vas entrer le numéro de la fiche ( genre la fiche numéro 32 ) le numéro 32 sera stocké dans la variable compteur. Et la fiche 32 sera donc la ligne 32 ça sera donc le 31eme / qui sera scanné par sc2. Une fois le 31eme / trouvé je peux récupéré les donnés'nom prenom etc) du client. ( bref un peu casse tête).

    Je vais utiliser le morceau de code de Sennad (merci à toi d'ailleur) qui a l'air moins prise de tête x) .

    Merci à vous cordialement.

    Ps: voici mes lignes

    jf:john:2654laMarne:3654BP:Paris:France:2587478:mm@.pf:0/
    Hey:DD:DeGaule:3654BP:Londre:UK:258747896:ppp@mail:1/

  6. #6
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut
    Ok ça marche,
    Si tu as un problème, n'hésite pas à revenir vers nous !
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

  7. #7
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut
    Attention, en relisant le post, j'ai vu que je ne ferme pas le buffer dans le bout de code que je t'ai envoyé !
    Quand tu as fini tu fais buffer.close();
    C'est important :/ Désolé :/
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Pour éviter ce genre d'oubli, il suffit d'ouvrir toutes les IO avec un try-with-resource :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int counter = 0;
    try(FileReader fr = new FileReader("Client.txt"); BufferedReader reader = new BufferedReader(fr)) {
      while(reader.readLine()!=null) {           
        counter++;
      }
    } catch (Exception ex) {
      Logger.getLogger(JdbcProjectsDAO.class.getName()).log(Level.SEVERE, null, ex);
    }
    System.out.println(counter + "lines found");
    sans besoin de mettre un finally. Avec cette syntaxe, il y aura appel de reader.close() et fr.close() quoi qu'il arrive.

    À noter qu'on peut remplacer la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    try(FileReader fr = new FileReader("Client.txt"); BufferedReader reader = new BufferedReader(fr)) {
    par le plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    try(BufferedReader reader = Files.newBufferedReader(Paths.get("Client.txt"), StandardCharsets.ISO_8859_1)) {
    (plus simple, car on ne crée qu'un seul objet Reader, au lieu d'en ouvrir un puis de l'encadrer pour qu'il soit Buffered.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

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

    Informations forums :
    Inscription : Août 2014
    Messages : 48
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par Sennad Voir le message
    Attention, en relisant le post, j'ai vu que je ne ferme pas le buffer dans le bout de code que je t'ai envoyé !
    Quand tu as fini tu fais buffer.close();
    C'est important :/ Désolé :/
    Oui le compilot me l'a dit merci =)

  10. #10
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 996
    Points
    7 996
    Par défaut
    sinon y'a LineNumberReader aussi si tu ne dois compter que le nbr de lignes...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    LineNumberReader  lreader = new LineNumberReader(new FileReader(new File("monfichier")));
    lreader .skip(Long.MAX_VALUE);
    System.out.println("=="+lreader .getLineNumber());
    lreader .close();
    ou en java 8

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (CloseableStream<String> lines = Files.lines(file, Charset.defaultCharset())) 
    long numOfLines = lines.count();
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

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

    Informations forums :
    Inscription : Août 2014
    Messages : 48
    Points : 62
    Points
    62
    Par défaut
    Sinon voilà le bout de code que j'ai, qui permet d'aller à une ligne voulue, et de découper cette ligne avec un séparateur.

    Code Java : 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
     
    	public void suivant(GestClientUI gestClientUI, int ligne)
    	{
    		int i;
    		String champ = null;
     
            try
            {
    			Scanner sc = new Scanner(new File(nomFichier)); //Client.txt
     
                for(i=0; i<=ligne;i++)
                {
    				champ = sc.nextLine(); //vas lire toutes les lignes jusqu'à la ligne voulue qui seras stocké dans champ
                }		
                sc.close();
            }
     
    		catch (IOException exception)
    		{
    		    System.out.println ("Erreur lors de la lecture : " + exception.getMessage());
    		}
     
            splitDeLaMort(gestClientUI,champ);
    	}


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	public void splitDeLaMort(GestClientUI gestClientUI, String champ)
    	{
    	/*On coupe le string aprés chaque : qui sont les délimiteurs*/
            String split[] = champ.split(":");
            String nom    = split[0];
            String prenom = split[1];
            String adresse= split[2];
            String code   = split[3];
            String ville  = split[4];
            String pays   = split[5];
            String tel    = split[6];
            String mail   = split[7];
    	}
    erci de votre aide dans tous les cas !

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Du coup le scanner est mal fermé :

    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
    public void suivant(GestClientUI gestClientUI, int ligne)
    {
      try(Scanner sc = new Scanner(new File(nomFichier)))
      {
        String champ = null;
        for(int i=0; i<=ligne;i++)
        {
          champ = sc.nextLine(); //va lire toutes les lignes jusqu'à la ligne voulue qui sera stockée dans champ
        }		
        splitDeLaMort(gestClientUI,champ);
      }
      catch (IOException exception)
      {
        System.out.println ("Erreur lors de la lecture : " + exception.getMessage());
      }
    }
    À noter qu'en Java 1.8 on pouvait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void suivant(GestClientUI gestClientUI, int ligne)
    {
      try(Stream<String> lignes = Files.lines(Paths.get(nomFichier)))
      {
        String champ = lignes.skip(ligne).findFirst().get();
        splitDeLaMort(gestClientUI,champ);
      }
      catch (IOException | NoSuchElementException exception)
      {
        System.out.println ("Erreur lors de la lecture : " + exception.getMessage());
      }
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Citation Envoyé par thelvin Voir le message

    À noter qu'en Java 1.8 on pouvait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      try(Stream<String> lignes = Files.lines(Paths.get(nomFichier)))
    Plus je vois du java 8, plus je me demande ce qui m'a pris de commencer à apprendre avec le java 1.2

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

Discussions similaires

  1. [Outils] Comment compter le nombre de lignes ?
    Par ChristopheOce dans le forum EDI/Outils
    Réponses: 3
    Dernier message: 18/04/2011, 12h36
  2. Réponses: 7
    Dernier message: 03/01/2006, 21h59
  3. Réponses: 2
    Dernier message: 06/11/2005, 23h38
  4. Réponses: 2
    Dernier message: 02/03/2004, 19h38
  5. [TListView] Compter le nombre de lignes
    Par agh dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/09/2002, 20h25

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