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

 C Discussion :

copier un fichier dans un autre


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut copier un fichier dans un autre
    Bonjour, je suis nouvelle sur ce forum et j'ai un petit probleme en langage C. Je suis débutante et j'essaye d'apprendre à programmer mais je dois dire que je m'en sort horriblement mal et ça me désespère...

    J'essaye de faire un programme qui va allez chercher un fichier txt et qui va pouvoir le modifier en trouvant certain mot clé (genre allez à la ligne quand il voit le terme ";" par exemple )


    Je ne veux pas modifier directement le fichier source, c'est pourquoi j'ai pensée à copié/collé ce fichier, la copie serait là ou je pourrais travailler.

    Je suis allez sur le site http://c.developpez.com/faq/?page=fichiers qui apprend comment copié un fichier mais je dois dire que je suis vraiment vraiment nulle car je ne comprend pas la moité des termes ( grosse débutante en C, je sais )


    j'ai plusieurs petites questions vraiment bête et j’espère qu'il y aura des gens qui pourront me répondre.

    1) je ne comprend pas l'utilité du buffer dans le lien que je vous ai donnée.


    2) Si je comprend bien, la premiere ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int copier_fichier(char const * const source, char const * const destination)
    ça signifie qu'on créer un tableau à contenant dans une première colonne le fichier entré et dans une deuxième colonne le fichier de sortie? ( j'ai un gros doute ...)


    3) Si ce code fonctionne correctement, est ce que cela va recréer un fichier txt et comment avoir quelque code qui changerons ce fichier? ( genre allez à la ligne quand il voit le mot clé do entre autre).



    Merci d'avance pour vos réponses et désoler si mes questions paraissent stupide mais on a tous été débutant je pense avec plus ou moins de mal et moi j'ai pas mal de mal )

    ps: si vous comprenez pas ce que je demande, hésité pas a me faire signe car je me casse la tête sur le C depuis ce matin et c'est plus très clair dans ma tête ^^

  2. #2
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Pour l'instant mon code ressemble à ç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
    //Inclusion des bibliothèques
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define NBARGUMENTS 4
    // Début du prgramme principal
    // argc désigne le nombre d'arguments
    // argv[ ] désigne le tableau contenant les arguments
    int main(int argc, char *argv[])
    {
     
    	// on ouvre les fichiers d'entrée et sorties
    	FILE* fichierEntree = fopen(argv[2],"r");
    	FILE* fichierSortie = fopen(argv[3],"w");
     
     
    	// Si on a bien 4 arguments : le répertoire, le mode d'execution, le fichier d'entrée et le fichier de sortie
    	if ( argc == NBARGUMENTS )
    	{
     
     
    		printf("\t mode : %s\n\t fichier d'entrée : %s\n\t fichier de sortie : %s\n\n", argv[1], argv[2], argv[3]);
     
    		//Si le fichier d'entrée n'a pas pu être ouvert
    		if (fichierEntree == NULL)
    			printf ("le fichier %s est introuvable\n\a", argv[2] );
     
    		else
    		{
    			// Si le fichier de sortie n'a pas pu être ouvert
    			if (fichierSortie == NULL)
    				printf ("le fichier %s est introuvable\n\a", argv[3] );
     
    			else
    			{
    			    //on copie fichier entrer dans fichier sortie
     
    			}


    si le fichier de sortie n'a pas pu être ouvert c'est parce qu'il n'existe pas et donc j'aimerais créer un fichier de sortie et copié collé mon fichier source à l’intérieur, si cela peut vous aider à comprendre la mélasse ou je suis ^^

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Bonjour et bienvenue !

    Moi, je trouve que ton code est proprement rédigé, tu as pensé aux balises CODE et tes questions sont tout-à-fait légitimes. C'est remarquable pour un premier message !

    Citation Envoyé par princesse_carole Voir le message
    1) je ne comprend pas l'utilité du buffer dans le lien que je vous ai donnée.
    Un buffer est une mémoire tampon. L'idée derrière le programme que tu cites est de réaliser lui-même la copie et non d'appeler une fonction pour ce faire. Comme le programme ne peut lire le fichier source et écrire son contenu dans le fichier de destination en même temps, il lui faut déclarer un peu de mémoire dans laquelle il va déposer le contenu de sa lecture, puis relire cette mémoire pour l'écrire vers le fichier de destination.

    2) Si je comprend bien, la premiere ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int copier_fichier(char const * const source, char const * const destination)
    ça signifie qu'on créer un tableau à contenant dans une première colonne le fichier entré et dans une deuxième colonne le fichier de sortie? ( j'ai un gros doute ...)
    Il n'y a pas de notion de « colonne » ici mais, sur le reste, c'est bien ça. En fait, « char * » est un pointeur sur un caractère, mais c'est aussi le type que l'on utilise pour transmettre des chaînes de caractères.

    En l'occurrence, ta fonction attend en fait en argument les noms et les chemins des deux fichiers, source et destination.

    3) Si ce code fonctionne correctement, est ce que cela va recréer un fichier txt
    Oui.

    et comment avoir quelque code qui changerons ce fichier? ( genre allez à la ligne quand il voit le mot clé do entre autre).
    Il n'y a pas de moyen « simple » de le faire, en C, sauf à utiliser l'existant bien sûr. Et même dans ce cas, la syntaxe risque de ne pas être ce qu'il y a de plus adapté.

    Il faut « lire » le contenu de ce que tu charges, tout simplement, et conserver un état d'un caractère à l'autre. Toutefois, il existe de nombreux outils pour le faire et, sous UNIX en particulier, il existe beaucoup de commandes toutes faites (utilisables depuis le Shell, sans programmer) qui servent à faire du traitement de flux.

    Sinon, d'une manière générale, il existe beaucoup de mécanismes pour faire de la reconnaissance de mot-clés, mais le plus répandu reste l'utilisation des « expressions régulières ».

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    merci de m'avoir répondu, j'ai essayée de suivre les codes du forum, j'y traine pas mal pour "voir" des idées mais c'est la première fois que j'ai des gros gros probleme en programmation.

    Je pense passé par des fonction type strstr, strcat, strcopy,.etc
    Pour cela je vais avoir besoin de lire ce fichier et de regarder ligne par ligne le fichier texte je pense.


    comparer une chaine dans une autre avec strstr va me permettre de trouver un mot clé.


    Mais le probleme, c'est que faire avec après, je ne suis pas une pro des pointeurs donc je laisse le topic encore ouvert si j'avais d'autre questions ^^

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par princesse_carole Voir le message
    Pour l'instant mon code ressemble à ç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
    //Inclusion des bibliothèques
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define NBARGUMENTS 4
    // Début du prgramme principal
    // argc désigne le nombre d'arguments
    // argv[ ] désigne le tableau contenant les arguments
    int main(int argc, char *argv[])
    {
     
    	// on ouvre les fichiers d'entrée et sorties
    	FILE* fichierEntree = fopen(argv[2],"r");
    	FILE* fichierSortie = fopen(argv[3],"w");
     
     
    	// Si on a bien 4 arguments : le répertoire, le mode d'execution, le fichier d'entrée et le fichier de sortie
    	if ( argc == NBARGUMENTS )
    	{
     
     
    		printf("\t mode : %s\n\t fichier d'entrée : %s\n\t fichier de sortie : %s\n\n", argv[1], argv[2], argv[3]);
     
    		//Si le fichier d'entrée n'a pas pu être ouvert
    		if (fichierEntree == NULL)
    			printf ("le fichier %s est introuvable\n\a", argv[2] );
     
    		else
    		{
    			// Si le fichier de sortie n'a pas pu être ouvert
    			if (fichierSortie == NULL)
    				printf ("le fichier %s est introuvable\n\a", argv[3] );
     
    			else
    			{
    			    //on copie fichier entrer dans fichier sortie
     
    			}


    si le fichier de sortie n'a pas pu être ouvert c'est parce qu'il n'existe pas et donc j'aimerais créer un fichier de sortie et copié collé mon fichier source à l’intérieur, si cela peut vous aider à comprendre la mélasse ou je suis ^^
    Salut

    On va un petit peu optimiser ce code de façon un petit peu plus logique. Par exemple, à quoi sert d'ouvrir les fichiers avant de tester le nombre d'arguments ? Et si le fichier 2 ne peut pas être ouvert en écriture ce n'est sûrement pas parce qu'il n'existe pas. Et dans ce cas, que fait-on du fichier 1 qui a été ouvert ???

    Autre chose: argc contient le nombre total d'arguments, y compris le nom du programme. Donc s'il te faut 4 arguments effectifs, alors tu dois comparer argc a 5 et non 4...

    Donc quand on réfléchi à la façon de répondre à ces questions, on peut alors arriver au code suivant:

    Code c : 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
    //Inclusion des bibliothèques
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include unistd.h
     
    #define NBARGUMENTS 4
    // Début du prgramme principal
    // argc désigne le nombre d'arguments
    // argv[ ] désigne le tableau contenant les arguments
    int main(int argc, char *argv[])
    {
    	// on déclare les variables
    	FILE* fichierEntree;
    	FILE* fichierSortie;
     
    	// Si on n'a pas 4 arguments : le répertoire, le mode d'execution, le fichier d'entrée et le fichier de sortie
    	if ( argc <= NBARGUMENTS )
    	{
    		// Il manque des arguments
    		printf("usage: %s mode fichier_entrée _fichier_sortie\n", argv[0]);
     
    		// Inutile de continuer
    		return (-1);
    	}
     
    	// on ouvre le fichier d'entrée et on vérifie l'ouverture
    	fichierEntree = fopen(argv[2],"r");
    	if (fichierEntree == NULL)
    	{
    		// Gros pb (probablement fichier inexistant)
    		printf("Impossible d'ouvrir %s\n", argv[2]);
     
    		// Inutile de continuer
    		return (-2);
    	}
     
    	// on ouvre le fichier de sortie et on vérifie l'ouverture
    	fichierSortie = fopen(argv[3],"r");
    	if (fichierSortie == NULL)
    	{
    		// Gros pb (probablement problèmes de droits)
    		printf("Impossible d'ouvrir %s\n", argv[3]);
     
    		// Le fichier d'entrée est devenu inutile
    		fclose(fichierEntree);
     
    		// Inutile de continuer
    		return (-3);
    	}
     
    	// Tout est ok, on peut travailler
    	printf("\t mode : %s\n\t fichier d'entrée : %s\n\t fichier de sortie : %s\n\n", argv[1], argv[2], argv[3]);
     
    	//on copie fichier entrer dans fichier sortie
    	...
     
    	// On ferme les fichiers
    	fclose(fichierEntree);
    	fclose(fichierSortie);
    }

    Et si tu rajoutes errno et strerror, ton programme peut t'afficher la cause de l'échec d'ouverture. Mais on verra ça plus tard...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour l'optimisation de mon code

    Je sais que je vais surement encore un peut abuser de vos services mais:

    Quelqu'un aurait il une idée pour faire un programme qui indenterais un fichier automatiquement, faut il passer par un tableau de caractere ou il y aurais une commande qui permet de faire une sorte de saut de ligne...


    Il y a surement redondance dans mes questions précédente mais je suis encore une fois completement perdue et j'ai besoin d'aide


    Merci d'avance

  7. #7
    Membre éclairé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 471
    Points : 831
    Points
    831
    Par défaut
    Bonjour princesse_carole

    Déjà pour commencer, il va falloir identifier les règles qui vont permettre de faire ton indentation.

    Par exemple en C, je 'ai fait mon indentation par rapport aux { } comme par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void maFonction(void)
    {
       int maVariable; 
       {
           int autreVariable;
           autreVariable=0;
       }
       maVariable =0;
    }
    l'indentation se fait en rajoutant des espaces ou tabulations (je préfère les espaces car indépendant des réglages des editeurs) devant le texte. Tu devras donc faire la même chose en calculant le nombre d'espaces à ajouter pour chaque ligne. Ce calcul sera fait en fonction des délimitations que tu aura trouvé.

    Donc si tu idente du C, tu lit chaque ligne, tu supprime les espace en début de ligne au cas ou, puis tu rajoute les nouveaux espace et tu écrit dans le fichier.


    Bon courage.
    Page sur Developpez : http://pbriand.developpez.com

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par princesse_carole Voir le message
    Merci beaucoup pour l'optimisation de mon code

    Je sais que je vais surement encore un peut abuser de vos services mais:

    Quelqu'un aurait il une idée pour faire un programme qui indenterais un fichier automatiquement, faut il passer par un tableau de caractere ou il y aurais une commande qui permet de faire une sorte de saut de ligne...


    Il y a surement redondance dans mes questions précédente mais je suis encore une fois completement perdue et j'ai besoin d'aide


    Merci d'avance
    Si t'es sous Unix/Linux tu as l'outil "indent" qui te met en forme ton code source...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Copier un fichier dans un autre en retirant les lignes inutiles
    Par CrissCross51 dans le forum Général Python
    Réponses: 6
    Dernier message: 07/04/2011, 16h02
  2. Copier 2 fichiers dans un autre
    Par lah.123 dans le forum z/OS
    Réponses: 4
    Dernier message: 01/01/2010, 22h20
  3. Réponses: 9
    Dernier message: 20/02/2009, 17h51
  4. copier un fichier dans un autre repertoire
    Par arnest dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/03/2008, 14h02
  5. Copier un fichier dans un autre
    Par groupe dans le forum Débuter
    Réponses: 5
    Dernier message: 29/02/2008, 22h32

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