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 :

Popen pour récupérer lignes d'un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Par défaut Popen pour récupérer lignes d'un fichier
    Bonjour, je voudrais récupérer un fichier dans un pipe afin de travailler dessus. Mon fichier qui se nomme « res » fait plus de 800 lignes, et je voudrais récupérer les lignes une par une afin de les traiter avec mon programme. Le problème, c'est que je n'arrive pas à utiliser la fonction popen comme il se doit.

    Voici mon code:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include<stdio.h>
    #include<stdlib.h>
    #define COMMAND_LEN 20
    #define DATA_SIZE 512
     
    int main(void){
    FILE *pf;
    char command[COMMAND_LEN];
    char data[DATA_SIZE];
    int cpt=1;
     
    // Execute a process listing
     sprintf(command, "cat res");
     
    // Setup our pipe for reading and execute our command.
    pf = popen(command,"r");
     
    if(!pf){
      fprintf(stderr, "Could not open pipe for output.\n");
      return;
     }
     
    // Grab data from process execution
    fgets(data, DATA_SIZE , pf);
     
    // Print grabbed data to the screen.
     fscanf (pf,"%s\n", data);
     printf("test %d: %s", data);
     cpt=cpt+1;
     pclose(pf);
     
    return 0;
    }

    J'obtient uniquement la première ligne de mon fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MONUJPFU77;SYSTEM_FS_H;'C:'=35%;70;90;
    Quelqu'un pourrait m'aider SVP?

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Bonjour,

    Il est extrêmement laid d'utiliser « cat » inutilement, et encore plus de le lancer depuis un exécutable surtout si la seule chose que tu veux faire au final est lire le contenu de ton fichier. Il suffit « d'ouvrir » tout simplement ton fichier. Remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     sprintf(command, "cat res");
    pf = popen(command,"r")
    … par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     pf = fopen ("res","r");
    … tout simplement. Le reste de ton code est compatible.

    Ensuite, ces deux fonctions sont très similaires.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Grab data from process execution
    fgets(data, DATA_SIZE , pf);
     
    // Print grabbed data to the screen.
     fscanf (pf,"%s\n", data);
    fscanf() sert à LIRE le contenu de ton fichier (via « pf »). Pas du tout à écrire à l'écran (un simple printf aurait suffi).


    Enfin, tu as oublié de mettre en place une boucle autour de ces lignes (for ou while). Par conséquent, une fois qu'elles ont été exécutées, le programme poursuit son chemin jusqu'à la fin de ta fonction, et s'arrête.

Discussions similaires

  1. [XSLT] pour récupérer le nom du fichier d'entrée
    Par alouani dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 20/06/2011, 10h14
  2. Fonction pour récupérer nom d'un fichier
    Par fabsb dans le forum Langage
    Réponses: 2
    Dernier message: 03/05/2009, 14h40
  3. Réponses: 6
    Dernier message: 28/12/2007, 22h34
  4. [XSLT] pour récupérer le nom du fichier d'entrée
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 31/05/2007, 10h58

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