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 :

recuperation de données a partir d'un buffer


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2007
    Messages : 74
    Par défaut recuperation de données a partir d'un buffer
    Bonjour
    je suis bloqué à l etape finale de projet ,j ai programme qui me renvois un texte sous la forme

    xxxxx>yyyy \n
    xxxxx>yyyy \n
    ....
    ....
    xxxxx>yyyy \n eof

    je suis sensé reccuperé les valeurs xxxxx une par une et les stocker dans un tableau deja declaré puis quand je recontre le caracter " > " je dois recupper les valeurs yyyy pour les imprimer sur la sortie standard au fur at a mesure qu ils arrivent.
    Merci pour votre aide

  2. #2
    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 : 48
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Montre-nous le code que tu as déjà écris. Si tu n'arrives pas à démarrer, le principe est simple. Tu lis ton fichier ligne par ligne par exemple avec fgets(), puis tu récupères xxxxx et yyyy à l'aide de strtok(). Ensuite, tu n'a plus qu'à placer xxxxx dans le tableau et afficher yyyy selon la spécification du problème.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    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,

    Quel est exactement ton problème ? As-tu déjà écrit du code ? Si tel est le cas, peux-tu poster un code minimal, compilable, reproduisant ton problème ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2007
    Messages : 74
    Par défaut
    pour le moment j ai crée un fonction qui compte le nombre de lignes de mon buffer
    voila le 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
     
     int nb_lignes (FILE *fp)
    {
      int n=0, c;
     
      while ((c = fgetc(fp)) != EOF)
      {
        if (c == '\n')
        {
          n++;
        }
      }
      return n;
    }
    puis dans ma fonction main j ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    main(){
    //traitement
    read(fd[0],BUFF,BUFSIZE);//je recupere une chaine a partir d un  tube
    		int r;
    		r=nb_lignes(BUFF);}
    mon compilo me renvois
    attention : passing argument 1 of «nb_lignes" from incompatible pointer type

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2007
    Messages : 74
    Par défaut
    juste un precisio j aideclaré mon buffer

  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 : 48
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Le texte est envoyé sur le flux d'entrée standard par le tube. Je te conseille d'utiliser fgets() ou fgetc() plutôt que read() pour récupérer les lignes depuis stdin.

    Attention, BUFF est un tableau de caractères et ta fonction attend en argument l'adresse d'un flux ouvert.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2007
    Messages : 74
    Par défaut
    ca marche pas j ai un message

    premier.c: In function «main":
    premier.c:134: attention : passing argument 1 of «fgets" makes pointer from integer without a cast
    premier.c:134: attention : passing argument 2 of «fgets" makes integer from pointer without a cast
    premier.c:134: attention : passing argument 3 of «fgets" makes pointer from integer without a cast
    premier.c:136: attention : passing argument 1 of «nb_lignes" from incompatible pointer type


    le probleme c est que dans mon tube il y a tout un texte quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char BUFF[BUFSIZE];
    		read(fd[0],BUFF,BUFSIZE);
    printf("%s",BUFF);
    Ca marche sans problemes

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 133
    Par défaut
    Citation Envoyé par Flash_Over Voir le message
    pour le moment j ai crée un fonction qui compte le nombre de lignes de mon buffer
    voila le 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
     
     int nb_lignes (FILE *fp)
    {
      int n=0, c;
     
      while ((c = fgetc(fp)) != EOF)
      {
        if (c == '\n')
        {
          n++;
        }
      }
      return n;
    }
    puis dans ma fonction main j ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    main(){
    //traitement
    read(fd[0],BUFF,BUFSIZE);//je recupere une chaine a partir d un  tube
    		int r;
    		r=nb_lignes(BUFF);}
    mon compilo me renvois
    attention : passing argument 1 of «nb_lignes" from incompatible pointer type
    Rmarques:
    Il faut déclarer le int r; après le main()
    la fonction nb_lignes() ne comptera pas la dernière ligne si elle ne finit pas par '\n'
    la fonction nb_lignes() attend un pointeur de fichier en paramètre pas un tableau de caractères

    Ce n'est pas gagné effectivement. Il vaut mieux reprendre à zéro et chercher le moyen de lire ligne après ligne comme suggéré au dessus.

    On peut utiliser read() mais la moindre des choses c'est de tester la valeur de retour qui indique le nombre de caractères lus ou si il y a eu une erreur. Dans le cas où le fichier est plus grand que BUFSIZE on devra continuer à lire. Utiliser fgets() présente le même problème si on a une ligne plus longue que BUFSIZE, c'est également incorrect de ne pas traiter le cas mais il arrive plus rarement.

  9. #9
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2007
    Messages : 74
    Par défaut
    j ai essayé de changer mon code pour lui donner comme entré un *char
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int nb_lignes (char *fp)
    {
      int n=0;char c;
     
      while ((c = fgetc(fp)) != EOF)
      {
        if (c == '\n')
        {
          n++;
        }
      }
      return n;
    }
    mais je vois pas ou est le probleme

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 133
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    xxxxx>yyyy \n
    xxxxx>yyyy \n
    xxxxx>yyyy  eof
    renverra deux lignes au lieu de trois.

    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
     
    int nb_lignes (char *buff)
    {
    int n=0;
    int i=0 ;
     
       do {
            if (buff[i] == '\n') 
                n++ ;
            else 
                if (buff[i] != '\0') i++ ;
       } while (buff[i] != '\'0') ;
        if ((i>0) && (buff[i-1] != '\n')) 
            n++ ;
        return n;
    }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/04/2014, 16h40
  2. Réponses: 4
    Dernier message: 25/07/2011, 21h50
  3. recupere des données a partir d-une autre fenetre
    Par b2o92ikho dans le forum Forms
    Réponses: 1
    Dernier message: 09/04/2009, 16h30
  4. Réponses: 2
    Dernier message: 22/11/2005, 22h09

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