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 :

lecture dans un fichier


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 115
    Par défaut lecture dans un fichier
    Bonjour,

    Je voudrais effectuer une lecture dans un fichier de type texte contenant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    q7 {
          moteur1=123.654
    }
    pour ce faire, l'idée est de lire une ligne/*fgets*/ puis après récupérer le nom de la voiture/* q7 */ , le nom du moteur /*moteur*/ , ses caractéristique /*123.653.487.698*/ dans des variables avec/*sscanf*/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #define MAX 100
    FILE* fp=fopen("fichier","r")
    char buffer[MAX]; nom_voiture1[MAX] ;nom_voiture2[MAX];
    fgets(  buffer , sizeof(buffer) , fp) /*lire une ligne*/
    sscanf(buffer,%[a-z]%[1-9], nom_voiture1, nom_voiture2)
    strcat(nom_voiture1 , nom_voiture2)
    Problèmes rencontrés;
    1)Quand la première ligne est vide, comment la supprimer car je trouver que la taille du buffer=1 je compare ce qui est à l'intérieur avec '\n' retour à la ligne et '\0' caractère blanc mais le resultat est négatif.

    2)Est ce que c'est possible d'éviter la concaténation

    3)pour la deuxième ligne, j'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sscanf(buffer," %[a-z][0-9]=%[0-9]+.[0-9]+, &nom_moteur, &num moteur, &cara1, &cara2);
    mais il n'assigne pas les valeurs

    merci d'avance pour toute reponse

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 099
    Billets dans le blog
    146
    Par défaut
    Bonjour,

    Je ne me rappeliez plus que sscanf acceptez des sortes de regexp.
    Je vous propose de lire la doc
    man sscanf
    ( ou sur google )

    Sinon, le format de votre fichier n'est pas le plus évident à lire.

    Mais je ferai un truc du genre:
    Regardez si la ligne à un '{' ( resultat de strstr != NULL )
    Si y en a un, lire la ligne de façon à récupéré le nom ( q7 )
    Lire la prochaine ligne en essayer de récupéré les élement, ( je verrai bien un jeu avec strstr (ligne, '=' ) pour trouver ou se trouve le '=', pour lire ce qui suite ( sscanf ( "%f"), et après le remplacer avec un \0 pour restreindre la chaine, et lire ce qui se précéder ( sscanf(ligne, "%s");
    Et puis le reste on s'en fout
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert confirmé
    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
    Par défaut
    Pour lire et tester si on a le nom de la voiture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( sscanf(buffer," %[a-z1-9]", nom_voiture)== 1)) .....
    Pour lire les caractéristiques de la voiture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sscanf(buffer," %[a-z]%[0-9] = %[0-9].%[0-9]", &nom_moteur, &num_moteur, &cara1, &cara2);
    (Attention aux blancs)

  4. #4
    Membre confirmé Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Par défaut
    Le mieux reste de faire soi meme un parser qui lit le fichier et qui l'interprete, une mauvaise utilisation des fonctions qui prennent des chaines formattees mene tres souvent a un SIGSEGV.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Par défaut
    Primo, si tu as le choix, utilises xml pour stocker tes données.
    Secundo, pour supprimer une ligne, tu es obligé de passer par un buffer (ou bien par un fichier temporaire).

  6. #6
    Membre confirmé Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Par défaut
    Citation Envoyé par nadojazz Voir le message
    Secundo, pour supprimer une ligne, tu es obligé de passer par un buffer (ou bien par un fichier temporaire).
    Tu oublies mmap

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Par défaut
    Citation Envoyé par ironzorg Voir le message
    Tu oublies mmap
    Je donnais simplement des pistes généralistes.

    mmap est spécifique à Linux, et revient, au final, à mettre les données dans un buffer via une fonction. L'equivalent Windows est MapViewOfFile.
    Pour ma part, j'utiliserais malloc, free, et tous leurs copains.

    Pour utiliser la mémoire du disque dur, il existe également des fonctions toutes prêtes pour passer par un fichier temporaire comme tmpfile().

Discussions similaires

  1. macros word et lecture dans un fichier excel
    Par antrax2013 dans le forum Windows
    Réponses: 2
    Dernier message: 01/10/2005, 19h05
  2. Réponses: 20
    Dernier message: 25/09/2005, 15h07
  3. Lecture dans un fichier
    Par unknown4 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 14/08/2005, 17h56
  4. [Débutant] Lecture dans un fichier texte
    Par babemagus dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/07/2005, 12h17
  5. Réponses: 12
    Dernier message: 14/06/2004, 13h06

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