Bonjour,

N'ayant jamais utilisé les fonctions malloc et tableau dynamique et liste chainée.

J'ai un souci pour réaliser une fonction en C.

J'au un fichier in, comme ci-dessous (faisant des milliers de lignes) :
907;A1;50455366941100; 8:54:22;;
907;A2;50592402661100; 8:54:22;;
907;A2;5026460369; 8:54:23;;
518;A1;50513426561100; 8:54:23;;
L07;A3;50652151531100; 8:54:24;;
Je voudrais réaliser des compteurs dynamique, pour écrire dans un fichier out.
En autorisant le comptage en colonne[0] du type 907 et 518 mais pas du type L07.
En autorisant le comptage en colonne[1] du type A1 et A2 mais pas du type A3.

Pour avoir dans un fichier out ci-dessous :

907 = 3 - Type A1 = 1 - Type A2 = 2
518 = 1 - Type A1 = 1
L07 = NON AUTORISE = 1 - Type A3 = NON AUTORISE = 1
Pour éviter le coté rébarbatif.
En délarant 1000 int (suivant le type de colonne[0] - 907 518 etc...)
Fois 3 int (suivant le type de colonne[1] - A1 A2 etc...).
Ce qui alourdirait le programme en nombre de lignes de code.

Je voudrais de l'aide.

Ci après mon code source C, avec un type de compteur :

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
/*----*/
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
#define MY_BUFSIZ       128
 
FILE *fin,
     *fout;
 
char  fnout[MY_BUFSIZ],
      l_buf[MY_BUFSIZ];
 
int nbr_907_auto       =    0;
 
 
void main(int argc,char *argv[])
{
    if(argc != 3)
        printf("manque paramètre exe fic_in fic_out\n");
    if ((fin = fopen(argv[1], "r")) == NULL)
         printf("pb fic_in\n");
    if ((fout = fopen(argv[2], "w")) == NULL)
         printf("pb fic_out\n");
 
    for(;;)
    {
        memset((char *)&l_buf,0x00,MY_BUFSIZ);
        if(fgets((char *)&l_buf,MY_BUFSIZ,fin)==NULL)
            break;
        memset(fnout, 0x00, MY_BUFSIZ);
        strncpy(fnout, l_buf, 3);
        if(!strncmp(fnout, "907", 3))
        {            
            nbr_907_auto++;
        }
    }
    fprintf(fout, " client 907 : %6d\n", nbr_907_auto);
    exit(0);
}
 
/*----*/
Merci de votre aide.

Cbibi