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 :

problème commentaire multiligne lecture /écriture fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut problème commentaire multiligne lecture /écriture fichier
    mon programme consiste à lire un fichier(c++) et à ecrir dans un aurte fichier temporaire et à chaque fois que je trouve une include fichier.h je rajoute son contenu dans le fichier temporaire
    mais j'ai rencontré un probleme avec les commentaire multi lignes, lorsque je trouve un include fichier.h dans un commentaire mon programme le rajouter, et c'est pas correcte

    je voudrai donc ignorer ce qui se trouve dans les commentaire multi lignes
    mais tout en les rajoutants a mon fichier temporaire bien entendu

    exemple de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #ifndef ICK
    #define ICK
    /*
    #include "fichier.h"
    */
     
    #include "ickupdef.h" /* defines */
    une partie de 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
    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
     
    	private void writeIncludeH(String ligne, BufferedWriter tmpwriter,
    			List<String> inclueFile, String path, List<String> listefichierH)
    			throws IOException {
     
    		BufferedReader lecteurFileHBuffer = null;
     
    		if (IsMacro(ligne, "include") && !ligne.startsWith("//")) {
     
    			MonfichierH = trouverH(ligne);
     
    			if (MonfichierH != null && MonfichierH.endsWith(".h")
    					&& Strings.containsValue(MonfichierH, inclueFile)
    					&& !Strings.containsValue(MonfichierH, listefichierH)) {
     
    				listeinclude.add(MonfichierH);
    				listefichierH.add(MonfichierH);
    				String lineH = ligne.replaceAll(ligne, "//SC++" + ligne);
    				tmpwriter.write(lineH);//System.err.println(lineH);
    				tmpwriter.newLine();
     
    				try {
    					lecteurFileHBuffer = new BufferedReader(new FileReader(path
    							+ MonfichierH));
     
    				} catch (FileNotFoundException exc) {
    					exc.getMessage();
    				}
    				while ((ligne = lecteurFileHBuffer.readLine()) != null) {
    					writeIncludeH(ligne, tmpwriter, inclueFile, path,
    							listefichierH);
    				}
    				lecteurFileHBuffer.close();
    				tmpwriter.write("//SC--include "
    						+ listeinclude.get(listeinclude.size() - 1));
    				tmpwriter.newLine();
    				listeinclude.remove(listeinclude.size() - 1);
     
    			}
    			else if(!ligne.startsWith("//")){
    				tmpwriter.write("//" + ligne);
    				tmpwriter.newLine();
    				}
    		} else {
    			if (IsMacro(ligne, "ifdef" )|| IsMacro(ligne, "endif" ))  {
    //				if (ligne.contains("/*") && !ligne.contains("*/")) {
    //					ligne = ligne + "*/";
    //					tmpwriter.write(ligne);
    //					tmpwriter.newLine();
    //				}
    //				if (!ligne.contains("/*") && ligne.contains("*/")) {
    //					tmpwriter.write(ligne);
    //					tmpwriter.newLine();
    //				}
    //				else {
    					tmpwriter.write("//SC_MACRO" + ligne);
    					tmpwriter.newLine();
    					tmpwriter.write(ligne);
    					tmpwriter.newLine();
    //				}
    			}
    			else {
    				tmpwriter.write(ligne);
    				tmpwriter.newLine();
    			}
    		}
     
    	}
    cette methode est appelée lors de la lecture du fichier c++

    je sais que c'est une question bete mais la mon cerveau n'arrive plu a fonctionée

    svp help me

  2. #2
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Points : 852
    Points
    852
    Par défaut
    Bonjour,

    En français ca donnerait:
    A partir du moment ou je rencontre une ouverture de commentaire (/*) dans une ligne et tant que je ne rencontre pas la fermante (*/), j'ignore les lignes ... (je n'effectue pas mon traitement)

    Si tu te perds, va boire un café, et quand tu reviens, pose le problème sur papier .

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut
    ben en français je sais ce que ça donne, mais j'ai pas su le faire en java
    et tant que je ne rencontre pas la fermante (*/),

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Points : 276
    Points
    276
    Par défaut
    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
    booleen commentaire = faux;
     
    tant que le fichier a des lignes{
      lire la ligne;
      si(ligne contient "/*" ){
        commentaire = vrai;
      }
     
      si(commentaire = faux){
        traitement;
      }
     
      si(ligne contient "*/"){
        commentaire = faux;
      }
     
    }
    Il n'y a plus qu'à traduire cela en java, et à traiter les cas particuliers de code présent sur la même ligne que les caractères d'ouverture et de fermeture des commentaires
    MigouW

    La seule bataille perdue d'avance est celle que l'on refuse de livrer.


    Pensez au tag
    Ma réponse vous a été utile, votez plus 1 sur le message.
    Ma réponse est hors sujet, votez moins 1 sur le message.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut
    voila ce que j'ai fait, mais j'ai un exception
    java.lang.NullPointerException
    a la ligne

    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
    private void writeIncludeH(String ligne, BufferedWriter tmpwriter,
    			List<String> inclueFile, String path, List<String> listefichierH)
    			throws IOException {
     
    		BufferedReader lecteurFileHBuffer = null;
    		if(ligne!=null){
    		 if(ligne.contains("/*") ){
    			    commentaire = true;
    			  }
    		 if(ligne.contains("/*")&& ligne.contains("*/")){
    			 commentaire = false; 
    		 }
    		if(!commentaire) {
    		if (IsMacro(ligne, "include") && !ligne.startsWith("//")) {
     
    			MonfichierH = trouverH(ligne);
     
    			if (MonfichierH != null && MonfichierH.endsWith(".h")
    					&& Strings.containsValue(MonfichierH, inclueFile)
    					&& !Strings.containsValue(MonfichierH, listefichierH)) {
     
    				listeinclude.add(MonfichierH);
    				listefichierH.add(MonfichierH);
    				String lineH = ligne.replaceAll(ligne, "//SC++" + ligne);
    				tmpwriter.write(lineH);//System.err.println(lineH);
    				tmpwriter.newLine();
     
    				try {
    					lecteurFileHBuffer = new BufferedReader(new FileReader(path
    							+ MonfichierH));
     
    				} catch (FileNotFoundException exc) {
    					exc.getMessage();
    				}
    				while ((ligne = lecteurFileHBuffer.readLine()) != null) {
    					writeIncludeH(ligne, tmpwriter, inclueFile, path,
    							listefichierH);
    				}
    				lecteurFileHBuffer.close();
    				tmpwriter.write("//SC--include "
    						+ listeinclude.get(listeinclude.size() - 1));
    				tmpwriter.newLine();
    				listeinclude.remove(listeinclude.size() - 1);
     
    			}
    			else if(!ligne.startsWith("//")){
    				tmpwriter.write("//" + ligne);
    				tmpwriter.newLine();
    				}
    		} else {
    			if (IsMacro(ligne, "ifdef" )|| IsMacro(ligne, "endif" ))  {
    				if (ligne.contains("/*") && !ligne.contains("*/")) {
    					tmpwriter.write(ligne+"/*");
    					tmpwriter.newLine();
    				}
    				if (!ligne.contains("/*") && ligne.contains("*/")) {
    					tmpwriter.write(ligne);
    					tmpwriter.newLine();
    				}
    				else {
    					tmpwriter.write("//SC_MACRO" + ligne);
    					tmpwriter.write(ligne);
    					tmpwriter.newLine();
    				}
    			}
    			else {
    				tmpwriter.write(ligne);
    				tmpwriter.newLine();
    			}
    		}
    		}
    		if(ligne.indexOf("*/")==0&& ligne.indexOf("/*")!=0){ //ligne d'excpetion
    			    commentaire = false;
    			  }
           if(commentaire)  {
    			tmpwriter.write(ligne);
    			tmpwriter.newLine();
    			return;
    		}
     
     
    	}
    }

  6. #6
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Points : 276
    Points
    276
    Par défaut
    Tu utilise la variable ligne pour parcourir ton fichier original et le fichier inclus donc :

    lorsque tu rentre dans ta méthode avec une ligne de type "fichier.h"

    tu fais les différents test,
    puis tu commence a recopier les lignes du fichier "fichier.h" via la variable ligne dans une boucle de type
    tant que (ligne != null)
    donc lorsque tu sors du traitement de recopie, et que tu arrive à cette ligne "if(ligne.indexOf("*/")==0&& ligne.indexOf("/*")!=0){ //ligne d'excpetion", ta variable est null

    lorsque tu parcours la recopie avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ((ligne = lecteurFileHBuffer.readLine()) != null) {
    						writeIncludeH(ligne, tmpwriter, inclueFile, path,
    								listefichierH);
    					}
    utilise une autre variable que ligne, déclare une nouvelle variable avant la boucle.

    Je sais pas si j'ai été très clair
    MigouW

    La seule bataille perdue d'avance est celle que l'on refuse de livrer.


    Pensez au tag
    Ma réponse vous a été utile, votez plus 1 sur le message.
    Ma réponse est hors sujet, votez moins 1 sur le message.

  7. #7
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut
    c'est bon c'est reglé merci encore pour votre aide
    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
    	private void writeIncludeH(String ligne, BufferedWriter tmpwriter,
    			List<String> inclueFile, String path, List<String> listefichierH)
    			throws IOException {
     
    		BufferedReader lecteurFileHBuffer = null;
    		if(ligne!=null){
     
    			 if(ligne.contains("/*") && !ligne.contains("*/") ){
    				    commentaire = true;
    				  }
     
    			if(ligne.contains("*/")&& !ligne.contains("/*")||(ligne.contains("/*") && ligne.contains("*/") )){
    			    commentaire = false;
    			  }
    		if(!commentaire) {
    		if (IsMacro(ligne, "include") && !ligne.startsWith("//")) {
     
    			MonfichierH = trouverH(ligne);
     
    			if (MonfichierH != null && MonfichierH.endsWith(".h")
    					&& Strings.containsValue(MonfichierH, inclueFile)
    					&& !Strings.containsValue(MonfichierH, listefichierH)) {
     
    				listeinclude.add(MonfichierH);
    				listefichierH.add(MonfichierH);
    				tmpwriter.write("//SC++" + ligne);System.err.println("//SC++" + ligne);
    				tmpwriter.newLine();
     
    				try {
    					lecteurFileHBuffer = new BufferedReader(new FileReader(path
    							+ MonfichierH));
     
    				} catch (FileNotFoundException exc) {
    					exc.getMessage();
    				}
    				while ((ligne = lecteurFileHBuffer.readLine()) != null) {
    					writeIncludeH(ligne, tmpwriter, inclueFile, path,
    							listefichierH);
    				}
    				lecteurFileHBuffer.close();
    				tmpwriter.write("//SC--include "
    						+ listeinclude.get(listeinclude.size() - 1));
    				System.err.println("//SC--include "
    						+ listeinclude.get(listeinclude.size() - 1));
    				tmpwriter.newLine();
    				listeinclude.remove(listeinclude.size() - 1);
     
    			}
    			else if(!ligne.startsWith("//")){
    				tmpwriter.write("//"+ ligne);System.out.println("//"+ligne);
    				tmpwriter.newLine();
    				}
    		} else {
    			if (IsMacro(ligne, "ifdef" ))  {
     
    					tmpwriter.write("//SC_MACRO" + ligne);System.err.println("//SC_MACRO" + ligne);
    					tmpwriter.newLine();
    					tmpwriter.write(ligne);System.err.println(ligne);
    					tmpwriter.newLine();
    				}
    			else {
    				tmpwriter.write(ligne);System.err.println(ligne);
    				tmpwriter.newLine();
    			}
    		}
    		}
     
           if(commentaire)  {
    			tmpwriter.write(ligne);System.out.println(ligne);
    			tmpwriter.newLine();
    			return;
    		}
     
     
    	}
    }

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

Discussions similaires

  1. Lecture/écriture fichier binaire via structure
    Par Tenebrous dans le forum C
    Réponses: 9
    Dernier message: 07/03/2010, 00h02
  2. [Batch] problème lors de lecture de fichier vers variable
    Par snake-darkangel dans le forum Scripts/Batch
    Réponses: 13
    Dernier message: 04/11/2009, 14h05
  3. Réponses: 19
    Dernier message: 03/10/2007, 09h14
  4. [PL/SQL]problème avec la lecture de fichier
    Par magicbisous-nours dans le forum SQL
    Réponses: 4
    Dernier message: 16/05/2007, 16h17
  5. Problème avec la lecture de fichiers audio
    Par ksper92 dans le forum Flash
    Réponses: 3
    Dernier message: 22/01/2007, 13h59

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