Partage
  • Partager sur Facebook
  • Partager sur Twitter

Prb avec fseek

Sujet résolu
    29 mai 2006 à 23:58:24

    Bonjour à tous,

    Voila j'ai une simple petite question, quelqu'un pourrait-il m'expliquer la différence entre ces deux codes, car les résultats different selon que j'utilise le premier ou le second. Je voudrais juste positionner le curseur à nbChar caracteres du début du fichier.
    fseek(fichier, nbChar, SEEK_SET);



    rewind(fichier);
    for(i=0;i<nbChar;i++)
            c=fgetc(fichier);
            //c n'etant pas utilisé



    Merci d'avance.


    EDIT : Après quelque essais, il semblerait en fait que fseek déplace le curseur de N caracteres SANS compter les espaces (et les tab peu etre ?)L'équivalent à ma 2eme fonction serait lseek qui prendrais bien en compte les espaces mais qui fonctionne différement je crois.

    Merci de confirmer si vous en savez d'avantage concernant les caracteres omis par fseek et la façon dont fonctionne lseek.(A mon avis ceci mériterait une petite modification du tuto de C afin de gagner en précision, à moins que j'ai raté quelque chose.)
    • Partager sur Facebook
    • Partager sur Twitter
      30 mai 2006 à 10:11:58

      Citation : lexou

      Voila j'ai une simple petite question, quelqu'un pourrait-il m'expliquer la différence entre ces deux codes, car les résultats different selon que j'utilise le premier ou le second. Je voudrais juste positionner le curseur à nbChar caracteres du début du fichier.


      Je pense que c'est plus un problème de format de fichier et de mode de lecture :

      Lecture de 64 bytes de ce fichier :

      Maître Corbeau, sur un arbre perché,
      Tenait en son bec un fromage.
      ...

      sauvegardé en mode DOS/Windows :

      read_bin at 0
      0022FED0 4D 61 EE 74 72 65 20 43 6F 72 62 65 61 75 2C 20 'Ma.tre Corbeau, '
      0022FEE0 73 75 72 20 75 6E 20 61 72 62 72 65 20 70 65 72 'sur un arbre per'
      0022FEF0 63 68 E9 2C 0D 0A 54 65 6E 61 69 74 20 65 6E 20 'ch.,..Tenait en '
      0022FF00 73 6F 6E 20 62 65 63 20 75 6E 20 66 72 6F 6D 61 'son bec un froma'
      read_txt at 0
      0022FED0 4D 61 EE 74 72 65 20 43 6F 72 62 65 61 75 2C 20 'Ma.tre Corbeau, '
      0022FEE0 73 75 72 20 75 6E 20 61 72 62 72 65 20 70 65 72 'sur un arbre per'
      0022FEF0 63 68 E9 2C 0A 54 65 6E 61 69 74 20 65 6E 20 73 'ch.,.Tenait en s'
      0022FF00 6F 6E 20 62 65 63 20 75 6E 20 66 72 6F 6D 61 67 'on bec un fromag'

      Press ENTER to continue.

      On voit qu'en mode binaire, on lit "0D 0A" (CR/LF), alors qu'en mode texte, on lit "0A", ce qui décale tout de 1 évidemment...
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        30 mai 2006 à 15:03:38

        Ok je vois, alors dans quel format suis-je censé l'enregistrer ? La j'ai juste enregistré avec le bloc-note de base de windows.

        Je ferais des essais ce soir, merci en tout cas.
        • Partager sur Facebook
        • Partager sur Twitter
          30 mai 2006 à 15:35:14

          Citation : lexou

          Ok je vois, alors dans quel format suis-je censé l'enregistrer ? La j'ai juste enregistré avec le bloc-note de base de windows.


          Donc au format DOS/Windows.

          http://mapage.noos.fr/emdel/notes.htm#fichiers

          Il faut donc faire attention au comportement de fseek() qui ne fonctionne correctement qu'en mode binaire, donc avec ce qu'il y a réellement dans le fichier ('\n' -> CR LF : 2 caractères).
          Et ce n'est pas portable. De plus, Beaucoup d'applications Windows supportent aussi le mode 'Unix' ('\n' -> LF : 1 caractère), ce qui ne facilite pas la tâche...

          Donc je ne sais pas si c'est une bonne idée d'utiliser fseek() sur un fichier texte. Tu veux faire quoi exactement ?
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
            30 mai 2006 à 16:04:23

            Juste me positionner au Nième caractere pour continuer d'analyser le texte. Je vais utiliser mon truc avec fgetc sinon ca marche bien...
            Sinon ya pas possibilité de déplacer le pointeur sur fichier en modifiant son adresse ?

            (je rep. ce soir je retourne en cours)
            • Partager sur Facebook
            • Partager sur Twitter
              30 mai 2006 à 16:13:32

              Citation : lexou

              Juste me positionner au Nième caractere pour continuer d'analyser le texte.


              Problème de conception. Comme je de l'ai démontré, la notion de Nième caractère est floue dans un fichier texte. Il faut travailler en lignes complètes (si on maitrise l'allocation dynamique, il y a moyen de lire une ligne complète quelle que soit sa taille). Ensuite, on peut chercher le Nième caractère dans la ligne.

              Citation : Pas de titre


              Je vais utiliser mon truc avec fgetc sinon ca marche bien...


              Oui, c'est portable (ouvrir le ficher en mode texte : "r"). Dans ce cas, un '\n' compte pour 1. Pour accélerer le traitement, travaille en séquence (pas de retour en arrière à coup de rewind()).

              Citation : Pas de titre


              Sinon ya pas possibilité de déplacer le pointeur sur fichier en modifiant son adresse ?


              Cette question n'a aucun sens. Je prefère dire que je ne l'ai pas lue et que tu ne l'as pas écrite !

              "We never had this conversation" -- Deep Throat in The X-Files
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                30 mai 2006 à 19:01:22

                Merci ;)

                Et je n'ai jamais rien écrit de tel :o
                • Partager sur Facebook
                • Partager sur Twitter

                Prb avec fseek

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown