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 :

Parsing d'un fichier


Sujet :

C

  1. #21
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Tableau, liste...
    Pour faire le stockage des IP, j'ai crée la structure suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct{
      int a;
      int b;
      int c;
      int d;
    }Adresse_ip;
    j'ai ajouté ceci dans le code que tu avais écrit :

    tab_ip est de type Adresse_ip*

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        if (p != NULL)
              {
                int ip[4];
                sscanf(p, "%d.%d.%d.%d", ip, ip + 1, ip + 2, ip + 3);
                //printf ("%3d %3d %3d %3d\n", ip[0], ip[1], ip[2], ip[3]);
                tab_ip[ind].a = ip[0];
                tab_ip[ind].b = ip[1];
                tab_ip[ind].c = ip[2];
                tab_ip[ind].d = ip[3];
                ind++;
              }
    J'obtiens une erreur de segmention

  2. #22
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par Premium
    tab_ip est de type Adresse_ip*

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [...]
                tab_ip[ind].a = ip[0];
    [...]
    tu alloue de la mémoire quelque part pour ta structure ? Sinon c'est sûr que ton programme n'apprécie pas.

  3. #23
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Citation Envoyé par gege2061
    tu alloue de la mémoire quelque part pour ta structure ? Sinon c'est sûr que ton programme n'apprécie pas.
    C'est vrai, j'ai oublié l'allocation.
    Comment se passera l'allocation car on ne sait pas combien d'adresses IP seront prises en compte?

  4. #24
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par Premium
    C'est vrai, j'ai oublié l'allocation.
    Comment se passera l'allocation car on ne sait pas combien d'adresses IP seront prises en compte?
    Description des mécanismes d'allocation dynamique de mémoire en langage C

    Bon courrage

  5. #25
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Salut,

    j'ai réécrit le code avec une allocation dynamique de tableau mais j'obtiens ceci à l'affichage
    0.0.0.0
    Est-ce que vous pourriez me dire ce qui cloche dans le code ?

    Merci

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <assert.h>
     
    #define F "fichier"
     
     
    typedef struct
    {
      int a;
      int b;
      int c;
      int d;
    }Adresse_ip;
     
     
    static void purge(FILE *fp)
    {
      int c;
      while ((c = fgetc(fp)) != '\
    ' && c != EOF)
        {
        }
    }
     
    static void clean (char *s, FILE *fp)
    {
      char *p = strchr (s, '\
    ');
      if (p != NULL)
        {
          *p = 0;
        }
      else
        {
          purge (fp);
        }
    }
     
     
    int main()
    {
      FILE *fp = fopen(F, "r");
      int **tab;
      int i=0;
      Adresse_ip *tab_ip;
      int k = 1;
      int indice = 0;
      int j = 0;
     
      tab_ip = (Adresse_ip *)malloc(k * sizeof(Adresse_ip));
      if(tab_ip == NULL){
        perror("erreur allocation");
        exit(1);
      }
     
      if (fp != NULL)
        {
          char line[BUFSIZ];
     
          while (fgets(line, sizeof line, fp) != NULL)
        {
          clean(line, fp);
     
          char *p = strtok(line, " ");
          if (p != NULL)
            {
              p = strtok(NULL, " ");
              if (p != NULL)
            {
              int ip[4];
              sscanf(p, "%d.%d.%d.%d", ip, ip + 1, ip + 2, ip + 3);
     
              tab_ip[indice].a = ip[0];   
              tab_ip[indice].b = ip[1];
              tab_ip[indice].c = ip[2];
              tab_ip[indice].d = ip[3];
     
              indice ++;
     
              if(indice == k)
                {
                  Adresse_ip *tmp = (Adresse_ip *)malloc((k + 1) * sizeof(Adresse_ip));
                  if (tmp == NULL){
                perror("erreur allocation");
                exit(1);
                  }
                  tab_ip = tmp;    
                }  
            }
              else
            {
              printf ("format error\n");
              break;
            }
            }
          else
            {
              printf ("format error\n");
              break;
            }
        }
          fclose (fp), fp = NULL;
        }
      else
        {
          perror (F);
        }
     
      for(j=0; j<k; j++)
        {
          printf("%d.%d.%d.%d ",tab_ip[j].a,tab_ip[j].b,tab_ip[j].c,tab_ip[j].d);
          printf("\n");
        }
     
      return 0;
    }

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Premium

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      while ((c = fgetc(fp)) != '\
    ' && c != EOF)
    <...>
      char *p = strchr (s, '\
    ');
    M'enfin, pourquoi tu as massacré mes fonctions ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      while ((c = fgetc(fp)) != '\n' && c != EOF)
    <...>
      char *p = strchr (s, '\n');

  7. #27
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    M'enfin, pourquoi tu as massacré mes fonctions ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      while ((c = fgetc(fp)) != '\n' && c != EOF)
    <...>
      char *p = strchr (s, '\n');
    C'est pas voulu.
    J'ai pas compris pourquoi les '\n' ont disparu.

    Pour ce qui est de l'allocation, je crois qu'il y a un problème mais ou ?

  8. #28
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut
    Citation Envoyé par Premium
    Je voudrais savoir comment il faut que je m'y prenne pour que ne pas prendre en compte les * * * qui apparaissent parfois dans les traceroute ainsi que ces plages d'adresses IP :

    Merci
    tu peux utiliser les expressions régulière. Tu traduit tes IP non valide sous formes d'expressions régulières, si ton entrée est compatible avec l'une d'elle tu la zappe et puis c tt. Il y a des fcts qui peuvent t'aider sur le site du ce forum "developpez.com"

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [JDOM] [Compil] parse d'un fichier xml
    Par ammah dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 13/06/2006, 17h34
  2. Erreur d'évaluation (parse) dans le fichier web.xml de l'application
    Par popinenhbourg dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 15/05/2006, 15h38
  3. Parsing d'un fichier texte
    Par anibal dans le forum C
    Réponses: 2
    Dernier message: 18/04/2006, 14h33
  4. Réponses: 3
    Dernier message: 16/02/2006, 18h38
  5. [DOM] Erreur lors du parsing d'un fichier XML par l'API DOM
    Par patricetoan dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 26/09/2005, 12h43

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