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 :

Exercice : inverser les lignes d'un fichier .txt


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Par défaut Exercice : inverser les lignes d'un fichier .txt
    Bonjour,

    Je m appelle Julie, je suis étudiante a Lille et on me demande de faire un programme en C qui inverse les lignes d'un fichier texte.
    Avec, un fichier d'entree d'un nombre de ligne quelconque et un fichier de sortie pour le ranger, comme arguments.
    Pour le fichier d'entree le nombre est limité a 50 caracteres par lignes.

    Je dois faire ca pour lundi matin.

    je vous demande de l aide !!!

    MERCI MERCI !!

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    utilise simplement la fonction fseek.

    Tu ouvre ton premier fichier et tu va à la fin.
    Grâce à fseek, tu le lis à l'envers jusqu'à rencontrer un '\n'
    Tu enregistre la position avec ftell
    De la avec un fgets tu lis la ligne et tu l'écris dans ton deuxième fichier
    Tu reviens à la position enregistrée avec fseek et tu recommence tant que tu n'as pas tout lu le fichier.

  3. #3
    Membre émérite
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Par défaut
    Sinon tu peux toujours stocker ton fichier dans un tableau de char à deux dimensions. TU l'alloues dynamiquement avec le nombre de ligne indiqué en argument. Tu lis chaque ligne avec un fgets(s[i], 50, f_in) et ensuite tu reviens en arrière à partir de ton indice de première dimension en écrivant la chaîne courante dans le fichier de sortie.
    Récursivité en C : épidémie ou hérésie ?

    "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Par défaut
    Heu en fait je ne sais pas du tout coder...
    et je n'ai pas le droit a la fonction fseek !
    la reponse de kirilenko me parait plus approprié a ce que j'attend !

    si il y en a un qui peux me fournir le code...

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    .... on est pas là pour faire ton exercice à ta place.

    Sinon, tu peux aussi faire une fonction récursive :


    void ta_fonction(FILE , FILE)
    {
    //lecture d'une ligne avec fgets
    //Si fichier non null, appel de ta_fonction(FILE, FILE);
    //Ecriture de ta ligne lu dans le fichier2
    }

  6. #6
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 172
    Par défaut
    Bonjour,

    bon pour ne pas m'attirer les foudre de Neckara, je te fournirai un pseudo-code.

    A noter que, sans vouloir te vexer Kirilenko, je te conseillerai plus un algo du style de celui de Neckara (bien que je pense qu'un algo récursif n'est pas le top niveau perf à cause des appels de fonction!) parce que celui de Kirilenko demande au moins la taille de ton fichier en mémoire (pas super en cas de gros fichiers).

    Voici un algo assez rapide et qui ne demande pas beaucoup de ressources :
    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
    buf = char[50]
    compteur = 0
    src <- Ouverture du fichier_source
    dest <- Ouverture du fichier destination
    positionnement à la fin de src
     
    Tant que tu n''es pas au début du fichier.
        Tant que charactere_lu <> '\n'
              char[compteur] = charactere_lu
              compteur++
     
         for buf[compteur] jusqu''à buf[0]
              ecriture de buf[compteur] dans dest
              compteur--
     
         ecriture du charactere '\n' dans dest
         compteur=0
    Voilà, à noter que j'ai jamais vu le pseudo-code donc ma syntaxe est loin d'être super mais j'espère que c'est assez clair et merci de me corriger si il y'a des erreurs ou des oublis dans l'algo.

    EDIT : D'ailleurs j'ai corrigé, c'est pas tant que tu n'es pas à la fin mais au début du fichier!

    Je te laisse gérer pour savoir si tu es au début du fichier ou non (un indice : fseek et un compteur de la taille du fichier!)

    Cordialement

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Faut que je note tout cela pour le ressortir à ma prof d'algo

    Dans un sens savoir relire un code d'une autre personne est une chose à savoir faire, mais je doute que like i love c soit assez expérimentée pour réécrire ton code.

    Je suis en IUT informatique (1er année) et je n'ai par exemple pas encore vu les :
    - goto
    - ++i
    - size_t
    - if(! ....)

    Donc normalement je ne devrais pas savoir ce que c'est donc en ce qui la concerne, j'ai peur qu'elle n'ai pas les cours pour comprendre correctement ton code.
    EDIT : j'ai rien dit^^

    Mais au moins elle a un exemple qui lui donne les fonctions à utiliser.

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Par défaut
    ++i incremente
    if condition
    ! negation exemple != n est pas egale c est du booleen !!
    ...

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

Discussions similaires

  1. Lire les lignes d'un fichier .txt en HTML
    Par Moustiik78 dans le forum Langage
    Réponses: 10
    Dernier message: 15/03/2014, 02h16
  2. Compter les lignes d'un fichier TXT
    Par Slyer4ever dans le forum C
    Réponses: 8
    Dernier message: 02/10/2013, 10h03
  3. Inverser les lignes d'un fichier csv
    Par azahiri dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 19/10/2012, 17h07
  4. Java - inverser les lignes d'un fichier volumineux
    Par Redouane81 dans le forum Général Java
    Réponses: 6
    Dernier message: 18/08/2011, 16h43
  5. Comparer les lignes d'un fichier txt
    Par Casimir* dans le forum VBScript
    Réponses: 3
    Dernier message: 28/08/2007, 15h12

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