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 :

modifier un fichier : toutes les minuscules en majuscules


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Par défaut modifier un fichier : toutes les minuscules en majuscules
    Bonsoir à tous,

    je voudrais écrire un programme en C pour répondre à cet énnoncé :


    On désire écrire un programme C sous Unix minMAJ.c qui transforme tous les caractères minuscules (a-z) d'un chier
    passé en paramètre en caractères ma juscules corresp ondantes (A-Z). Les autres caractères (non minuscules) ne seront
    pas mo diés par ce programme.
    Ce genre de fichier est non borné (il est donc imp ossible de le recopier en mémoire centrale dans un tableau) !

    Par exemple :
    >cat lafont.txt
    Maitre Corbeau
    sur 1 arbre perché

    >minMAJ lafont.txt
    MAITRE CORBEAU
    SUR 1 ARBRE PERCHé


    J'ai un examen bientôt et j'aimerai progresser parce que pour l'instant ça sent pas la très bonne note
    Pour l'instant j'ai écris ç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
    int main(int argc, char argv*[]){
    	FILE* fichier = NULL;
    	FILE* fopen(argv[1],"r+";
    	if (fichier != NULL ){
     
                            // là je ne sais pas comment prendre les caractères du fichier un par un
     
    	fclose(argv[1]);
    	}
     
    	else{
    		printf ("Impossible d'ouvrir le fichier");
    	}
    	return 0;
    }
    Si quelqu'un pourrait m'éclairer un peu...

    Merci d'avance

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Il n'est pas utile de charger tous les caractères en mémoire. Tu les lis avec fgetc() (voir http://linux.die.net/man/3/getchar) et tu affiches la transformation (ou pas) avec putchar.

  3. #3
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Par défaut
    Merci beaucoup de votre réponse,

    je ne comprends pas bien, fgetc ça va me permettre de lire le caractère, et putchar si j'ai bien compris ça ne fait qu'afficher un caractère..
    du coup je ne peux pas modifier mon fichier avec ces deux fonction si ?

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 281
    Par défaut
    Tu vas charger ton caractère dans une variable avec fgetc, tu fais ton traitement dessus et puchar te permet de l'afficher à l'écran mais tu peux aussi utiliser fputc le pendant de fgetc pour l'enregistrer dans un fichier.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fatboyslim Voir le message
    Merci beaucoup de votre réponse,
    De rien.

    Citation Envoyé par fatboyslim Voir le message
    je ne comprends pas bien, fgetc ça va me permettre de lire le caractère, et putchar si j'ai bien compris ça ne fait qu'afficher un caractère..
    Oui c'est bien cela.

    Citation Envoyé par fatboyslim Voir le message
    du coup je ne peux pas modifier mon fichier avec ces deux fonction si ?
    D'après ceci :
    Par exemple :
    >cat lafont.txt
    Maitre Corbeau
    sur 1 arbre perché

    >minMAJ lafont.txt
    MAITRE CORBEAU
    SUR 1 ARBRE PERCHé
    , il n'est pas clair que tu souhaites modifier le fichier. Si tu souhaites modifier le fichier, la solution la plus simple est sans doute d'écrire un nouveau fichier (fputc() est en effet adapté, comme précisé par chrtophe) pour écrire dans un fichier caractère par caractère. Ensuite, tu remplaces le fichier d'origine par le nouveau. Si tu souhaites vraiment modifier le fichier existant, il te faudra jouer avec le pointeur de lecture pour t'assurer d'être au bon endroit (d'instinct, je crois que fgetc() suivi de fputc() écrase le caractère suivant que tu n'as pas encore lu, il faudra donc revenir un cran en arrière).

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fatboyslim Voir le message
    On désire écrire un programme C sous Unix minMAJ.c qui transforme tous les caractères minuscules (a-z) d'un chier
    passé en paramètre en caractères ma juscules corresp ondantes (A-Z). Les autres caractères (non minuscules) ne seront
    pas mo diés par ce programme.
    Ce genre de fichier est non borné (il est donc imp ossible de le recopier en mémoire centrale dans un tableau) !

    Par exemple :
    >cat lafont.txt
    Maitre Corbeau
    sur 1 arbre perché

    >minMAJ lafont.txt
    MAITRE CORBEAU
    SUR 1 ARBRE PERCHé

    ...
    Du coup je ne peux pas modifier mon fichier avec ces deux fonction si ?
    Bonjour

    Ton énoncé dit "le programme transforme les caractères d'un fichier" et ton exemple montre que la transformation se fait à l'écran !!! Certes rien ne dit que le programme "minMAJ" ne modifie pas aussi le fichier d'origine mais à mon avis, vu le niveau que ton énoncé me fait ressentir, je ne pense pas que le prof demande qu'on transforme le fichier initial. Donc à toi de nous dire ce qu'il en est réellement (quitte à te faire préciser par ton prof). Si t'as pas à modifier le fichier cela sera bien plus facile (tu lis, tu testes et tu affiches).

    Citation Envoyé par fatboyslim Voir le message
    J'ai un examen bientôt et j'aimerais progresser parce que pour l'instant ça sent pas la très bonne note
    Pour l'instant j'ai écrit ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	FILE* fopen(argv[1],"r+";
    Ouaip, en effet. Mélanger "déclaration" et "appel de fonction" en oubliant la parenthèse fermante effectivement la note risque de ne pas être super du tout...

    Citation Envoyé par Bktero Voir le message
    (d'instinct, je crois que fgetc() suivi de fputc() écrase le caractère suivant que tu n'as pas encore lu, il faudra donc revenir un cran en arrière).
    Très bon instinct
    Surtout qu'après toute lecture, il est impératif de se déplacer pour écrire (même si le déplacement est inutile parce qu'on se trouve pile poil où il faut, il faut quand-même le demander expressément quitte à demander un déplacement de 0). Et après toute écriture, il est impératif là-aussi de demander soit un fflush(), soit de nouveau un déplacement... (info donnée par diogène sur un autre topic qui parlait de lecture+écriture)
    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]

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

Discussions similaires

  1. Les noms de fichiers et les minuscules ou majuscules
    Par gifffftane dans le forum Windows
    Réponses: 5
    Dernier message: 23/06/2008, 12h05
  2. Modifier des fichiers dans les rep users automatiquement
    Par mazou dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 06/09/2007, 09h42
  3. Enregistrer fichiers toutes les heures
    Par cflo91 dans le forum Langage
    Réponses: 3
    Dernier message: 06/07/2007, 12h11
  4. modifier une image toutes les X secondes
    Par didine44 dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 01/02/2007, 17h09
  5. Réponses: 5
    Dernier message: 12/12/2006, 10h19

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