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 et problème de type


Sujet :

C

  1. #21
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    j'ai remplacé le fseek(f,-nb_char,SEEK_CUR) par fseek(f,pos,SEEK_SET) ou pos est obtenu par un ftell(f) avant mes fgetch(f) mais ça ne marche toujours pas sous windows.

  2. #22
    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 Rniamo Voir le message
    j'ai remplacé le fseek(f,-nb_char,SEEK_CUR) par fseek(f,pos,SEEK_SET) ou pos est obtenu par un ftell(f) avant mes fgetch(f) mais ça ne marche toujours pas sous windows.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( f=fopen(fichier,"rt") )
    N'existe pas. C'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( f=fopen(fichier,"r") )
    et je conseille plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( (f=fopen(fichier,"r")) != NULL )
    ou mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    {
       FILE *f =fopen (fichier,"r");
       if (f != NULL)
       {
          ...
    car il est peut utile de compliquer la lecture du code source...

  3. #23
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    niveau code, "r" ou "rt" est équivalent, surtout pour gcc. Sinon pour le moment je ne recherche qu'un code qui marche...

  4. #24
    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 Rniamo Voir le message
    niveau code, "r" ou "rt" est équivalent, surtout pour gcc. Sinon pour le moment je ne recherche qu'un code qui marche...
    Non "rt" n'existe pas en standard et son usage invoque un comportement indéfini, y compris avec gcc. A ma connaissance, seuls les anciens compilateurs Borland C définissent "rt", mais c'est une extension. D'ailleurs, ils acceptent "r" comme le définit la norme, du moins tant qu'on a pas touché à je ne sais plus quelle globale 'Borland C' définissant le mode d'ouverture par défaut des fichiers...

  5. #25
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    ok...mais le problème ne vient pas de là je pense (je n'ai plus windows pour le moment donc je ne peut plus tester)

  6. #26
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par Rniamo Voir le message
    ok...mais le problème ne vient pas de là je pense (je n'ai plus windows pour le moment donc je ne peut plus tester)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char *bouche_tours(char *e, char separateur, char remplacement)
    {
         int i, j;
         char *s,*p, *v, rempl[2], sep[3];
    ...
    	rempl[0]=separateur;
    	rempl[1]=remplacement;
    ...
     
    	if (*e==separateur)
    		strcat(s,&(rempl[1]));
    ERREUR : La chaîne rempl n'est pas terminée par un '\0'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
         char *s,*p, *v, rempl[3], sep[3];
    ...
    	rempl[0]=separateur;
    	rempl[1]=remplacement;
            rempl[2]='\0';
    ...

  7. #27
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    ce n'est pas ça parce que cette erreur est corrigée dans le code actuel :

    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
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    #include "../1_inc/csv.h"
     
    void erreur_memoire(void)
    {
    	printf("Erreur Mémoire\n");
    	exit(1);
    }
     
    void fichier_non_trouve(void)
    {
    	printf("fichier non trouvé\n");
    }
     
    void info_fichier(const char *fichier, int *nb_lignes, int *nb_colonnes, int *nb_lignes_vides, char separateur)
    {
    	char c;
    	int nb_sep, cpt_col;
    	FILE *f;
     
    	if (nb_lignes)
    		*nb_lignes=0;
    	if(nb_colonnes)
    		*nb_colonnes=0;
    	if(nb_lignes_vides)
    		*nb_lignes_vides=0;
     
    	f=fopen(fichier,"rt");
    	if (f)
    	{
    		c=fgetc(f);
     
    		nb_sep=0;
    		cpt_col=1;
     
    ;
     
    		while( c!=EOF )
    		{
    			if ( c=='\n' && nb_lignes )
    				(*nb_lignes)++;
     
    			if ( c==separateur && nb_colonnes && cpt_col )
    				(*nb_colonnes)++;
     
    			if ( cpt_col && c==	'\n' && (*nb_colonnes) )
    				cpt_col=!cpt_col;
     
    			if( c==separateur )
    				nb_sep++;
     
    			c=fgetc(f);
    		}
    		(*nb_colonnes)++;
    		(*nb_lignes_vides)=((*nb_colonnes-1)*(*nb_lignes)-nb_sep)/(*nb_colonnes-1);
     
    		fclose(f);
    	}
    	else
    		fichier_non_trouve();
    }
     
    /* f doit bien sûr être ouvert et fermé avant et après la fonction */
    void fprintf_tableau(FILE *f,int nb_lignes, int nb_colonnes, double **tableau)
    {
    	int i,j;	
     
    	fprintf(f,"\n");
    	for(i=0;i<nb_lignes;i++)
    	{
    		fprintf(f,"ligne %2.2d : ",i+1);
    		for(j=0;j<nb_colonnes;j++)
    			fprintf(f,"%g    ",tableau[i][j]);
    		fprintf(f,"\n");
    	}
    	fprintf(f,"\n");
    }
     
     
    char *bouche_trous(char *e, char separateur, char remplacement)
    {
         int i;
         char *s,*p, *v, rempl[3], sep[3];
     
    	/* On initialise la chaîne de caractères qui permettra de rechercher la suite de deux separateur */
    	sep[0]=separateur;
    	sep[1]=separateur;
    	sep[2]='\0';
     
    	/* On initialise la chaîne de caractère qui remplacera la suite de deux séparateurs identiques */
    	rempl[0]=separateur;
    	rempl[1]=remplacement;
    	rempl[2]='\0';
     
    	/* On initialise p à e pour le parcours de la chaine d'entrée */
    	p=e;
     
    	/* On initialise la chaîne de sortie */
    	if ( !(s=(char *)malloc((2*strlen(e)+1)*sizeof(char))) )
    		erreur_memoire();
    	*s='\0';
     
    	/* On teste le premier caractère, et le remplace si besoin est */
    	if (*e==separateur)
    		strcat(s,&(rempl[1]));
     
    	/* On recherche sep et les remplace si besoin */
    	i=0;
    	while(p!=(e+strlen(e)))
    	{
    		v=strstr(p,sep);
    		if (v==p)
    			strcat(s,rempl);
    		else
    			strncat(s,p,1);
    		p++;
    	}
     
    	/* Test du dernier caractère */
    	if (*(e+strlen(e)-1)==separateur)
    		strcat(s,&(rempl[1]));
     
    	/* Réduction de la mémoire à la taille de la chaîne finale */
    	if (!(s=(char *)realloc(s,sizeof(char)*strlen(s))))
    		 erreur_memoire(); 
     
    	return s;
    }
     
    void enregistre_ligne(double **sortie, char *buffer,int ligne_courante, char separateur)
    {
    	int nb_sep;
    	char *attribut, sep[2];
     
    	nb_sep=0;
    	sep[0]=separateur;
    	sep[1]='\0';
     
    	attribut=strtok(buffer, sep); 
     
    	while(attribut!=NULL)
    	{
    		sortie[ligne_courante][nb_sep]=atof(attribut);
    		attribut=strtok(NULL, sep);
    		nb_sep++;
    	}
    }
     
    double **lecture_csv(const char *fichier, int nbl, int nbc, char separateur, int *ligne_tableau)
    {
    	FILE *f;
    	char *buf1,c;
    	int ligne, i, nb_char, nb_sep;
    	long pos;
    	double **sortie;
     
    	if ( !(sortie=(double **)malloc(sizeof(double *)*nbl)) )
    		erreur_memoire();
     
    	f=fopen(fichier,"rt");
    	if (f)
    	{
    		/* On initialise la ligne courante du tableau */
    		ligne=0;
    		for(i=0;i<=nbl;i++)
    		{
    			pos=ftell(f);
    			/* On calcule le nombre de caractères de la ligne */
    			c=fgetc(f);
    			nb_char=1;
    			nb_sep=0;
    			while(c!='\n' && c!=EOF)
    			{
    				if (c==separateur)
    					nb_sep++;
    				c=fgetc(f);
    				nb_char++;
    			}
     
    			/* on écrit la ligne contenue dans le buffer dans le tableau de sortie.
    			   Si la ligne est vide on n'imcrémente pas ligne donc on réécrira dessus au prochain tour de boucle */
    			if ( nb_sep==(nbc-1) )
    			{
    				fseek(f,pos,SEEK_SET);
     
    				if ( !(buf1=(char *)malloc(sizeof(char)*(nb_char))) )
    					erreur_memoire();
     
    				fscanf(f,"%s\n",buf1); /* on récupére dans le buffer la ligne courante */
    				buf1=bouche_trous(buf1,separateur,'0');
     
    				if ( !(sortie[ligne]=(double *)malloc(sizeof(double)*nbc)) )
    					erreur_memoire();
     
    				enregistre_ligne(sortie,buf1,ligne,separateur);
    				free(buf1);
    				ligne++;
    			}
    		}
    		fclose(f);
    	}
    	else
    	{
    		fichier_non_trouve();
    		if (ligne_tableau)
    			*ligne_tableau=0;
    		return NULL;
    	}
     
    	if ( !(sortie=(double **)realloc(sortie,sizeof(double *)*ligne)) )
    		erreur_memoire(); 
     
    	if (ligne_tableau)
    		*ligne_tableau=ligne;
     
    	return sortie;
    }
     
    void libere_tableau(int nb_lignes, double **tableau)
    {
    	int i;
     
    	if (tableau)
    	{
    		for(i=0;i<nb_lignes;i++)
    		{
    			if (tableau[i])
    				free(tableau[i]);
    		}
    		free(tableau);
    	}
    }
     
    /* renvoi une ligne pour min et une pour max contenant les min et max de la colonne correspondante.
    Pour le moement, le tableau ne doit comporter que des chiffres. 
    Il faut penser à faire un free sur min et max après utilisation. */
    void extremum(double **tableau, int nb_lignes, int nb_colonnes, double **mini, double **maxi)
    {
    	int i,j;
    	double *min, *max;
     
    	if (!(min=(double *)malloc(sizeof(double)*nb_colonnes)))
    		erreur_memoire();
     
    	if (!(max=(double *)malloc(sizeof(double)*nb_colonnes)))
    		erreur_memoire();
     
    	for(i=0;i<nb_colonnes;i++)
    	{
    		min[i]=tableau[0][i];
    		max[i]=tableau[0][i];
    	}
     
    	for(i=0;i<nb_lignes;i++)
    	{
    		for(j=0;j<nb_colonnes;j++)
    		{
    			if (tableau[i][j]<min[j])
    				min[j]=tableau[i][j];
    			if (tableau[i][j]>max[j])
    				max[j]=tableau[i][j];
    		}
    	}
     
    	*mini=min;
    	*maxi=max;
    }
     
    void libere_tout(double **tableau, double *min, double *max, double *somme, int nbl)
    {
    	if (min)
    		free(min);
    	if (max)	
    		free(max);
    	if (somme)
    		free(somme);
    	if (tableau)
    		libere_tableau(nbl,tableau);
    }
     
    void normalisation(double **tableau,double *min, double *max, int nbc, int nbl)
    {
    	int i,j;
    	double EM;
     
    	for(i=0;i<nbc;i++)
    	{
    		EM=max[i]-min[i];
    		for(j=0;j<nbl;j++)
    		{
    			if (EM)
    				tableau[j][i]=(tableau[j][i]-min[i])/EM;
    		}
    	}
    }
     
    /* penser au free(*somme) */
    void somme_lignes(double **tableau, double **somme, int nb_lignes, int nb_colonnes)
    {
    	double *sum;
    	int i,j;
     
    	if (!(sum=(double *)malloc(sizeof(double)*nb_lignes)))
    		erreur_memoire();
     
    	for(i=0;i<nb_lignes;i++)
    	{
    		sum[i]=0.0;
    		for(j=0;j<nb_colonnes;j++)
    		{
    			sum[i]+=tableau[i][j];
     
    		}
    	}
     
    	*somme=sum;
    }
     
    void la_totale_test(const char *fichier, double ***tab, int *nb_lignes)
    {
    	double **tableau=NULL,*min, *max, *somme;
    	char sep=',';
    	int nbl=0,nbc,nblv,i;
    	FILE *f;
     
    	f=fopen("test.can","w");
     
    	if (f)
    	{
    		fprintf(f,"Informations sur le fichier :\n");
    		fprintf(f,"-----------------------------\n");
    		info_fichier(fichier,&nbl,&nbc,&nblv,sep);
    		fprintf(f,"\nNombre de lignes : %d\nNombre de colonnes :%d\nNombre de lignes vides :%d\n\n",nbl,nbc,nblv);
    	}
     
    	tableau=lecture_csv(fichier,nbl,nbc,sep,&nbl);
     
    	if (tableau && f)
    	{
    		fprintf(f,"Autre : valeur numérique\n");
    		fprintf(f,"N.B. : cette version de la librairie ne prend pas en compte les chaines de caractères\n");
    		fprintf(f,"\n");
     
    		fprintf_tableau(f,nbl,nbc,tableau);
     
    		extremum(tableau,nbl,nbc,&min,&max);
     
    		fprintf(f,"mins : ");
    		for(i=0;i<nbc;i++)
    			fprintf(f,"%g  ",min[i]);
    		fprintf(f,"\n");
     
    		fprintf(f,"maxs : ");
    		for(i=0;i<nbc;i++)
    			fprintf(f,"%g  ",max[i]);
    		fprintf(f,"\n\n");
     
    		normalisation(tableau,min,max,nbc,nbl);
     
    		fprintf(f,"Tableau Normalisé :\n");
    		fprintf(f,"-------------------\n");
    		fprintf_tableau(f,nbl,nbc,tableau);
     
    		somme_lignes(tableau,&somme,nbl,nbc);
    		fprintf(f,"Somme des lignes :\n");
    		fprintf(f,"------------------\n");
    		for(i=0;i<nbl;i++)
    			fprintf(f,"somme[%d]=%g\n",i,somme[i]);
    		fprintf(f,"\n");
    	}
    	fclose(f);
     
    	libere_tout(NULL,min,max,somme,nbl);
     
    	*tab=tableau;
    	*nb_lignes=nbl;
    }

  8. #28
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par Rniamo Voir le message
    ce n'est pas ça parce que cette erreur est corrigée dans le code actuel :
    Si on n'a pas la version à jour, on peut toujours chercher! on perd son temps
    Sans rancune quand même . On finira par trouver.
    Sur quel fichier effectues-tu le test ?

  9. #29
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut


    que veulent faire ces lignes de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    		c=fgetc(f);
     
    		nb_sep=0;
    		cpt_col=1;
     
    ;
     
    		while( c!=EOF )
    • un ";" se promenant tout seul
    • une boucle sur c qui est lu a l'exterieur de la boucle....

  10. #30
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    oui c'est vrai, désolé mais j'ai du réinstaller Linux et j'ai galéré quelques jours avec gentoo avant de revenir à ubuntu faute de temps .

    Pour la dernière version :

    http://www.rniamo-developping.prog.fr/C_CSV.tar.gz

  11. #31
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    pour le ; c'est corrigé.

    c est initialisé avant le while mais il y a encore des fgetc à l'intérieur.

  12. #32
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    personne ne peut tester chez lui svp ? moi ça marche mais pour windows je ne sais pas....

  13. #33
    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 Rniamo Voir le message
    personne ne peut tester chez lui svp ? moi ça marche mais pour windows je ne sais pas....
    Heureusement que j'ai 7-Zip pour le tar...

    Ca compile sous windows sans problèmes.

    L'exécution semble correcte (une petite fenêtre GTK+...).

    Je prends quoi comme fichier de test ? fichier.csv, fichier1.csv ? ?

    J'ai chargé 'fichier.csv', j'ai fait [Play/Pause], il ne se passe rien... Idem avec fichier1.csv. Mais ce sont des fichiers texte au format Unix, non ? Il faut peut être les passer par unix2dos avant usage, non ?
    En fait, non, le format semble être compatible avec DOS/Windows :

    Fichier.csv :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    00000000h: 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 31 2C 33 2C 36 0D ; ..........1,3,6.
    00000010h: 0A 32 2C 36 2C 31 32 0D 0A 33 2C 39 2C 31 38 0D ; .2,6,12..3,9,18.
    00000020h: 0A 34 2C 31 32 2C 32 34 0D 0A 35 2C 31 35 2C 33 ; .4,12,24..5,15,3
    00000030h: 30 0D 0A 36 2C 31 38 2C 33 36 0D 0A 37 2C 32 31 ; 0..6,18,36..7,21
    00000040h: 2C 34 32 0D 0A 38 2C 32 34 2C 34 38 0D 0A 39 2C ; ,42..8,24,48..9,
    [Quitter] fonctionne...

    Eviter les accents, ce n'est pas portable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void erreur_memoire(void)
    {
    	printf("Erreur Mémoire\n");
    	exit(1);
    }
     
    void fichier_non_trouve(void)
    {
    	printf("fichier non trouvé\n");
    }
    Je ne sais pas ce que ça fait à ma machine...

  14. #34
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    En ce qui concerne les accents...oui c'est vrai, je ferais attention.

    Pour le bouton play/pause, pour le moment il créé un fichier "test.can" dans le répertoire de l'éxécutable qui contient des informations sur le fichier .csv (oui les fichiers de test sont ceux du dossier "fichier_test") qui sont en fait des fichiers textes (donc portable).

    Quand je lançais sous windows, le fichier csv était mal analysé alors que sous linux j'ai les bonnes infos...

  15. #35
    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 Rniamo Voir le message
    En ce qui concerne les accents...oui c'est vrai, je ferais attention.

    Pour le bouton play/pause, pour le moment il créé un fichier "test.can" dans le répertoire de l'éxécutable qui contient des informations sur le fichier .csv (oui les fichiers de test sont ceux du dossier "fichier_test") qui sont en fait des fichiers textes (donc portable).

    Quand je lançais sous windows, le fichier csv était mal analysé alors que sous linux j'ai les bonnes infos...
    J'obtiens ceci :
    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
     
    Informations sur le fichier :
    -----------------------------
     
    Nombre de lignes : 20
    Nombre de colonnes :13
    Nombre de lignes vides :0
     
    Autre : valeur numérique
    N.B. : cette version de la librairie ne prend pas en compte les chaines de caractères
     
     
    ligne 01 : 1    3    5    7    9    11    13    15    17    19    21    23    25    
    ligne 02 : 0    4    6    8    10    12    14    16    18    20    22    24    26    
    ligne 03 : 0    5    7    9    11    13    15    17    19    21    23    25    27    
    ligne 04 : 0    6    8    10    12    14    16    18    20    22    24    26    28    
    ligne 05 : 0    7    9    11    13    15    17    19    21    23    25    27    29    
    ligne 06 : 0    8    10    12    14    16    18    20    22    24    26    28    30    
    ligne 07 : 0    9    11    13    15    17    19    21    23    25    27    29    31    
    ligne 08 : 0    10    12    14    16    18    20    22    24    26    28    30    32    
    ligne 09 : 26    28    30    32    0    1,72923e-322    0    7,36158e-322    0    7,41098e-322    0    1,27619e-303    1,061e-314    
    ligne 10 : 26    28    30    32    1,42405e-304    0    1,31257e-304    1,276e-303    1,42437e-304    0    7,98683e-315    1,27619e-303    1,061e-314    
    ligne 11 : 26    28    30    32    6,42965e-312    0    6,42965e-312    3,60739e-313    3,60739e-313    6,06891e-312    3,60739e-313    5,64451e-312    -1,#QNAN    
    ligne 12 : 26    28    30    32    4,94066e-324    0    4,94066e-324    2,122e-314    0    2,122e-314    0    2,122e-314    -1,#QNAN    
    ligne 13 : 26    28    30    32    2,122e-314    0    2,122e-314    4,94066e-324    0    2,122e-314    0    2,122e-314    -1,#QNAN    
    ligne 14 : 26    28    30    32    0    2,122e-314    0    0    1,3411e-311    -1,#QNAN    0    0    0    
    ligne 15 : 26    28    30    32    1,413e-303    4,29665e+170    1,14449e+243    6,73299e+252    0    1,09402e-303    5,93605e-315    2,39869e-320    7,06686e-304    
    ligne 16 : 26    28    30    32    0    8,55344e-315    4,24402e-312    1,10344e-312    0    0    1,47803e-304    1,276e-303    1,54287e-304    
    ligne 17 : 26    28    30    32    4,94066e-324    1,09618e-304    1,09618e-304    1,27627e-303    1,061e-314    0    7,98368e-315    1,27627e-303    1,061e-314    
    ligne 18 : 26    28    30    32    1,42148e-304    0    1,09602e-304    1,27623e-303    1,061e-314    0    7,98653e-315    1,27606e-303    1,52906e-304    
    ligne 19 : 26    28    30    32    1,32779e+252    8,69169e-311    0    1,61971e-312    1,01185e-320    1,32778e+252    8,69169e-311    0    1,81333e-312    
    ligne 20 : 26    28    30    32    2,122e-314    1,30375e-310    0    1,61273e-312    1,01185e-320    1,02531e-304    8,69169e-311    0    1,61273e-312    
    ligne 21 : 6,96346e-317    6,9634e-317    2,122e-314    7,05139e-317    1,31074e-304    6,96342e-317    2,122e-314    7,05134e-317    0    6,96343e-317    2,122e-314    7,05136e-317    6,96343e-317    
     
    mins : 0  6,9634e-317  2,122e-314  7,05139e-317  0  0  0  0  0  0  0  0  0  
    maxs : 26  28  30  32  1,32779e+252  4,29665e+170  1,14449e+243  6,73299e+252  24  1,32778e+252  28  30  32  
     
    Tableau Normalisé :
    -------------------
     
    ligne 01 : 0,0384615    0,107143    0,166667    0,21875    6,77819e-252    2,56013e-170    1,13588e-242    2,22784e-252    0,708333    1,43096e-251    0,75    0,766667    0,78125    
    ligne 02 : 0    0,142857    0,2    0,25    7,53133e-252    2,79287e-170    1,22325e-242    2,37636e-252    0,75    1,50628e-251    0,785714    0,8    0,8125    
    ligne 03 : 0    0,178571    0,233333    0,28125    8,28446e-252    3,02561e-170    1,31063e-242    2,52488e-252    0,791667    1,58159e-251    0,821429    0,833333    0,84375    
    ligne 04 : 0    0,214286    0,266667    0,3125    9,03759e-252    3,25835e-170    1,39801e-242    2,6734e-252    0,833333    1,6569e-251    0,857143    0,866667    0,875    
    ligne 05 : 0    0,25    0,3    0,34375    9,79072e-252    3,49109e-170    1,48538e-242    2,82193e-252    0,875    1,73222e-251    0,892857    0,9    0,90625    
    ligne 06 : 0    0,285714    0,333333    0,375    1,05439e-251    3,72383e-170    1,57276e-242    2,97045e-252    0,916667    1,80753e-251    0,928571    0,933333    0,9375    
    ligne 07 : 0    0,321429    0,366667    0,40625    1,1297e-251    3,95657e-170    1,66013e-242    3,11897e-252    0,958333    1,88284e-251    0,964286    0,966667    0,96875    
    ligne 08 : 0    0,357143    0,4    0,4375    1,20501e-251    4,18931e-170    1,74751e-242    3,26749e-252    1    1,95816e-251    1    1    1    
    ligne 09 : 1    1    1    1    0    0    0    0    0    0    0    4,25396e-305    3,31562e-316    
    ligne 10 : 1    1    1    1    0    0    0    0    5,93486e-306    0    2,85244e-316    4,25397e-305    3,31562e-316    
    ligne 11 : 1    1    1    1    0    0    0    0    1,50308e-314    0    1,28835e-314    1,8815e-313    -1,#QNAN    
    ligne 12 : 1    1    1    1    0    0    0    0    0    0    0    7,07332e-316    -1,#QNAN    
    ligne 13 : 1    1    1    1    0    0    0    0    0    0    0    7,07332e-316    -1,#QNAN    
    ligne 14 : 1    1    1    1    0    0    0    0    5,58792e-313    -1,#QNAN    0    0    0    
    ligne 15 : 1    1    1    1    0    1    1    1    0    0    2,12002e-316    8,00386e-322    2,20839e-305    
    ligne 16 : 1    1    1    1    0    0    0    0    0    0    5,27866e-306    4,25332e-305    4,82146e-306    
    ligne 17 : 1    1    1    1    0    0    0    0    4,42082e-316    0    2,85131e-316    4,25424e-305    3,31562e-316    
    ligne 18 : 1    1    1    1    0    0    0    0    4,42082e-316    0    2,85233e-316    4,25352e-305    4,77832e-306    
    ligne 19 : 1    1    1    1    1    0    0    0    4,19956e-322    1    3,10418e-312    0    5,66667e-314    
    ligne 20 : 1    1    1    1    0    0    0    0    4,19956e-322    0    3,10418e-312    0    5,03978e-314    
    ligne 21 : 2,67826e-318    0    0    0    0    0    0    0    0    0    7,57856e-316    2,35045e-318    2,17607e-318    
     
    Somme des lignes :
    ------------------
    somme[0]=3,53727
    somme[1]=3,74107
    somme[2]=3,98333
    somme[3]=4,2256
    somme[4]=4,46786
    somme[5]=4,71012
    somme[6]=4,95238
    somme[7]=5,19464
    somme[8]=4
    somme[9]=4
    somme[10]=-1,#QNAN
    somme[11]=-1,#QNAN
    somme[12]=-1,#QNAN
    somme[13]=-1,#QNAN
    somme[14]=7
    somme[15]=4
    somme[16]=4
    somme[17]=4
    somme[18]=6
    somme[19]=4
    somme[20]=7,6506e-316
    C'est mal ?

  16. #36
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    pour le fichier2.csv suivant (je le reposte parce que je ne suis pas sûr de la version de l'archive par rapport de la mienne) :

    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
     
    1,3,5,7,9,11,13,15,17,19,21,23,25
    2,4,6,8,10,12,14,16,18,20,22,24,26
    3,5,7,9,11,13,15,17,19,21,23,25,27
    4,6,8,10,12,14,16,18,20,22,24,26,28
    5,7,9,11,13,15,17,19,21,23,25,27,29
    6,8,10,12,14,16,18,20,22,24,26,28,30
    7,9,11,13,15,17,19,21,23,25,27,29,31
    8,10,12,14,16,18,20,22,24,26,28,30,32
    9,11,13,15,17,19,21,23,25,27,29,31,33
    ,11,13,15,17,19,21,23,25,27,29,31,33
    11,13,15,17,19,21,23,25,27,29,31,33,35
    12,14,16,18,20,22,24,26,28,30,32,34,36
    13,15,17,19,21,23,25,27,29,31,33,35,37
    14,16,18,20,22,24,26,28,30,32,34,36,38
    15,17,19,21,23,25,27,29,31,33,35,37,39
    16,18,20,22,24,26,28,30,32,34,36,38,40
    17,19,21,23,25,27,29,31,33,35,37,39,41
    18,20,22,24,26,28,30,32,34,36,38,40,42
    19,21,23,25,27,29,31,33,35,37,39,41,43
    20,22,24,26,28,30,32,34,36,38,40,42,44
    j'obtiens

    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
    Informations sur le fichier :
    -----------------------------
     
    Nombre de lignes : 21
    Nombre de colonnes :13
    Nombre de lignes vides :1
     
    Autre : valeur numérique
    N.B. : cette version de la librairie ne prend pas en compte les chaines de caractères
     
     
    ligne 01 : 1    3    5    7    9    11    13    15    17    19    21    23    25    
    ligne 02 : 2    4    6    8    10    12    14    16    18    20    22    24    26    
    ligne 03 : 3    5    7    9    11    13    15    17    19    21    23    25    27    
    ligne 04 : 4    6    8    10    12    14    16    18    20    22    24    26    28    
    ligne 05 : 5    7    9    11    13    15    17    19    21    23    25    27    29    
    ligne 06 : 6    8    10    12    14    16    18    20    22    24    26    28    30    
    ligne 07 : 7    9    11    13    15    17    19    21    23    25    27    29    31    
    ligne 08 : 8    10    12    14    16    18    20    22    24    26    28    30    32    
    ligne 09 : 9    11    13    15    17    19    21    23    25    27    29    31    33    
    ligne 10 : 11    13    15    17    19    21    23    25    27    29    31    33    35    
    ligne 11 : 12    14    16    18    20    22    24    26    28    30    32    34    36    
    ligne 12 : 13    15    17    19    21    23    25    27    29    31    33    35    37    
    ligne 13 : 14    16    18    20    22    24    26    28    30    32    34    36    38    
    ligne 14 : 15    17    19    21    23    25    27    29    31    33    35    37    39    
    ligne 15 : 16    18    20    22    24    26    28    30    32    34    36    38    40    
    ligne 16 : 17    19    21    23    25    27    29    31    33    35    37    39    41    
    ligne 17 : 18    20    22    24    26    28    30    32    34    36    38    40    42    
    ligne 18 : 19    21    23    25    27    29    31    33    35    37    39    41    43    
    ligne 19 : 20    22    24    26    28    30    32    34    36    38    40    42    44    
     
    mins : 1  3  5  7  9  11  13  15  17  19  21  23  25  
    maxs : 20  22  24  26  28  30  32  34  36  38  40  42  44  
     
    Tableau Normalisé :
    -------------------
     
    ligne 01 : 0    0    0    0    0    0    0    0    0    0    0    0    0    
    ligne 02 : 0,0526316    0,0526316    0,0526316    0,0526316    0,0526316    0,0526316    0,0526316    0,0526316    0,0526316    0,0526316    0,0526316    0,0526316    0,0526316    
    ligne 03 : 0,105263    0,105263    0,105263    0,105263    0,105263    0,105263    0,105263    0,105263    0,105263    0,105263    0,105263    0,105263    0,105263    
    ligne 04 : 0,157895    0,157895    0,157895    0,157895    0,157895    0,157895    0,157895    0,157895    0,157895    0,157895    0,157895    0,157895    0,157895    
    ligne 05 : 0,210526    0,210526    0,210526    0,210526    0,210526    0,210526    0,210526    0,210526    0,210526    0,210526    0,210526    0,210526    0,210526    
    ligne 06 : 0,263158    0,263158    0,263158    0,263158    0,263158    0,263158    0,263158    0,263158    0,263158    0,263158    0,263158    0,263158    0,263158    
    ligne 07 : 0,315789    0,315789    0,315789    0,315789    0,315789    0,315789    0,315789    0,315789    0,315789    0,315789    0,315789    0,315789    0,315789    
    ligne 08 : 0,368421    0,368421    0,368421    0,368421    0,368421    0,368421    0,368421    0,368421    0,368421    0,368421    0,368421    0,368421    0,368421    
    ligne 09 : 0,421053    0,421053    0,421053    0,421053    0,421053    0,421053    0,421053    0,421053    0,421053    0,421053    0,421053    0,421053    0,421053    
    ligne 10 : 0,526316    0,526316    0,526316    0,526316    0,526316    0,526316    0,526316    0,526316    0,526316    0,526316    0,526316    0,526316    0,526316    
    ligne 11 : 0,578947    0,578947    0,578947    0,578947    0,578947    0,578947    0,578947    0,578947    0,578947    0,578947    0,578947    0,578947    0,578947    
    ligne 12 : 0,631579    0,631579    0,631579    0,631579    0,631579    0,631579    0,631579    0,631579    0,631579    0,631579    0,631579    0,631579    0,631579    
    ligne 13 : 0,684211    0,684211    0,684211    0,684211    0,684211    0,684211    0,684211    0,684211    0,684211    0,684211    0,684211    0,684211    0,684211    
    ligne 14 : 0,736842    0,736842    0,736842    0,736842    0,736842    0,736842    0,736842    0,736842    0,736842    0,736842    0,736842    0,736842    0,736842    
    ligne 15 : 0,789474    0,789474    0,789474    0,789474    0,789474    0,789474    0,789474    0,789474    0,789474    0,789474    0,789474    0,789474    0,789474    
    ligne 16 : 0,842105    0,842105    0,842105    0,842105    0,842105    0,842105    0,842105    0,842105    0,842105    0,842105    0,842105    0,842105    0,842105    
    ligne 17 : 0,894737    0,894737    0,894737    0,894737    0,894737    0,894737    0,894737    0,894737    0,894737    0,894737    0,894737    0,894737    0,894737    
    ligne 18 : 0,947368    0,947368    0,947368    0,947368    0,947368    0,947368    0,947368    0,947368    0,947368    0,947368    0,947368    0,947368    0,947368    
    ligne 19 : 1    1    1    1    1    1    1    1    1    1    1    1    1    
     
    Somme des lignes :
    ------------------
    somme[0]=0
    somme[1]=0,684211
    somme[2]=1,36842
    somme[3]=2,05263
    somme[4]=2,73684
    somme[5]=3,42105
    somme[6]=4,10526
    somme[7]=4,78947
    somme[8]=5,47368
    somme[9]=6,84211
    somme[10]=7,52632
    somme[11]=8,21053
    somme[12]=8,89474
    somme[13]=9,57895
    somme[14]=10,2632
    somme[15]=10,9474
    somme[16]=11,6316
    somme[17]=12,3158
    somme[18]=13
    il y a donc bien un petit bug...

  17. #37
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    une petite mise à jour, je ne sais pas si le problème vient de là mais dans main.c après l'initialisation de gtk+ ( gtk_init() ), il faut ajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale(LC_NUMERIC,"C");
    et ne pas oublier le

    au début.

    ça permet de convertir correctement les chaîne de caractère en double si les nombres sont non entiers.

  18. #38
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    voici une version des sources pour windows ... mais je n'ai pas tester si ça marche (le Gtk sous wine...c'est énorme : les fenêtre sont tellement grosse que je ne peux savoir ou cliquer) :

    http://www.rniamo-developping.prog.fr/wxDev-cpp.zip

    NB : il faut que les runtimes de gtk soient dans windows/system32/

  19. #39
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    plus personne ?

    Pour le problème qui apprait dans votre test Emmanuel Delahaye, j'ai eu le même en faisant un aprés le (ce qui est normal puisque du coup je ne prend plus en compte le premier chiffre) mais fscanf sous linux et windows serait différent ?

  20. #40
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    personne ne voit ?

Discussions similaires

  1. [ tinyint et char ] problème de type
    Par shirya dans le forum Installation
    Réponses: 3
    Dernier message: 05/11/2005, 07h08
  2. [debutant] problème avec type à utiliser
    Par mlequim dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 15/07/2005, 16h08
  3. Problème de type chaîne
    Par champijulie dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 12/05/2005, 20h23
  4. Réponses: 4
    Dernier message: 30/01/2005, 14h23
  5. [Sybase] Problème de type sous ASE
    Par Hotchotte dans le forum Sybase
    Réponses: 1
    Dernier message: 18/12/2004, 11h04

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