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 chaine de caractère dans un fichier


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Points : 49
    Points
    49
    Par défaut lecture chaine de caractère dans un fichier
    bonjour,

    je souhaite lire dans un fichier, une chaine de caractères jusqu'a la fin de la ligne.
    j'ecrit tout d'abord dans un fichier la chaine de caractère suivante

    IP1=192.168.78.95\nIP2=192.168.78.97\n...

    lorsque j'ouvre le fichier, celui ci se prensente comme cela

    IP1=192.168.78.95
    IP2=192.168.78.97
    ...

    je souhaite lire par exemple la valeur de IP1
    je recherche donc la premiere occurence de "="
    puis je lit la fin de la ligne avec la fonction fgets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgets(buf, 14, fichier);
    jusque la tout va bien, mais si la taille de mon IP change (15 caractères par exemple) il me faudra alors remplacer le chiffre 14 par 16.
    Existe t'il une fonction qui permette a fgets de lire jusqu'a la fin de la ligne

    Merci pour votre aide

    ++

  2. #2
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par gy0m76
    je souhaite lire par exemple la valeur de IP1
    je recherche donc la premiere occurence de "="
    puis je lit la fin de la ligne avec la fonction fgets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgets(buf, 14, fichier);
    jusque la tout va bien, mais si la taille de mon IP change (15 caractères par exemple) il me faudra alors remplacer le chiffre 14 par 16.
    Existe t'il une fonction qui permette a fgets de lire jusqu'a la fin de la ligne
    Bonjour,
    fgets lit jusqu'à la fin de la ligne et au plus le nombre de caractères que tu lui demandes de lire (14 dans ton cas).
    Donc, pour résoudre ton problème, utilises un buffer de plus grande taille.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Points : 48
    Points
    48
    Par défaut
    Salut,

    Le plus simple pour toi est de retenir l'adresse du premier chiffre de l'ip par exemple dans un pointeur ip_s, et ensuite de deplacer un pointeur sur le dernier chiffre de ton IP (chaque ligne se termine par \n).

    Ensuite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    read(fd, buff, ip_e - ip_s)

  4. #4
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par malves
    Salut,

    Le plus simple pour toi est de retenir l'adresse du premier chiffre de l'ip par exemple dans un pointeur ip_s, et ensuite de deplacer un pointeur sur le dernier chiffre de ton IP (chaque ligne se termine par \n).

    Ensuite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    read(fd, buff, ip_e - ip_s)
    J'ai un doute sur le fait que ce soit le plus simple...

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gy0m76
    je souhaite lire dans un fichier, une chaine de caractères jusqu'a la fin de la ligne.
    j'ecrit tout d'abord dans un fichier la chaine de caractère suivante

    IP1=192.168.78.95\nIP2=192.168.78.97\n...

    lorsque j'ouvre le fichier, celui ci se prensente comme cela

    IP1=192.168.78.95
    IP2=192.168.78.97
    ...

    je souhaite lire par exemple la valeur de IP1
    je recherche donc la premiere occurence de "="
    puis je lit la fin de la ligne avec la fonction fgets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgets(buf, 14, fichier);
    jusque la tout va bien, mais si la taille de mon IP change (15 caractères par exemple) il me faudra alors remplacer le chiffre 14 par 16.
    Existe t'il une fonction qui permette a fgets de lire jusqu'a la fin de la ligne
    Tu prends le problème de travers.

    • D'une part, ton fichier composé de séquences de caractères imprimables terminés par un caractère de fin de ligne, ce qui est exactement la définition d'un fichier texte.
    • D'autre part fgets() est très exactement conçu pour lire une ligne d'un fchier texte.

    Il suffit que la taille du tableau de destination soit >= à la taille d'une ligne.

    Tu mets une taille raisonnablement pifométrique de 32 char et ça devrait aller.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       char buf[32];
       fgets(buf, sizeof buf, fichier);
    Ce n'est qu'une fois que la ligne est lue que tu cherches dans celle-ci le séparateur '=' et que tu analyses la suite pour en tirer les valeurs numériques des IP.

    Ne pas oublier que fgets() retourne NULL quand il n'y a plus rien à lire.

    http://emmanuel-delahaye.developpez....s.htm#fichiers

  6. #6
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Déclare buf avec une taille raisonnablement surestimée, c'est la solution la plus simple.

    Thierry

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/06/2011, 07h10
  2. [VBS] Recherche chaine de caractères dans un fichier
    Par parker13 dans le forum VBScript
    Réponses: 1
    Dernier message: 08/07/2006, 00h22
  3. Réponses: 3
    Dernier message: 07/06/2006, 14h40
  4. [VB]Recherche d'une chaine de caractère dans un fichier
    Par Empty_body dans le forum VB 6 et antérieur
    Réponses: 26
    Dernier message: 16/02/2006, 09h10
  5. Ecriture d'une chaine de caractères dans un fichier
    Par fleur_de_rose dans le forum MFC
    Réponses: 6
    Dernier message: 10/02/2006, 09h34

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