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

Java Discussion :

Comparer deux lignes dans un fichier


Sujet :

Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 50
    Points : 52
    Points
    52
    Par défaut Comparer deux lignes dans un fichier
    Bonjour à tous,

    J'ai un fichier que je parcours.

    Je le lis avec File.

    J'aimerais pouvoir faire :

    Parcours du fichier (ça c'est fait en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ((ligne = fichier.readLine()) !=null )
    )

    Tant que la ligne suivante ne commence pas par "10" alors
    {
    traitement
    }

    Or, je ne sais pas comment je peux lire la ligne suivante.

    Est ce que quelqu'un pourrait m'aider svp ?

    En vous souhaitant de passer de bonnes fêtes de fin d'année

  2. #2
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par manouch95 Voir le message
    Bonjour à tous,

    J'ai un fichier que je parcours.

    Je le lis avec File.

    J'aimerais pouvoir faire :

    Parcours du fichier (ça c'est fait en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ((ligne = fichier.readLine()) !=null )
    )

    Tant que la ligne suivante ne commence pas par "10" alors
    {
    traitement
    }

    Or, je ne sais pas comment je peux lire la ligne suivante.

    Est ce que quelqu'un pourrait m'aider svp ?

    En vous souhaitant de passer de bonnes fêtes de fin d'année
    Bonjour,
    Je ne sais pas trop ce que tu veux faire avec la ligne suivante alors qu'il n'est possible que de lire la ligne courante (je n'ai pas vu une méthode dans la BufferedReader permettant cette manipulation). Pour ce, si le besoin s'impose je te proposerai une solution pas trop optimisée détaillée comme suit :
    - Lire toutes les lignes du fichier et les écrire dans un tableau des String;
    - De ce tableau, appliquer l'algorithme détaillé plus haut pour vérifier si la ligne suivante commence par 10;
    - faire le traitement....
    N.B : je ne trouve pas cette solution propre...

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 50
    Points : 52
    Points
    52
    Par défaut
    Merci de ta réponse.

    En fait, c'est une gestion de notes de frais comptable. La ligne qui commence par 10 correspond à une en tete de note de frais. Ainsi, ce qui commence par 20 sont les lignes de la note de frais. Il faut donc que je distingue chaque note de frais.


    Oui, j'avais songé à tout stocké dans un tableau, mais je ne suis pas sûr que tout mon fichier puisse y être stocké, et surtout j'ai peur que cela ralentisse le programme.

    Si les autres forumeurs me disent aussi que c'est pas possible, bah alors je serais obligé passer par un tableau de String.

    Merci

  4. #4
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par manouch95 Voir le message
    Merci de ta réponse.

    En fait, c'est une gestion de notes de frais comptable. La ligne qui commence par 10 correspond à une en tete de note de frais. Ainsi, ce qui commence par 20 sont les lignes de la note de frais. Il faut donc que je distingue chaque note de frais.


    Oui, j'avais songé à tout stocké dans un tableau, mais je ne suis pas sûr que tout mon fichier puisse y être stocké, et surtout j'ai peur que cela ralentisse le programme.

    Si les autres forumeurs me disent aussi que c'est pas possible, bah alors je serais obligé passer par un tableau de String.

    Merci
    Pourrais je connaitre le traitement que tu prévois juste après avoir tester la condition? Peut être que la comparaison avec la ligne suivante ne s'avèrerait pas nécessaire. Une idée très explicite de ce que tu souhaites obtenir

  5. #5
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Regarde un peu dans ce code, je lis ligne après ligne un fichier, je compare si la ligne courante commence par la chaîne "10" ou "20". Selon le résultat de ma comparaison j'associe un traitement :
    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
            String ligne;
            try {
                FileReader fr = new FileReader("ton_fichier.txt");
                BufferedReader br = new BufferedReader(fr);
                try {
                    String en_tete = "10";
                    String note = "20";
                    while ((ligne = br.readLine())!=null) {
                        if(ligne.startsWith(en_tete)){
                            //traitement associé aux en-têtes...
     
                        }else if(ligne.startsWith(note)){
                            //traitement associé aux notes de frais...
     
                        }else{
                           //Autre traitement...
                        }
     
                    }   
                } catch (IOException ex) {
                    Logger.getLogger(accueil.class.getName()).log(Level.SEVERE, null, ex);
                }
            } catch (FileNotFoundException ex) {
                Logger.getLogger(accueil.class.getName()).log(Level.SEVERE, null, ex);
            }
    Je ne sais pas si c'est ce que tu cherches à réaliser...

  6. #6
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 906
    Points : 3 740
    Points
    3 740
    Par défaut
    Citation Envoyé par manouch95 Voir le message
    Oui, j'avais songé à tout stocké dans un tableau, mais je ne suis pas sûr que tout mon fichier puisse y être stocké, et surtout j'ai peur que cela ralentisse le programme.

    Si les autres forumeurs me disent aussi que c'est pas possible, bah alors je serais obligé passer par un tableau de String.
    Salut,

    J'ai aussi pensé au tableau de String... Le traitement sur un tableau est rapide normalement mais par contre il faut de la mémoire. Je pense qu'il faut au moins deux fois la taille du fichier pendant la copie et ensuite tu fermes le buffer pour libérer de la mémoire...

    Autre solution :

    Tu lis ton fichier ligne par ligne une première fois et chaque fois que tu tombes sur une commençant par "10" tu stockes le numéro de cette ligne dans un tableau. Comme ça tu sais quelles lignes tu dois traiter lors de la deuxième lecture.

    Citation Envoyé par manouch95 Voir le message
    Bonjour à tous,

    J'ai un fichier que je parcours.

    Je le lis avec File.

    J'aimerais pouvoir faire :

    Parcours du fichier (ça c'est fait en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ((ligne = fichier.readLine()) !=null )
    )

    Tant que la ligne suivante ne commence pas par "10" alors
    {
    traitement
    }

    Or, je ne sais pas comment je peux lire la ligne suivante.
    Pour lire la ligne suivante c'est simple tu relances la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligneSuivante = fichier.readLine();
    Mais la question c'est que dois-tu faire quand la ligne suivante commence par "10", est-ce que tu arrêtes ?

  7. #7
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 906
    Points : 3 740
    Points
    3 740
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Mais la question c'est que dois-tu faire quand la ligne suivante commence par "10", est-ce que tu arrêtes ?
    Finalement il y a moyen de le faire sans tableau, voilà (là j'ai fait dans le cas où tu veux qu'on s’arrête dés que la ligne suivante commence par "10" et je n'ai pas mis try/catch) :

    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
    public class Test {
     
        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub        
     
            BufferedReader fichierSource = new BufferedReader(new FileReader("Source.txt"));        
            String ligne = null ;
            String ligneCourante = null ;
            String ligneSuivante = null ;        
     
            if((ligneCourante = fichierSource.readLine()) != null) // ligneCourante == la première ligne
     
                while((ligne = fichierSource.readLine()) != null) {     // ligne ==  la ligne suivante
     
                    ligneSuivante = ligne ;    
     
                    if(ligneSuivante.substring(0, 2).equals("10")) {
                       System.out.print("\nOn ne traite pas cette ligne : \""+ ligneCourante + "\" car la suivante commence par \"10\" !" );
                       break;
                    }
                           else System.out.print("\n Traitement de cette ligne : \""+ ligneCourante + "\"");
     
                ligneCourante = ligneSuivante ;            
                }
     
            fichierSource.close();        
        }
    Voici le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     Traitement de cette ligne : "Ligne n°1"
     Traitement de cette ligne : "Ligne n°2"
     Traitement de cette ligne : "Ligne n°3"
     Traitement de cette ligne : "Ligne n°4"
     Traitement de cette ligne : "Ligne n°5"
     Traitement de cette ligne : "Ligne n°6"
     Traitement de cette ligne : "Ligne n°7"
     Traitement de cette ligne : "Ligne n°8"
     Traitement de cette ligne : "Ligne n°9"
     Traitement de cette ligne : "Ligne n°10"
    On ne traite pas cette ligne : "Ligne n°11" car la suivante commence par "10" !
    Pour un fichier contenant ça :
    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
    Ligne n°1
    Ligne n°2
    Ligne n°3
    Ligne n°4
    Ligne n°5
    Ligne n°6
    Ligne n°7
    Ligne n°8
    Ligne n°9
    Ligne n°10
    Ligne n°11
    10 Ligne n°12
    Ligne n°13
    Ligne n°14
    Ligne n°15
    Ligne n°16
    Ligne n°17
    Ligne n°18
    Ligne n°19
    Ligne n°20
    Ligne n°21
    Ligne n°22
    Ligne n°23
    Ligne n°24
    Ligne n°25
    Ligne n°26
    Ligne n°27
    Ligne n°28
    Ligne n°29
    Ligne n°30
    Ligne n°31

  8. #8
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 50
    Points : 52
    Points
    52
    Par défaut
    Bonjour à tous,

    Merci pour vos réponses, c'est génial

    Finalement, je suis passé par un tableau de String.

    Passez de bonnes fêtes

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/11/2012, 20h47
  2. Réponses: 1
    Dernier message: 17/05/2012, 16h52
  3. Comparer deux lignes d'une même table dans une bdd
    Par Pierrot33 dans le forum Général Java
    Réponses: 3
    Dernier message: 19/11/2011, 20h04
  4. Insérer une ligne entre deux autres dans un fichier
    Par c1malabar dans le forum Langage
    Réponses: 8
    Dernier message: 25/05/2011, 20h44
  5. Réponses: 5
    Dernier message: 09/01/2005, 20h54

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