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 :

Ne récupérer que les entiers dans un fichier


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 89
    Points : 11
    Points
    11
    Par défaut Ne récupérer que les entiers dans un fichier
    Bonjour,

    Je programme en C, j'ai un fichier qui contient ceci :

    hello frfr 5 3
    Je voudrais ne récupérer que le 5 et le 3 dans des variables.

    Merci beaucoup.

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Points : 163
    Points
    163
    Par défaut
    Si tu as juste des cas semblables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int i=0,fd,result;
    char tmp;
    if(fd=open("file.txt"))
    {
    	while(read(fd,&tmp,1)
    		if((tmp>='0') && (tmp<='9'))
    			result=tmp-'0';
    }
    C'est une piste. Tu peux ensuite l'améliorer pour stocker plusieurs valeurs.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 89
    Points : 11
    Points
    11
    Par défaut
    c est qoi tmp??
    Citation Envoyé par dré kam Voir le message
    Si tu as juste des cas semblables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int i=0,fd,result;
    char tmp;
    if(fd=open("file.txt"))
    {
    	while(read(fd,&tmp,1)
    		if((tmp>='0') && (tmp<='9'))
    			result=tmp-'0';
    }
    C'est une piste. Tu peux ensuite l'améliorer pour stocker plusieurs valeurs.

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Points : 163
    Points
    163
    Par défaut
    C'est la variable de type char que j'ai déclarée en début de code.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 89
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par dré kam Voir le message
    C'est la variable de type char que j'ai déclarée en début de code.
    j arrive pas a affiché le valeur stocké dans le fichier quand je lance le programme il boucle en fait
    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
    include<stdio.h>
    #include<stdlib.h>
    #define TAILLE_MAX 100
    int main(int argc, char *argv[])
    {
      int tab[2]={0},i=0,result,fd;
    FILE* fichier=NULL;
     char tmp;
    fichier =fopen("probleme.txt","r");
    if(fichier!=NULL)
      {
     
        while (read(fd,&tmp,1)) 
          {                                                                    
    	if((tmp>='0') && (tmp<='9'))
    			result=tmp-'0';                                           
          }
     
            fclose(fichier);
      }
     printf("%d\n",result);
        r

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Points : 163
    Points
    163
    Par défaut
    C'est normal... Tu as déclaré un int fd non initialisé et non modifié, tu le compares ensuite, donc ça fait une boucle infinie.
    Il faudrait plutot utiliser open (2) avec la flag que tu veux (voir man) car il renvoie un file descriptor, que tu stockeras dans fd.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 89
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par dré kam Voir le message
    C'est normal... Tu as déclaré un int fd non initialisé et non modifié, tu le compares ensuite, donc ça fait une boucle infinie.
    Il faudrait plutot utiliser open (2) avec la flag que tu veux (voir man) car il renvoie un file descriptor, que tu stockeras dans fd.
    excuse moi j ai pas compris!!!!

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Points : 163
    Points
    163
    Par défaut
    Je reprends:
    -Tu utilises la fonction open (2) qui te renverra un file descriptor que tu stockeras dans fd.
    -Tu utilises read (2) pour lire dans lle fichier grace au file descriptor.
    -En gros tu obtiendra quelque chose comme le code que je t'ai donné. Tu peux donc te baser dessus.

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Citation Envoyé par simplyc Voir le message
    bonjour,

    je programme en C, j ai un fichier qui contient ca
    hello frfr 5 3
    je voudrais récupérer que le 5 et le 3 dans des variables
    Merci BEAUCOUP
    Ta question, posée comme cela, est trop vague et trop ambigüe.

    En effet, tu ne précises pas si cette ligne contenue dans le fichier est un exemple, c'est-à-dire qu'elle peut être modifiée (et que le programme doive donc en tenir compte). Car si c'est le cas, il nous faut connaitre le format de ce fichier, et par conséquent savoir sur quels critères s'appuyer pour récupérer tel ou tel "token".

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 89
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par jeroman Voir le message
    Ta question, posée comme cela, est trop vague et trop ambigüe.

    En effet, tu ne précises pas si cette ligne contenue dans le fichier est un exemple, c'est-à-dire qu'elle peut être modifiée (et que le programme doive donc en tenir compte). Car si c'est le cas, il nous faut connaitre le format de ce fichier, et par conséquent savoir sur quels critères s'appuyer pour récupérer tel ou tel "token".

    en fait le fichiers est tous le temps sur la meme forme ,il ya que les valeurs qui c est changenst

    merci

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 89
    Points : 11
    Points
    11
    Par défaut
    ici j ai un essai
    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
    include<stdio.h>
    #include<stdlib.h>
    int main(int argc, char *argv[])
    {
        FILE* fichier = NULL;
        char car="";
        fichier = fopen("probleme.txt","r");
     
        if (fichier != NULL)
        {
          car=fgetc(fichier);
          while(car!=EOF)
    	{
    	  if(car>"0" || car<"9")
     
    	       printf("%c", car); // On affiche le caractère stocké dans caractereActuel
      	    car = fgetc(fichier); // On lit le caractère suivant
    	}
     
            fclose(fichier); // On ferme le fichier qui a été ouvert        
        }
     
        return 0;
    }

    ici il ma affiche tous le"s contenue d un fichier

  12. #12
    Membre éprouvé
    Avatar de f-k-z
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2006
    Messages : 403
    Points : 928
    Points
    928
    Par défaut
    Déja il faut utilisé >= ou <= sinon tu ne prendras jamais en compte le 0 et le 9. ensuite il ne faut pas utiliser des double quote, mais des simples.
    Donc ça doit être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( car<='0' || car<='9' )
    fiki
    GNU/Linux c'est une question de VI ou de MORE.
    http://www.goodbye-microsoft.com
    "Linux is user friendly, its just very selective of its friends*", m'enfou, je suis son pote :p

    Un post vous est utile ou est constructif, ayez le réflexe du +1 pour le contributeur ( C'est gratuit et ça donne l'impression d'être utile :p )
    Le tag et la ne sont pas fait que pour le décor, pensez-y !
    R.I.P. F-k-z 13/06/2006 - 12/10/2011
    *Linux est convivial, il est juste très sélectifs pour ses amis.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 89
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par KevinouLoliLol Voir le message
    Déja il faut utilisé >= ou <= sinon tu ne prendras jamais en compte le 0 et le 9. ensuite il ne faut pas utiliser des double quote, mais des simples.
    Donc ça doit être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( car<='0' || car<='9' )
    fiki
    oui c est vrai ....mais j ai trouvé une autre idéé,
    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
    34
    35
    36
    #include<stdio.h>
    #include<stdlib.h>
    #include<ctype.h>
    #define TAILLE_LIG 100
    int main(int argc, char *argv[])
    {
      int k,i;
      char chaine[TAILLE_LIG];
        FILE* fichier = NULL;
        char car="";
        fichier = fopen("probleme.txt","r");
     
        if (fichier != NULL)
        {
    while((fgets(chaine, TAILLE_LIG, fichier)!=NULL)&&i<TAILLE_LIG) // On lit maximum TAILLE_LIG caractères du fichier, on stocke le tout dans "chaine"
      {
        k=0;
      while(k<TAILLE_LIG &&chaine[k]==' ')
          {
    	k++;
     
          }
      if(chaine[k]>'a'&& chaine[k]<'Z')
        {	    
          k++;
        }
    else
    	    printf("val %c\n ", car); // On affiche le caractère stocké dans caractereActuel
      	    car = fgetc(fichier); // On lit le caractère suivant
    	}
     
            fclose(fichier); // On ferme le fichier qui a été ouvert        
        }
     
        return 0;
    }


    ca marche pas encore !!!!!!!!!!!!!!!!!!!!

  14. #14
    Membre éprouvé
    Avatar de f-k-z
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2006
    Messages : 403
    Points : 928
    Points
    928
    Par défaut
    ... je suis limite au bord du suicide là....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(chaine[k]>'a'&& chaine[k]<'Z')
    mais encore ??
    aller je suis tellement désespéré que je te file 4 liens qui vont changer ta vie:
    http://www.asciitable.com/
    http://c.developpez.com/faq/
    http://c.developpez.com/cours/
    http://c.developpez.com/livres/

    Et heuresement que tu programmes en C... Arrivé à un stade faut pas continuer à essayer, change de voie, laisse tomber l'info (pour le bien des membres du forum (sisi je t'assure) )
    GNU/Linux c'est une question de VI ou de MORE.
    http://www.goodbye-microsoft.com
    "Linux is user friendly, its just very selective of its friends*", m'enfou, je suis son pote :p

    Un post vous est utile ou est constructif, ayez le réflexe du +1 pour le contributeur ( C'est gratuit et ça donne l'impression d'être utile :p )
    Le tag et la ne sont pas fait que pour le décor, pensez-y !
    R.I.P. F-k-z 13/06/2006 - 12/10/2011
    *Linux est convivial, il est juste très sélectifs pour ses amis.

  15. #15
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 168
    Points
    168
    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
     
    #include <stdio.h>
     
    int main(void)
    {
      int val1, val2;
      FILE *f = fopen("file.txt", "r");
     
      if(f){
        if(fscanf(f, "%*[^0-9]%d%d", &val1, &val2) == 2)
          printf("val1 = %d\nval2 = %d\n", val1, val2);
     
        fclose(f);
      }
     
      return 0;
    }

Discussions similaires

  1. Logiciel pour récupérer que les mails dans une page web
    Par mouss4rs dans le forum Autres Logiciels
    Réponses: 0
    Dernier message: 24/07/2010, 14h41
  2. Réponses: 2
    Dernier message: 22/02/2007, 19h28
  3. Réponses: 12
    Dernier message: 21/02/2007, 09h44
  4. [](VB) Récupérer les données dans un fichier .xml
    Par Furius dans le forum VBScript
    Réponses: 4
    Dernier message: 02/10/2005, 20h39
  5. récupérer un entier dans le fichier ".rc"
    Par luffy0013 dans le forum MFC
    Réponses: 2
    Dernier message: 15/02/2005, 12h44

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