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 :

programme qui modifie le contenu d'un fichier


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 311
    Points : 97
    Points
    97
    Par défaut programme qui modifie le contenu d'un fichier
    Bonjour tout le monde,

    je suis au niveau debutant, et je dois creer un programme C qui modifie un fichier text passé en paramètre, selon une chaine passée en parametre aussi,
    alors si la chaine est "remplacer manger boire" le programme doit remplacer manger par boire

    si "supprimer sortir" alors il doit supprimer les mots sortir
    si "confirmer" alors il doit enregistrer les modifications
    si "quitter" alors il doit quitter

    auriez vous une idee de comment je doit proceder

    Merci d'avance

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Oui.

    Première étape : être capable de récupérer des arguments sur le ligne de commande.
    Deuxième étape : convertir le premier mot en un appel a une fonction avec les paramètres qui vont bien.
    Troisième étape : coder chacune de ces fonctions.

  3. #3
    Membre chevronné
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Points : 1 800
    Points
    1 800
    Par défaut
    comme dit precedement,
    1/ recuperer les arguments dans ton cas 1-nom du fichier texte 2- action a effectuer 3-mot [4-mot]
    ex: prog test.txt supprimer sortir
    : prog test.txt remplacer sort entrer

    2/ creer une fonction par exemple : void remplace(FILE *fichier,const char *mot1,const char *mot2);
    dans cette fonction tu ouvres le fichier et tu crees un fichier temporaire. tu copies les mots du fichier vers le fichier temporaire, si le mot a remplacer est trouver tu ne le copies pas mais tu ecris le mot2. si mot2 == NULL tu remplaces pas rien (le cas de suppression).
    A la fin tu enregistre le fichier temporaire sous le nom du fichier originale.

    je parts du principe que tu ne sait pas utiliser les pointeurs si c'est le cas cette autre fonction sera plus "chic"
    void remplace(char **txt,const char *target, const char *new);
    avec une utilisation du genre remplace(&mon_texte,"sortir",NULL); pour supprimer le mot sortir de mon_text.
    pour remplacer remplace(&mon_texte,"sortir","rentrer");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //dans ce cas on aura un truc du genre
    char *mon_text=read_file(argv[1]);
    if(mon_text==NULL)
        return EXIT_FAILURE;
    remplace(&mon_text,argv[3],argv[4]);
    enregistre(argv[1],mon_text);
    free(mon_text);
     return EXIT_SUCCESS;
    bien entendu tu vas devoir tester si l'argument argv[4] existe car ca depend de argv[2] qui est l'action(supprimer,remplacer)
    j'espere avoir ete utile.
    Petit lien vers mon premier jeux SDL2/C
    http://store.steampowered.com/app/72..._Soul_Of_Mask/
    la suite? ca vient,ca vient!

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Septembre 2014
    Messages : 14
    Points : 42
    Points
    42
    Par défaut
    Je te conseille aussi de te renseigner sur les fonctions read (ou getline), write et lseek. Ça devrait t'aider.

  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 da_latifa Voir le message
    je suis au niveau debutant, et je dois creer un programme C qui modifie un fichier text passé en paramètre, selon une chaine passée en parametre aussi,
    alors si la chaine est "remplacer manger boire" le programme doit remplacer manger par boire

    si "supprimer sortir" alors il doit supprimer les mots sortir
    si "confirmer" alors il doit enregistrer les modifications
    si "quitter" alors il doit quitter
    Bonjour

    Es-tu sûr d'avoir bien compris l'énoncé ? Parce que je visualise mal comment tu peux dans un premier temps appeler programme fichier remplacer manger boire, action remplaçant alors "manger" par "boire" dans le fichier "fichier" puis dans un second temps (donc quand le premeir appel a été traité et terminé) appeler programme fichier confirmer. Cette action confirme quoi vu que la première action aura été terminée et que le fichier aura été modifié ???
    Et dans un 3° temps appeler programme fichier quitter ben c'est pareil. Tu quittes quoi vu que les actions 1 et 2 auront été terminées ???

    Ceci dit, techniquement c'est quand-même pas un travail de débutant parce que si un fichier contient "xxxxxmangeryyyyy" (16 caractères) et que tu dois remplacer "manger" (6 lettres) par "boire" (5 lettres), alors tu dois aussi réécrire tout le reste pour avoir au final un fichier contenant "xxxxxboireyyyyy" (15 caractères)...
    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
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Septembre 2014
    Messages : 14
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Es-tu sûr d'avoir bien compris l'énoncé ? Parce que je visualise mal comment tu peux dans un premier temps appeler programme fichier remplacer manger boire, action remplaçant alors "manger" par "boire" dans le fichier "fichier" puis dans un second temps (donc quand le premeir appel a été traité et terminé) appeler programme fichier confirmer. Cette action confirme quoi vu que la première action aura été terminée et que le fichier aura été modifié ???
    Et dans un 3° temps appeler programme fichier quitter ben c'est pareil. Tu quittes quoi vu que les actions 1 et 2 auront été terminées ???
    Bonjour,

    Je pense que le projet en question fonctionne comme il a été dit plus tôt. C'est à dire qu'il faut créer une copie du fichier à modifier sous la forme d'un tableau (ou list ou ce que vous voulez) de chaines de caractères, de faire les modifications sur ce tableau (liste, etc), et ne remplacer le contenu modifier uniquement sur commande. Ensuite, sans quitter le programme, on peut quitter le fichier dans le but de faire des modifications sur un autre fichier. Ce qui est bizarre dans ce cas là c'est de préciser constamment quel fichier est soumis à la modification.

    Cependant il est vrai que ce projet ne convient pas pour un débutant-débutant. Il faut au moins un minimum de connaissance et de pratique pour le réaliser (c'est à dire savoir utiliser au moins: les tableaux, les listes chainées, l'allocation de mémoire dynamique et éventuellement les tableaux de pointeurs sur fonctions. -liste non exhaustive-).

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 311
    Points : 97
    Points
    97
    Par défaut
    D'abord Merci à vous tous pour vos réponses, ensuite , bah je me considère encore débutante même si j'en connais un peu sur la création des tableaux, l'allocation de la mémoire...

    donc je réexplique mon problème,

    je dois créer deux programmes séparés

    le premier "principal.c" va créer un processus fils qui doit exécuter le deuxième programme "secondaire.c"
    en lui passant un nom de fichier texte à traiter (selon la commande modifier ou supprimer ...)
    et en lui passant aussi, à travers un tube en utilisant dup2, les commandes lus à partir d'un fichier cmd.txt toujours par le programme "principal"

  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 da_latifa Voir le message
    je dois créer deux programmes séparés

    le premier "principal.c" va créer un processus fils qui doit exécuter le deuxième programme "secondaire.c"
    en lui passant un nom de fichier texte à traiter (selon la commande modifier ou supprimer ...)
    et en lui passant aussi, à travers un tube en utilisant dup2, les commandes lus à partir d'un fichier cmd.txt toujours par le programme "principal"
    Bigre, ce n'est pas un truc de débutant ça.

    Déjà je remarque que ton cahier des charges est très pointilleux. Parce que le second programme, certains de ses éléments lui sont passés en ligne de commande et certains autres par un pipe (alors que rien n'empêche de tout passer en ligne de commande). Et en plus la transmission pipe doit se faire via dup. C'est à dire je présume que tu devras dupliquer le stdout du père sur l'entrée du pipe et dupliquer le stdin du fils sur la sortie du pipe puis le père n'aura plus qu'à écrire sur stdout et le fils n'aura qu'à lire stdin pour que les infos soient passées et reçues. Bref c'est quand-même un truc d'un niveau bien confirmé quoi...
    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]

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 311
    Points : 97
    Points
    97
    Par défaut
    Oui, mais le prof exige qu'on utilise cette méthode pour bien comprendre comme ça marche...
    pourrais tu m'expliquer comment je dois lire la liste des commandes à partir du deuxième programme? est ce que ça va etre dans le fichier du deuxième programme ? ou bien dans le processus fils qui va lancer l’exécution de ce programme

    Merci à tout le monde

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 311
    Points : 97
    Points
    97
    Par défaut
    voilà ce que j'ai commencé déjà, mais c'est pas encore très clair dans ma tête !!

    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
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/stat.h>
     
    int main ()
    {
    	pid_t pid ;
     
    	//ouverture du fichier de commandes
    	static const char filename[] = "cmd.txt";
            FILE *file = fopen ( filename, "r" ); //argv[1]
     
     
     
    	if ( file != NULL )
        {
           char lgEcrire [256], lgLire[256]; 
     
     
    		  int tube[2]; 
     
     
    		  if (pipe(tube) != 0)
    			{
    				printf("Erreur Pipe\n");
    				exit(EXIT_FAILURE);
    			}		  
     
     
     
     
    		  if (fork()== -1 ){
     
    			  printf("Erreur Fork\n");	
    			  exit(EXIT_FAILURE);
     
    		  } else if (fork()== 0 ){
     
    			  close(tube[1]);
     
    			  dup2(tube[0], STDIN_FILENO);
    			  close(tube[0]);
     
    			 fgets(lgLire, sizeof lgLire, stdin); // Lire dans le tube
     
     
    			  //Executer le programme secondaire
    			  char * arguments[] = {"fichier.txt", lgLire , NULL};
     
    			   execv("./secondaire", arguments); 
    			  perror("Erreur dans exec");
     
     
    		  } else if (fork()!= 0) {  
     
    				close(tube[0]);
    				dup2(tube[1], STDOUT_FILENO);
    				close(tube[1]);
     
    				if (fgets ( lgEcrire, sizeof lgEcrire, file ) != NULL) {
     
    					printf(lgEcrire); // Ecrire la commande lu du fichier de commandes dans le tube
    				}
     
     
    				wait(NULL);
     
     
    		  }
     
           }
     
           fclose ( file );
        }
        else
        {
     
     
          printf("Echec d'ouverture de fichier\n");
     
     
    	}
     
     
    	return 0;
     
     
     
    }

    Merci

  11. #11
    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 da_latifa Voir le message
    pourrais tu m'expliquer comment je dois lire la liste des commandes à partir du deuxième programme? est ce que ça va etre dans le fichier du deuxième programme ? ou bien dans le processus fils qui va lancer l’exécution de ce programme
    Exactement de la même façon que si le second programme était appelé depuis la ligne de commande.

    C'est à dire que si tu appelles ce second programme de cette façon: second_programme toto tata alors, et à condition que le second programme soit programmé de cette façon
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main(int argc, char *argv[])
    {
        ...
    }
    les arguments seront reçus dans le tableau argv. Ainsi argv[0] contiendra l'appel => "second_programme", argv[1] contiendra le premier argument "toto", argv[2] contiendra le second argument "tata", et argv[3] contiendra le flag NULL te permettant de détecter la fin des arguments (possible aussi en utilisant argc contenant le nombre d'arguments total en incluant aussi l'appel c'est à dire ici 3).

    Et ce mécanisme fonctionne aussi même si le second programme est appelé depuis les routines d'appel système comme system() ou execl() utilisées dans un premier programme.
    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]

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Septembre 2014
    Messages : 14
    Points : 42
    Points
    42
    Par défaut
    J'ai vraiment du mal à visualiser ce que l'on te demande de faire. Pourrais-tu nous communiquer un sujet?

Discussions similaires

  1. Modifier le contenu d'un fichier
    Par karim_usthb dans le forum C
    Réponses: 2
    Dernier message: 28/05/2008, 09h42
  2. Modifier le contenu d'un fichier
    Par sconrad dans le forum Langage
    Réponses: 1
    Dernier message: 26/03/2008, 17h00
  3. modifier le contenu d'un fichier
    Par progamer54 dans le forum ANT
    Réponses: 1
    Dernier message: 06/12/2007, 11h31
  4. Modifier le contenu d'un fichier
    Par Core8 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 30/01/2007, 15h21
  5. programme qui plante. chercher/remplacer dans des fichiers.
    Par [Hugo] dans le forum Général Python
    Réponses: 2
    Dernier message: 31/10/2006, 17h10

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