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 :

Déplacement dans un fichier, windows/linux


Sujet :

C

  1. #1
    Débutant Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Points : 162
    Points
    162
    Par défaut Déplacement dans un fichier, windows/linux
    bonjour, ma question concerne le code suivant :

    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
    /* si comm (##) => rien sinon => retour au début de la ligne */
    int verifierLigneCommentaire(FILE *fichier)
    {
    	char buffer[TAILLE_LIGNE_MAX]=" ";
     
    	fgets(buffer,sizeof(buffer),fichier);
    	buffer[strlen(buffer)-1]='\0';
     
    	if ( !( (strlen(buffer)>2 && buffer[0]==CAR_COMMENTAIRE && buffer[1]==CAR_COMMENTAIRE) || (!strlen(buffer)) ) )
    	{
    		fseek(fichier, -strlen(buffer)-1, SEEK_CUR);
    		return 0;
    	}
     
    	return 1;
    }
    Ce code marche très bien sous linux, sous windows pour qu'il marche je dois faire :

    fseek(fichier, -strlen(buffer)-2, SEEK_CUR);

    Pourquoi ?

  2. #2
    Membre régulier Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 122
    Points
    122
    Par défaut
    Bonsoir,
    tu utilises deux fonctions fseek() et strlen() c'est soit l'une soit l'autre.
    Essaie d'en isoler une par exemple strlen() en jouant sur sizeof(char)=1 et en programmant ta propre fonction strlen() pour deterniner la taille de ton buffer.
    Pourquoi les pierres carrées font elles des ronds dans l'eau ?

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Ce code marche très bien sous linux, sous windows pour qu'il marche je dois faire :

    fseek(fichier, -strlen(buffer)-2, SEEK_CUR);

    Pourquoi ?
    Parce que le codage de la fin de ligne dans le fichier sont différents : Dans un cas, il n'y en a qu'un caractère et dans l'autre deux.


    Il te faut utiliser ftell pour "repérer" la position du fichier sur laquelle tu veux revenir avec fseek.
    La norme le dit explicitement :
    7.19.9.2 The fseek function
    Synopsis
    1 #include <stdio.h>
    int fseek(FILE *stream, long int offset, int whence);
    Description
    ....
    4 For a text stream, either offset shall be zero, or offset shall be a value returned by an earlier successful call to the ftell function on a stream associated with the same file and whence shall be SEEK_SET.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Débutant Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Points : 162
    Points
    162
    Par défaut
    oups, c'est vrai, j'avais oublié.

    merci.

  5. #5
    Débutant Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Points : 162
    Points
    162
    Par défaut
    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
    int verifierLigneCommentaire(FILE *fichier)
    {
    	char buffer[TAILLE_LIGNE_MAX]=" ";
    	long pos=ftell(fichier);
     
     
    	fgets(buffer,sizeof(buffer),fichier);
    	buffer[strlen(buffer)-1]='\0';
     
    	if ( !( (strlen(buffer)>2 && buffer[0]==CAR_COMMENTAIRE && buffer[1]==CAR_COMMENTAIRE) || (!strlen(buffer)) ) )
    	{
    		fseek(fichier, pos, SEEK_SET);
    		return 0;
    	}
     
    	return 1;
    }
    ne marche pas

  6. #6
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Salut,
    Citation Envoyé par Rniamo
    ne marche pas
    Peu-tu préciser ? Où veux-tu te positionné après l'appelle à fseek ?
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  7. #7
    Débutant Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Points : 162
    Points
    162
    Par défaut
    si la ligne ne vérifie pas le test ( if (!()) ), je veux retourner au début de la ligne.

    edit : apperemment le problème venait d'ailleurs.

    merci à ceux qui ont répondus.

  8. #8
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par Rniamo Voir le message
    si la ligne ne vérifie pas le test ( if (!()) ), je veux retourner au début de la ligne.
    Pour l'instant, tu fais le contraire : si le test est vérifié tu retournes en début de ligne. (D'ailleurs, je trouve ce test bizarre).
    La fonction devrait également prendre en compte la fin du fichier et retourner cette information.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  9. #9
    Débutant Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Points : 162
    Points
    162
    Par défaut
    non, je fais ce que je veux.

    je prend la négation du test, donc c'est bon.

  10. #10
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par Rniamo Voir le message
    je prend la négation du test, donc c'est bon.
    Moi, j'appelle "le test" tout ce qu'il y a dans la condition du if
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  11. #11
    Débutant Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Points : 162
    Points
    162
    Par défaut
    je me suis mal exprimé alors, désolé.

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

Discussions similaires

  1. droit d'execution dans un fichier.zip linux/windows
    Par steve0stine dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 21/05/2008, 21h26
  2. Réponses: 5
    Dernier message: 05/06/2007, 00h41
  3. Déplacement dans un fichier seekg tellg
    Par renlel dans le forum C++
    Réponses: 3
    Dernier message: 25/04/2007, 14h25
  4. déplacement dans un fichier.txt
    Par yohann007 dans le forum C
    Réponses: 11
    Dernier message: 21/03/2007, 11h06
  5. Réponses: 4
    Dernier message: 19/05/2006, 17h06

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