tail language c
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

tail language c



  1. #1
    MANTA..

    tail language c


    ------

    Bonjour,

    J'ai besoin de votre aide car je dois réecrire la fonction tail(qui affiche les n dernieres lignes d'un texte) d'une certaine maniere, a savoir que je dois lire les P derniers caractères du texte, puis regarder dans ce que j'ai lu le nombre de retour à la ligne , S’il est supérieur à n j'affiche, Sinon je lis les P caractère "suivant". (C'est moi qui dois fixer la valeur de P)
    Ca fait au moins 4 heures que j'essaye de faire ca mais rien de ce que je tente ne marche. Avez vous des idées?

    Merci d'avance

    -----
    Dernière modification par MANTA.. ; 20/01/2012 à 21h41.

  2. #2
    invite765732342432
    Invité

    Re : tail language c

    Il faudrait que tu précises ton problème, car dans ton post il y a déjà tout l'algorithme à utiliser, de quoi as-tu besoin de plus ?
    Ton problème repose-t-il sur le choix de P ? Si oui, quelles sont tes contraintes ? (n'importe quelle valeur est potentiellement valable, tout dépend du but poursuivi...)

  3. #3
    invite4492c379

    Re : tail language c

    Citation Envoyé par MANTA.. Voir le message
    Bonjour,

    J'ai besoin de votre aide car je dois réecrire la fonction tail(qui affiche les n dernieres lignes d'un texte) d'une certaine maniere, a savoir que je dois lire les P derniers caractères du texte, puis regarder dans ce que j'ai lu le nombre de retour à la ligne , S’il est supérieur à n j'affiche, Sinon je lis les P caractère "suivant". (C'est moi qui dois fixer la valeur de P)
    Ca fait au moins 4 heures que j'essaye de faire ca mais rien de ce que je tente ne marche. Avez vous des idées?

    Merci d'avance
    Hello,

    à affiner ... que se passe-t-il si tu as moins de lignes dans ton fichier que de lignes demandées par exemple ...

    Sinon il y a quand même un truc qui me sidère, il y a souvent des messages sur ce fil du genre : «je dois réécrire (cut|tail|head|...) et je ne sais pas comment faire ...». Une solution simple est de se souvenir que ces outils sont de toute façon écrits en C et les sources sont dispo ; il reste à les lire, les comprendre (en plus il y a des commentaires), les refaire à sa sauce ce qui permet d'apprendre des techniques auxquelles on aurait pas pensé et qu'on n'enseigne pas forcément.

  4. #4
    invite765732342432
    Invité

    Re : tail language c

    Citation Envoyé par photon57 Voir le message
    Une solution simple est de se souvenir que ces outils sont de toute façon écrits en C et les sources sont dispo ; il reste à les lire, les comprendre (en plus il y a des commentaires), les refaire à sa sauce ce qui permet d'apprendre des techniques auxquelles on aurait pas pensé et qu'on n'enseigne pas forcément.
    Je ne pense pas que ce soit le meilleur moyen d'apprendre.
    C'est un très bon moyen pour se perfectionner, mais pour apprendre, je crois que c'est une catastrophe.

    Pour rigoler, je viens de jeter un oeil au source de tail... 2200 lignes !!! Pas mal... pour un exercice, tail doit faire quoi ? 15/20 lignes (avec des commentaires)
    Mais c'est clair que pour se perfectionner quand on maitrise toutes les bases (et un peu plus), c'est très bien !

  5. A voir en vidéo sur Futura
  6. #5
    invite4492c379

    Re : tail language c

    Citation Envoyé par Faith Voir le message
    Je ne pense pas que ce soit le meilleur moyen d'apprendre.
    C'est un très bon moyen pour se perfectionner, mais pour apprendre, je crois que c'est une catastrophe.

    Pour rigoler, je viens de jeter un oeil au source de tail... 2200 lignes !!! Pas mal... pour un exercice, tail doit faire quoi ? 15/20 lignes (avec des commentaires)
    Mais c'est clair que pour se perfectionner quand on maitrise toutes les bases (et un peu plus), c'est très bien !
    Mouais, pas faux. C'est vrai que si on a déjà du mal à pondre l'algo ça va pas beaucoup aider.

  7. #6
    MANTA..

    Re : tail language c

    Merci beaucoup pour vos réponses, efféctivement la première chose que j'ai faite c'est d'aller voir le code source de tail, mais je n'ai pas compris grand chose, de plus il y a des commentaire partout, c'est pas très agréable a lire. voici l'énoncé du problème :


    Exercice 16 (Version simpliste de tail) Une version simpliste de la commande détermine le nombre de lignes du fichier puis parcourt le fichier pour débuter l’affichage n lignes avant la fin.

    Malgré l’inconvénient majeur de cette approche, proposez une telle implantation.

    Exercice 17 (Version utile de tail) Une première version utile de la commande lit le fichier depuis le début en conservant dans un tampon circulaire les n dernières lignes lues. Ce tampon est affiché quand la fin du fichier est atteinte.

    Pourquoi une telle implantation peut-elle être qualifiée d’utile ?

    Une solution plus efficace consiste à lire le fichier depuis la fin. On lit un tampon de caractères d’une taille arbitraire (mais judicieusement choisie !). On y compte le nombre de retours à la ligne. S’il est supérieur à n, on peut afficher les n dernières lignes. Sinon, on lit le tampon précédent...

    J'ai déja faite la version de l'exercice 16 et j'ai choisi de faire la deuxiéme versions de l'exercice 17, comme vous le voyez il n'est pas écrit en détail ce que l'on doit faire et le professeur n'a fait que redire ce qui est écrit. Pour le cas ou le nombre de ligne demandé est supérieur au nombre de ligne total je ferais:

    printf("Nombre de ligne demandé > au nombre de ligne total");
    EXIT_SUCCESS;

    Mais j'ai pour habitude de gerer les différentes erreurs possible à la fin.

    Mon problème est que je ne sais pas comment lire les derniers caractères d'un fichier. En plus de ca la fonction doit être récursive ce qui fait que je ne voit pas comment stocker les résultat prècèdent ni même comment "sauvegardé" le nombre caractère déja lu.

  8. #7
    invite4492c379

    Re : tail language c

    Citation Envoyé par MANTA.. Voir le message
    (...)

    J'ai déja faite la version de l'exercice 16 et j'ai choisi de faire la deuxiéme versions de l'exercice 17, comme vous le voyez il n'est pas écrit en détail ce que l'on doit faire et le professeur n'a fait que redire ce qui est écrit. Pour le cas ou le nombre de ligne demandé est supérieur au nombre de ligne total je ferais:

    printf("Nombre de ligne demandé > au nombre de ligne total");
    EXIT_SUCCESS;

    Mais j'ai pour habitude de gerer les différentes erreurs possible à la fin.
    Hello,

    à mon avis, il serait raisonnable de faire comme tail : si on demande d'afficher les n dernières lignes et que le fichier en compte moins, alors on affiche tout le fichier.

    Citation Envoyé par MANTA.. Voir le message
    Mon problème est que je ne sais pas comment lire les derniers caractères d'un fichier. En plus de ca la fonction doit être récursive ce qui fait que je ne voit pas comment stocker les résultat prècèdent ni même comment "sauvegardé" le nombre caractère déja lu.
    Dans la doc tu peux trouver la fonction fseek qui peut être utile ... http://www.cplusplus.com/reference/clibrary/cstdio/fseek/

    S
    i tu as un buffer (de char) de taille n, tu te positionnes n byte avant la fin tu remplis ton buffer tu comptes le nombre de \n. Si tu arrives au bon nombre +1 ou en début de fichier de \n tu affiches le fichier à partir de là, sinon tu reviens encore plus en arrière. Essaye de pondre qqch, on pourra corriger. Rien de particulier sur les fichiers traités dans l'énoncé ?

  9. #8
    MANTA..

    Re : tail language c

    merci pour ton aide. Non , ils n'ont rien dit concernant le fichier. Je posterais ce que j'ai fait lundi normalement. Mais je pense que je vais utiliser la fonction fseek(~,~,SEEK_END) ainsi que la fonction read (pour remplir le buffer de taillle n ). Par contre j'ai une question , étant donner que fseek me positionnera a la fin du fichier, est ce que quand j'utiliserais la fonctions read, il me prendra les caracteres avant ou aprés la fin de fichiers?

  10. #9
    invite4492c379

    Re : tail language c

    Citation Envoyé par MANTA.. Voir le message
    merci pour ton aide. Non , ils n'ont rien dit concernant le fichier. Je posterais ce que j'ai fait lundi normalement. Mais je pense que je vais utiliser la fonction fseek(~,~,SEEK_END) ainsi que la fonction read (pour remplir le buffer de taillle n ). Par contre j'ai une question , étant donner que fseek me positionnera a la fin du fichier, est ce que quand j'utiliserais la fonctions read, il me prendra les caracteres avant ou aprés la fin de fichiers?
    Hello,

    prendre des caractères après le fichiers ... impossible
    Si tu disposes d'un buffer de taille n, tu te places (si possible) avec fseek à n byte avant la fin, puis tu lis les n bytes. S'il le faut tu recommence en fin du fichier -2n tu lis n bytes, fin de fichier -3n ....

  11. #10
    MANTA..

    Re : tail language c

    J'ai avancé un peu mais pour l'instant c'est plus un brouilon qu'autre donc je vais attendre d'avoir une version correcte pour poster mon code

Discussions similaires

  1. Head ou Tail
    Par Dlzlogic dans le forum Astronautique
    Réponses: 2
    Dernier message: 29/09/2011, 11h36
  2. Compilation Language C en Language Hex pour PIC16F877
    Par invitecc13ad94 dans le forum Électronique
    Réponses: 8
    Dernier message: 19/09/2011, 18h43
  3. language c
    Par invite31370605 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 04/12/2008, 22h44
  4. language C
    Par invitefa544961 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 22/07/2008, 10h10
  5. language C
    Par invite00b08343 dans le forum Logiciel - Software - Open Source
    Réponses: 13
    Dernier message: 02/09/2006, 18h03