Tres bizzard, je ne comprend pas (lecture de data file)

Signaler
Messages postés
24
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
7 août 2006
-
Messages postés
24
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
7 août 2006
-
Bonjour a tous, et si quelqu'un peut m'aider, ce serait vraiment bien venu
Voila,
je dois lire des data file, mon soft marche parfaitement SAUF pour un
fichier, et c'est tres curieux, je donne le soft, puis les resultats :


Le soft est tres simple, les variables sont du genre double Tabe[maxchar][maxline], char* token, char Mag[6][maxline], sep="\t"


voici un morceau du fichier qui pose probleme :


date              
           
Mag      value1   value 2
20060727023946    WEN    1390    0.0681

20060727023946    QSD02    255    0.0595

20060727023946    QSC01    -381    -0.0923

20060727023946    AEK01    -255    -0.0617

20060727023946    FS71-O    175    0.1748

20060727023946    FS71-U    175    0.1746

20060727023946    FS71-L    200    0.2002

20060727023946    FS71-R    200    0.1990

20060727023946    FS72-O    80    0.0805

20060727023946    FS72-U    80    0.0805

20060727023946    FS72-L    300    0.2991

20060727023946    FS72-R    300    0.3001

20060727023947        0    0.0000

20060727023948        0    0.0000


Et voici le soft

           while(token != NULL && j < 20)

           {


         if(i>0){  //if we want to don't read some firsts lines


           //Value reading for each colum

           if (j==0) {

         sscanf(token,"%lf",&Tab[0][i]);

         strcpy (Timestamp[i],token); //Le Timestamp est exactement pareil, et marche parfaitement

           }

 

           if (j==1) {

         strcpy (Mag[i],token);

           }


           if (j==2)

         sscanf(token,"%lf",&Tab[2][i]);


           if (j==3)

         sscanf(token,"%lf",&Tab[3][i]);

         }


               token = strtok(NULL,SEP);

               j++; 


       }

       i++;      

 }


Il me parait juste, mais une partie du fichier ne passe pas, c'est la partie du genre '*-O', '*-U',

et lorsque je print les tableaux, j'obtiens ceci :

Date 20060727023946

Mag QSC01

Value -381.000000

Value -0.092300


Date 20060727023946

Mag AEK01

Value -255.000000

Value -0.061700


Date 20060727023946

Mag FS71-OFS71-UFS71-LFS71-RFS72-OFS72-UFS72-LFS72-R0

Value 175.000000

Value 0.174800


Date 20060727023946

Mag FS71-UFS71-LFS71-RFS72-OFS72-UFS72-LFS72-R0

Value 175.000000

Value 0.174600


Date 20060727023946

Mag FS71-LFS71-RFS72-OFS72-UFS72-LFS72-R0

Value 200.000000

Value 0.200200


Date 20060727023946

Mag FS71-RFS72-OFS72-UFS72-LFS72-R0

Value 200.000000

Value 0.199000


Date 20060727023946

Mag FS72-OFS72-UFS72-LFS72-R0

Value 80.000000

Value 0.080500


Date 20060727023946

Mag FS72-UFS72-LFS72-R0

Value 80.000000

Value 0.080500

...

Tout marche tres bien avant l'arrivee des '-', j'ai essaye d'en
supprimer pour voir le resultat, et le probleme disparait avec ces
satannes '-'


Je ne comprend pas ce qui se passe, quelqu'un comprend il ? et pourrait me donner une solution?... Merci d'avance

3 réponses

Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
Salut,

les strcpy sont a eviter, preferer strncpy
           if (j==1) {
             strcpy (Mag[i],token);
           }

devient donc

           if (j==1) {
             strncpy (Mag[i],token,strlen(token)-1);
           }


Essaye ca, juste pour voir !

TuRn3r
Messages postés
24
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
7 août 2006

Merci de ton aide, mais je perd les indices apres le '-', j'obtiens


 Date 2006-7-27 1:5:9

Mag AEK0

Value -255.000000

Value -0.061700


Date 2006-7-27 1:5:9

Mag FS71-

Value 175.000000

Value 0.175000


Date 2006-7-27 1:5:9

Mag FS71-

Value 175.000000

Value 0.174800


Mais il me faut les indices
Messages postés
24
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
7 août 2006

Merci de ton interet, j'utiliserai ta fonction a present.


J'ai trouve ce qui n'allait pas, et c'etait tres simple : Le tableau Mag ete trop petit dsl