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 :

copier le contenu d'un fichier dans un autre en précisant ou


Sujet :

Langage 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 copier le contenu d'un fichier dans un autre en précisant ou
    bonjour,

    je veux copier un fichier dans un autre, mais en precisant a quel endroit ce fichier doit etre insert.
    ce que je veux c'est remplacer les includes (.h) d'un programme C par leur contenu sans effacé le include
    exemple: j'ai un fichier A.h et un fichier B.c
    le fichier B.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    --
    #include "A.h"
    using namespace std;
     
    void decoupe(string&);
    // Decoupe une chaine de caractères en lignes de LARGEUR_MAXIMUM caractères au maximum
    // Essaye de découper au niveau des espaces si il y en a
     
    void affiche(string&);
    ...
    le resultat doit etre ç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
     
    //#include "A.h"
     
     
    namespace nsBrainfuck
    {
        /**
            * La classe Brinfuck permet d'analyser un programme en brainfuck, afin de l'interpréter
            */
        class Brainfuck
        {
          ...
    }
    }
    //fin include" A.h"
     
    using namespace std;
     
    void decoupe(string&);
    // Decoupe une chaine de caractères en lignes de LARGEUR_MAXIMUM caractères au maximum
    // Essaye de découper au niveau des espaces si il y en a
     
    void affiche(string&);
    ...
    vous allez me dire que le gcc fait ça, oui mais pas comme je le souhaite moi

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Quel rapport avec java?

  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
    je veux le faire en java

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    quel est ton code actuel, qu'est-ce qui te bloque concrètement? Parce qu'on ne va pas réaliser le préprocesseur à ta place!

  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
    mon problème est comment localisé le "include" récupéré le nom du fichier.h puis insert le contenu du fichier qui est dans un Buffer
    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
     
    File di   = new File("D:/Source/mini1/");
    File fl[] = di.listFiles();
    BufferedReader lecteurAvecBuffer = null;
    //  boucle sur le repertoire 
    for (j=0; j < fl.length; j++)
    		{
    		   if( fl[j].getName().toString().endsWith(".h")){
    			  try
    		      { /** lecture des fichiers .h  **/
                     lecteurAvecBuffer = new BufferedReader(new FileReader(fl[j].getCanonicalPath())); 
    			  }
    		      catch(FileNotFoundException exc)
    		      {
    		    	exc.getMessage();
    		      }
    			  	//remplissage de la liste avec les noms de fichiers .h	  
    			      fileName.add(fl[j].getName());
    	   		      i=i+1;
     
    	    	}
    et la suite mais avec le code qui suit j'ecri a la fin du fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	   FileOutputStream BuferWriter = new FileOutputStream("D:/Source/mini1/cowsay1.cpp",true); //append
    			while ((ligne = lecteurAvecBuffer.readLine()) != null){
    		    //  ecriture dans le fichier.cpp
    				PrintStream printtofile = new PrintStream(BuferWriter);
    				printtofile.println(ligne);
    		            }
    				  BuferWriter.close();

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    bon alors,
    1) éviter de créer un printstream dans la boucle, ca va te manger les resources
    2) il suffit dans ta boucle de tester la ligne (exemple: si elle commence par #include alors extraire avec une expression régulière ce qui se trouve entre "" ou <>, et appeler un méthode qui va insérer le contenu de ce fichier dans le stream)

    Pour les expressions régulière, les classes Pattern et Matcher sont destinées à ça.

  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
    voila mon code, j'ai réussi à localiser le include dans le fichier cpp et récupérer le nom du fichier.h
    mais comment je vais écrire maintenant dans le fichier cpp à la ligne qui suit le include
    et si je ne met pas le PrintStream dans une boucle , comment je vais écrire le contenu du BufferReader dans le fichier?

    ps : je suis novice en java
    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
    	File di   = new File("D:/Source/CPP_TESTS/test/mini1/");
    		File fl[] = di.listFiles();
    		int j;
    		BufferedReader lecteurFileCppBuffer = null;
    		String ligne;
    		String recherche ="include";
    		String FichierCpp=null;
    		List<String> InclueFile =new ArrayList<String>();
    		for (j=0; j < fl.length; j++)
    		{
    			InclueFile.add(fl[j].getName());
    		}
    		for (j=0; j < fl.length; j++)
    		{
    		  if(InclueFile.get(j).endsWith(".cpp")){
    				  try
    			      { /** lecture des fichiers .cpp  **/
    					 FichierCpp= InclueFile.get(j);
    	                 lecteurFileCppBuffer = new BufferedReader(new FileReader(fl[j].getCanonicalPath())); 
    				  }
    			      catch(FileNotFoundException exc)
    			      {
    			    	exc.getMessage();
    			      }
     
     
     
    		 FileOutputStream BuferWriter = new FileOutputStream(FichierCpp,true); //append
    		   int l=1;
    			while ((ligne = lecteurFileCppBuffer.readLine()) != null){
    				if (ligne.indexOf(recherche) != -1){
    					String[] str = ligne.split(" ");
    					String s1= str[str.length-1];
    					String[] str1;String MonfichierH=null;
    					if(s1.startsWith("<")){ str1= s1.split("<");s1=str1[1]; str1=s1.split(">"); MonfichierH=str1[str1.length-1];}
    				    if(s1.startsWith("\"")){ str1= s1.split("\""); MonfichierH=str1[1];}
    		   		    l++;
    //cette fonction n'est pas encore implimentée
    				    insererContenu(MonfichierH,BuferWriter,FichierCpp); 
     
    			}		  
    		 }
    		}

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    je n'ai pas dit que vous deviez retirer la boucle, j'ai dit qu'il ne fallais pas instancer le printstream dans la boucle (sous entendu, il faut l'instancier dehors)
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	   FileOutputStream BuferWriter = new FileOutputStream("D:/Source/mini1/cowsay1.cpp",true); //append
     
    				PrintStream printtofile = new PrintStream(BuferWriter);
    			while ((ligne = lecteurAvecBuffer.readLine()) != null){
    		            if ( /*ligne est un include*/){
                                    ecrireInclude(ligne,printtofile);
                                } else
                                    printtofile.println(ligne);
    		            }
    				  BuferWriter.close();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void ecrireinclude(String ligne, PrintStream sortie){
       String fichier = /*extraire nom du .h depuis ligne*/
       BufferedReader input = new BufferedReader(new FileReader(fichier));
       String ligne =null;
       while ( (ligne = input.readLine())!=null)
           sortie.println(ligne);
       input.close();    
    }
    Je n'ai pas mis le détail et la getion des exceptions pour gagner de la place.

  9. #9
    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 j'ai fini ma fonction, voila le code, il se peut qu'il sera utile à d'autre
    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
     
    private void writeincludeH(String ligne, BufferedWriter tmpwriter,
    			List<String> inclueFile, String path) throws IOException {
     
    		String recherche ="include";
    		String MonfichierH=null ;
    		BufferedReader lecteurFileHBuffer = null;
    		if (ligne.indexOf(recherche) != -1){
    			String lineH=ligne=ligne.replaceAll(ligne, "//SC++"+ligne);
    			tmpwriter.write(lineH); //System.out.println(line);
    		    tmpwriter.newLine() ;
     
    			String[] Str = lineH.split(" ");
    			String S1= Str[Str.length-1];
    			String[] Str1;
    			if(S1.startsWith("<")){ Str1= S1.split("<");S1=Str1[1]; Str1=S1.split(">"); MonfichierH=Str1[Str1.length-1];}
    		    if(S1.startsWith("\"")){ Str1= S1.split("\""); MonfichierH=Str1[1];}
     
    			if(MonfichierH.endsWith(".h") && Strings.containsValue(MonfichierH, inclueFile)  ) {
    				 try
    			      { /** lecture du fichiers .h  **/
     
    	                 lecteurFileHBuffer = new BufferedReader(new FileReader(path+MonfichierH)); 
     
    				  }
    			      catch(FileNotFoundException exc)
    			      {
    			    	exc.getMessage();
    			      }
    			      while ((ligne = lecteurFileHBuffer.readLine()) != null){ 
    //			    	  tmpwriter.write(ligne);  // System.out.println(ligne);
    //			    	  tmpwriter.newLine() ;
    			    	  writeincludeH(ligne,tmpwriter,inclueFile,path);
    			      }
    			    lecteurFileHBuffer.close();
    			}
    			 tmpwriter.write("//SC--include "+MonfichierH); tmpwriter.newLine() ;
    	}
    	else {
    		 tmpwriter.write(ligne);
    	     tmpwriter.newLine() ;
    	     }
     
    	}
    Merci pour Votre aide

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/04/2009, 23h14
  2. copier le contenu d'un fichier dans un autre avec séparateur
    Par sws2008 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 03/12/2008, 09h56
  3. Réponses: 4
    Dernier message: 28/08/2007, 17h11
  4. Copier le contenu d'un fichier dans un autre
    Par moncef357 dans le forum Pascal
    Réponses: 20
    Dernier message: 09/05/2007, 16h02

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