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

Langage Java Discussion :

Ma méthode ne fonctionne pas quand elle reçoit des arguments


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut Ma méthode ne fonctionne pas quand elle reçoit des arguments
    Bonjour tout le monde,

    Je recherche une partie de phrase dans un fichier txt.

    Si cette partie de phrase existe, i est incrémenté de 1 autrement i ne bouge pas.

    Si i est supérieur à -1, une méthode est appelée et je lui donne en argument le File, le FileReader et le BufferedReader.

    Etrangement, quand je lui passe les arguments, la méthode ne me donne pas le résultat voulu, c'est à dire que la méthode ne lit pas lignes du fichier txt dans la boucle while par contre, quand je déclare à nouveau le file, le fr et le br dans ma nouvelle méthode, le résultat est correcte, la boucle while lit les lignes du txt, on dirait que les références du fichiers txt ne sont pas envoyées avec l'appel de la méthode sauriez-vous me dire ce qu'il se passe ?

    Je vous laisse premièrement mon code en donnant les arguments, ensuite le code sans les arguments.

    C'est vraiment important pour moi de comprendre car j'ai un examen de passage en août.

    Merci d'avance pour votre aide.

    beegees

    Code en envoyant les arguments à la méthode (ça ne fonctionne pas):

    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
    import java.io.*;
    public class bidon
    {
     public static void main (String [] args) throws IOException
     {
      File f = new File("c:\\bidon.txt");
      FileReader fr = new FileReader(f);
      BufferedReader br = new BufferedReader(fr);
     
      String aRechercher = "SET PATH";
      String ligne = "";
      int i=-1;
     
      while ((ligne=br.readLine())!=null)
      {
       System.out.println(ligne);
     
       if(ligne.indexOf(aRechercher)!=-1)
       {
        //System.out.println("ligne.indexOf(aRechercher vaut " + ligne.indexOf(aRechercher));
        System.out.println("trouve !");
        i++;
        System.out.println("i vaut " + i);
       }
      }
     
      if (i>-1)
      {
       ajouterMot(f,fr,br);
      }
     
     
     
     }
     
     public static void ajouterMot(File f, FileReader fr, BufferedReader br)throws IOException
     {
      File f2 = new File("c:\\bidon2.txt");
      FileWriter fw = new FileWriter(f2);
      BufferedWriter bw = new BufferedWriter(fw);
      String aRechercher = "SET PATH";
     
      String ligne = "";
      int i=0;
      while ((ligne = br.readLine())!=null)
      {
       System.out.println("ligne vaut "+ligne);
       i++;
       if (ligne.indexOf(aRechercher)!=-1)
       {
        ligne+= "bidon;";
        bw.write(ligne);
        bw.newLine();
       }
       else
       {
        bw.write(ligne);
        bw.newLine();
       }
      }
      System.out.println("i vaut " + i);
      bw.close();
     
     }
    }
    code sans les arguments, je les crée dans la nouvelle méthode (et ça fonctionne)

    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    import java.io.*;
     
    public class bidon
     
    {
     
                public static void main (String [] args) throws IOException
     
                {
     
                            File f = new File("c:\\bidon.txt");
     
                            FileReader fr = new FileReader(f);
     
                            BufferedReader br = new BufferedReader(fr);
     
     
     
                            String aRechercher = "SET PATH";
     
                            String ligne = "";
     
                            int i=-1;
     
     
     
                            while ((ligne=br.readLine())!=null)
     
                            {
     
                                       System.out.println(ligne);
     
     
     
                                       if(ligne.indexOf(aRechercher)!=-1)
     
                                       {
     
                                                   //System.out.println("ligne.indexOf(aRechercher vaut " + ligne.indexOf(aRechercher));
     
                                                   System.out.println("trouve !");
     
                                                   i++;
     
                                                   System.out.println("i vaut " + i);
     
                                       }
     
                            }
     
     
     
                            if (i>-1)
     
                            {
     
                                       ajouterMot();
     
                            }
     
     
     
     
     
     
     
                }
     
     
     
                public static void ajouterMot()throws IOException
     
                {
     
     
     
                            File f = new File("c:\\bidon.txt");
     
                            FileReader fr = new FileReader(f);
     
                            BufferedReader br = new BufferedReader(fr);
     
     
     
                            File f2 = new File("c:\\bidon2.txt");
     
                            FileWriter fw = new FileWriter(f2);
     
                            BufferedWriter bw = new BufferedWriter(fw);
     
                            String aRechercher = "SET PATH";
     
     
     
                            String ligne = "";
     
                            int i=0;
     
                            while ((ligne = br.readLine())!=null)
     
                            {
     
                                       System.out.println("ligne vaut "+ligne);
     
                                       i++;
     
                                       if (ligne.indexOf(aRechercher)!=-1)
     
                                       {
     
                                                   ligne+= ";c:\bidon;";
     
                                                   bw.write(ligne);
     
                                                   bw.newLine();
     
                                       }
     
                                       else
     
                                       {
     
                                                   bw.write(ligne);
     
                                                   bw.newLine();
     
                                       }
     
                            }
     
                            System.out.println("i vaut " + i);
     
                            bw.close();
     
     
     
                }
     
    }

  2. #2
    Membre expérimenté Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par défaut
    Bonjour,
    A froid, je dirais que tu ne passes jamais dans ta seconde boucle pour la lecture du BufferedReader.

    Si tu regardes ton code, tu parcours les lignes en les lisant jusq'au bout du fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ((ligne=br.readLine())!=null)
    Autrement dit, tu t'arrêtes quand la ligne retournée vaut null.

    Puis dans ta seconde méthode, tu recommences à lire à partir du même endroit, bref, il n'y a plus rien à lire, donc tu ne passes jamais dans ta seconde boucle.

    En créant un nouveau BufferedReader (méthode sans argument), tu le places au début de tes lignes, donc tu as qque chose à lire.

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Ce que tu dis est logique.

    Je pensais que le curseur revenait au début.

    Y'a-t'il un moyen de contourner cela pour pouvoir quand même envoyer à la méthode le file, le FileReader et le BufferedReader ?

    Merci encore

    beegees

  4. #4
    Membre expérimenté Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par défaut
    Ca ne réponds pas à ta question, mais pourquoi vouloir à tout prix passer ces paramètres?


    Si j'ai bien compris ton code, la première méthode parcourt tout un fichier juste pour vérifier qu'un bout de texte est présent. En plus tu n'as pas besoin de parcourir tout le fichier. A la première occurrence du texte, i sera supérieur à -1. Utilise plutôt un boolean pour savoir si tu as trouvé ou pas la chaine.

    Puis la seconde méthode reparcourt le même fichier pour ajouter "BIDON" à la fin de certaines lignes.

    Ca risque d'être très lourd en terme de performances si ton fichier est volumineux.

    Tu devrais essayer de faire le traitement dans la même boucle.

    Ca donnerait quelque chose comme ç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
    32
    33
    34
    35
    36
    37
    38
    39
    	private static void newMethode() throws IOException {
    		// On initialise le BufferedReader
    		File f = new File("c:\\bidon.txt");
    		FileReader fr = new FileReader(f);
    		BufferedReader br = new BufferedReader(fr);
     
    		// Valeur à rechercher
    		String aRechercher = "SET PATH";
     
    		// Traitement
    		String ligne = "";
    		StringBuffer stringBuffer = new StringBuffer();
    		boolean isPresent = false;
     
    		// Pour chaque ligne...
    		while ((ligne = br.readLine()) != null) {
    			// On ajoute la ligne
    			stringBuffer.append(ligne);
    			// On vérifie que le texte est présent dans la ligne...
    			if (ligne.indexOf(aRechercher) != -1) {
    				// On a trouvé une ligne contenant la valeur à rechercher, on
    				// ajoute BIDON
    				isPresent = true;
    				stringBuffer.append("bidon");
    			}
    			// On ajoute le saut de ligne
    			stringBuffer.append('\n');
    		}
     
    		// ... on écrit dans un nouveau fichier si le texte était présent
    		if (isPresent) {
    			File f2 = new File("c:\\bidon3.txt");
    			FileWriter fw = new FileWriter(f2);
    			BufferedWriter bw = new BufferedWriter(fw);
    			bw.write(stringBuffer.toString());
    			bw.close();
    			fw.close();
    		}
    	}
    Je sais que ça ne répond pas à ta question, mais sauf erreur de ma part, tu devrais repenser le double parcours de fichier.

  5. #5
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Re,

    Merci pour ta réponse et pour ton code.

    C'est juste un exercice de révision pour mon examen de passage.

    Je voulais juste aller au bout de l'explication mais le fait d'avoir ouvert à nouveau le File ne me pose pas de problème.

    Je vois dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringBuffer stringBuffer = new StringBuffer();
    Je n'ai jamais utilisé ce buffer, il met une ligne dans le buffer je présûme ?

    Merci pour tout !

    beegees

  6. #6
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 242
    Par défaut
    Pour recherche les chaines dans des textes complexes : tu peux utiliser les expressions régulières.

    Cela fait un peu peur au début mais c'est vraiment très utile ans ce cas.

  7. #7
    Membre expérimenté Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par défaut
    En fait, le StringBuffer est un moyen plus propre d'utiliser les String.

    Je te renvoie sur la javadoc pour plus de précisions.
    http://java.sun.com/j2se/1.4.2/docs/...ingBuffer.html

    Et voici un petit article qui compare l'utilisation des String et des StringBuffer
    http://www.javaworld.com/javaworld/j...-javaperf.html

    Bonne chance pour ton examen.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/07/2011, 09h56
  2. Appel et test d'une méthode ne fonctionnent pas (type not found)
    Par Faluchard dans le forum Général Java
    Réponses: 2
    Dernier message: 30/05/2010, 16h05
  3. macro pour code barre qui ne fonctionne pas comme elle devrait
    Par scons dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/11/2009, 13h09
  4. Code ne fonctionne pas quand il est dans une page HTML
    Par zizou5roni dans le forum Applets
    Réponses: 1
    Dernier message: 11/08/2008, 10h53
  5. Réponses: 2
    Dernier message: 01/05/2007, 18h50

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