Récupérer des données d'un .txt sous Scilab

Fermé
Flo - 10 avril 2008 à 14:33
 janeo - 17 juin 2008 à 17:32
Bonjour,
Je débute sur Scilab et je n’ai jamais fait de Matlab (pas très avantagés !)
Mon but est de traiter un fichier ‘.txt’ sous Scilab pour en extraire des données.
Typiquement mon fichier est constitué d’un en-tête de 83 lignes (que j’arrive à zapper) et de 4096 lignes de résultats de mesures, écris sous la forme suivante :

N° de la mesure	Temps			Partie réelle	Partie Imaginaire
1		   -4,0000000000e-002	 1,27177e-002	 9,86312e-004

Mon but est de récupérer la partie réelle dans un tableau de 1 ligne et 4096 colonnes.
J’ai donc rédigé le programme suivant sous Scilab :

// Ouverture du fichier
fichier_mes_lib=mopen(‘Nom du fichier’,’r’) ;

// Lecture des lignes de la mesure
donnee_mesure_char_lib=mgetl(fichier_mes_lib,4096);

// Fermeture du fichier
mclose(fichier_mes_lib);

// Conversion des donnée de chaine de caractère en valeur numérique
donnee_mesure_lib_char=msscanf(donnee_mesure_char_lib,'%s %s %s %s');
donnee_mesure_lib=evstr(donnee_mesure_lib_char);

// Récupération des données et mise en forme
donnee_mesure_libre=donnee_mesure_lib(:,3)';

Et lorsque je l’exécute j’obtiens :

donnee_mesure_lib_char  =

!1  -4,0000000000e-002  1,27177e-002  9,86312e-004  !
 donnee_mesure_lib  =

    1.  - 4.    0.    1.    271.77    9.    8.6312
 donnee_mesure_libre  =

    0.

La fonction ‘msscanf’ me permet bien de ressortir la ligne voulu sous forme d’une chaine de caractère mais lorsque je tente de la mettre sous forme de chiffre à l’aide de la fonction ‘evstr’ ça devient n’importe quoi !
Est-ce que cela est dû à mes types de variables ‘%s’ ? (J’ai essayé avec ‘%f ‘ et c’est encore pire). Ou bien est-ce que cela vient du type de conversion que j’utilise ? Je sais que sous Matlab il existe une fonction ‘textscan’ capable de faire ce que je voudrais mais je ne lui connais pas d’équivalent sous Scilab.
Je test actuellement avec la fonction ‘read’ et une autre façon de procéder mais cela ne fonctionne toujours pas et me renvoie les mêmes valeurs.
Merci de votre aide et merci de détaillé car je suis nul en Scilab.
Cordialement.
A voir également:

1 réponse

bonjour flo,

le problème vient des virgules, pour scilab la virgule sépare deux entré d'une matrice sur la même ligne. On a aussi le même effet avec un espace, par exemple :

-->[1, 2, 3; 4 5 6]
ans =

1. 2. 3.
4. 5. 6.

le séparateur "décimal" est en fait le point, il faut donc remplacer les virgules de ton fichier par des points. Tu as deux solutions soit tu le fais avec un éditeur avant de charger tes données dans scilab. Soit tu le fait après le mgetl en utilisant la fonction strsubst :

-->M=['1 2,3 4,567e8 9e-10']//une ligne avec 4 entrées
M =

1 2,3 4,567e8 9e-10

-->B=strsubst(M,',','.')//on change , en . dans M
B =

1 2.3 4.567e8 9e-10

-->evstr(B)//on interprète la chaine
ans =

1. 2.3 4.567D+08 9.000D-10

Philippe.
5
Merci beaucoup Philippe. Mon problème venait effectivement des virgules. Je m'en suis rendu compte après en comprarant aux recherches d'un collégue. J'ai donc fait en sorte que le logiciel qui me sort mon fichier '.txt' mette des points à la place des virgues et maintenant ça fonctionne bien ! Mais je ne doute pas que ta méthode fonctionne également ;)
Merci encore
A bientôt
0
janeo > Flo
17 juin 2008 à 17:32
ta méthode fonctionne !!

merci
0