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 :

Se déplacer dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Par défaut Se déplacer dans un fichier
    Bonjour, je souhaiterai me déplacer dans un fichier txt se remplissant au fur et à mesure double par double sur 7 colonnes de doubles espacé de \t.

    J'utilise pour le moment fsetpos et fgetpos avec des fpos_t et des fseek/ftellmais j'ai vu récemment je ne sais plus où que de mélanger les fseek et les fgetpos n'étaient pas bon. Je voudrais donc savoir comment unifier tout cela car j'effectue des remontées et des descente dans mon fichier danc les deux paires de fonctions me sont utiles...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // fseek me permet essentiellement de remonter caractère par caractère depuis la fin, c'est essentiellement cela que je souhaiterai faire exclusivement en fgetpos / fsetpos ...
    fseek(fic, -1, SEEK_END)...
     
    // fgetpos et fsetpos me permettent de me placer à la fin des fseek
    fgetpos(fic, &pos_a);
    Voilà, je voulais donc savoir si j'avais le droit de marier les deux sans perdre en fiabilité? Si non comment faire tout en fgetpos/fsetpos qui est le seul portable selon le man..Merci d'avance

  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
    Bonjour,

    D'après le man, fseek et ftell sont de l'AINSI C (C89 si je ne m'abuse), ils sont donc bel et bien portables.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Par défaut
    Oui c'est ce que je me suis toujours dis mais là j'avais un besoin plus poussé des fonction de positionnement ce qui m'a permis de tomber sur ça :

    http://www.cplusplus.com/reference/cstdio/ftell/


    Il y a le petit commentaire //non portable à côté de la ligne qui correspond à l'utilisation de fseek que je souhaite faire. Est-ce que je me prends la t^te pour rien ou est-ce que cela a une importance?

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    fseek, ftell et fgetpos sont bien des fonctions standard, je ne vois pas en quoi ca ne serait pas portable...
    De meme pour SEEK_CUR, SEEK_END et SEEK_SET....

    Tout cela est par exemple present dans le paragraphe 7.19.9 de la norme C99.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  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 : 37
    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
    En allant sur la page dédiée à fseek(), on peut lire ceci http://www.cplusplus.com/reference/cstdio/fseek/
    For streams open in text mode, offset shall either be zero or a value returned by a previous call to ftell, and origin shall necessarily be SEEK_SET.

    If the function is called with other values for these arguments, support depends on the particular system and library implementation (non-portable).
    Mon interprétation est que ce n'est donc pas fseek() qui n'est pas portable, mais l'utilisation de SEEK_END (d'après cette page sur fseek(), je rajouterais "dans un flux texte" mais d'après l'exemple de code de la page que tu cites, je dirais plutôt "quelque soit le mode du flux").

    Ceci dit, la page de manuel ne dit rien sur une non portabilité : http://man.developpez.com/man3/fseek.3.php

    http://www.gnu.org/software/libc/man...sitioning.html donne une précision :
    Portability Note: In non-POSIX systems, ftell, ftello, fseek and fseeko might work reliably only on binary streams.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bktero Voir le message
    For streams open in text mode, offset shall either be zero or a value returned by a previous call to ftell, and origin shall necessarily be SEEK_SET.

    If the function is called with other values for these arguments, support depends on the particular system and library implementation (non-portable).
    Mon interprétation est que ce n'est donc pas fseek() qui n'est pas portable, mais l'utilisation de SEEK_END
    Bien vu mais moi j'irais même jusqu'à dire que SEEK_CUR doit aussi être évité...
    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]

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En effet: Avec SEEK_CUR et n'importe quel offset (positif ou négatif), même 1, la norme ne précise pas ce qui se passe en mode texte si on tombe sur un \r\n...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    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 : 37
    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 Sve@r Voir le message
    Bien vu mais moi j'irais même jusqu'à dire que SEEK_CUR doit aussi être évité...
    Oui aussi. Je cherchais juste à analyser le commentaire "non-portable" du code dont parlait le PO

    Pas bête l'idée de Médinoc de travailler en binaire.

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

Discussions similaires

  1. Se déplacer dans un fichier
    Par Invité dans le forum Débuter
    Réponses: 10
    Dernier message: 15/01/2014, 12h14
  2. [XPATH] Est-il possible de se déplacer dans un fichier xml
    Par areda dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/12/2010, 22h55
  3. [Forms - PL/SQL] Se déplacer dans un fichier
    Par Yoshidu62 dans le forum Forms
    Réponses: 2
    Dernier message: 15/11/2007, 11h21
  4. [Fichiers] Enregistrer/Déplacer dans un répertoire
    Par babyboy dans le forum Entrée/Sortie
    Réponses: 19
    Dernier message: 12/05/2004, 14h33

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