Je suis un tout nouvel utilisateur de Matlab et je rencontre quelques difficultés pour l'utiliser. J'ai notamment un soucis pour traiter des données importées d'un fichier texte. Voilà les détails:
1) j'ai un fichier texte qui est en fait l'enregistrement de mesures géotechniques lors d'un forage: en gros, c'est un tableau où j'ai autant de colonnes que de paramètres mesurés (environ 20), et autant de lignes que de mesures effectuées sur toute la profondeur du forage (environ 20000 lignes). L'une des colonnes est justement la profondeur.
2)certaines lignes (qui diffèrent selon les colonnes) comportent des valeurs non utilisables (mesures non effectuées).
Objectifs: récupérer ce fichier et tracer les caractéristiques de certains paramètres en fonction de la profondeur grace à un programme Matlab (le fichier est trop gros pour Excel)...
Ce que j'ai déjà fait: importer le fichier sous Matlab en lui demandant d'enregistrer chaque colonne comme étant un vecteur.
Problème: je ne connais pas la syntaxe pour appeler ces vecteurs dans mon programme (en ne sélectionnant que les plages de valeurs qui m'intéressent, puisque certaines cases sont inutilisables), ni comment les tracer.
Voilà, le problème ne doit pas être très compliqué à résoudre mais je ne sais pas comment l'écrire (pas trouver dans l'aide)! Si une âme charitable pouvait m'aider ...
Salut
si j'ai bien compris tu as ouvert ton fichier avec la fonction fopen, ensuite il faut que tu lises les valeurs avec un 'fscanf' comme suit:
Code:
val = fscanf (fid, "%d");
où fid est le descripteur de fichier renvoyé par fopen, "%d" est fait si tes données sont de type entier, remplace par "%f" si ce sont des flottants.
Ensuite, tes données sont dans le vecteur "val". tu peux récupérer la 3ème colonne par exemple avec "val(3:20:end)" si tu as bien 20 colonnes. Une autre méthode est de transformer ton vecteur en une matrice 20 colonne avec
Code:
x = reshape (val, nlines, 20)
. Ensuite pour trouver les indices valide tu utilises la fonction "find". Si par exemple les valeurs invalides sont -1,
Code:
n = find (x(:,1) ~= -1)
te retourneras dans "n" les indices valides, alors
Code:
y = x(n,:)
devrait être la matrice ne contenant uniquement les measures correctes...
Si tu as des problèmes poste quelques lignes de ton fichier, avec des valeurs invalides, pour que nous jettions un oeil.
PS: dlmread est certainement mieux adapté que fscanf, "help dlmread" t'en diras plus.
Dernière modification par lou_ibmix_xi ; 21/02/2010 à 20h07.
Motif: balise de code
Tant qu'il y à de la vis, il y a du tourne-vis
22/02/2010 - 12h18
Lebarz33
Date d'inscription
juin 2009
Âge
25
Messages
25
Re : Matlab-traitement de données importées
Bonjour et merci de ta réponse
En fait, j'ai importé mon fichier dans Matlab en faisant "file=>import data". J'importe mon fichier texte, qu'il transforme en un tableau (choix des séparateurs=tabulations) et il me demande ensuite:
'select variables to impor using checkboxes': Ier choix:create variables matching preview ou 2eme choix: create vectors from each column using column names.
Jusque là j'ai toujours pris le deuxième choix. Je me retrouve ainsi avec une liste de vecteurs dans mon workspace, chacun correspondant à une colonne du tableau.
Dans mon idée, je définissais deux variables:
Vec1= 'nom de la colonne 1'
Vec 2= 'nom de la colonne 2'
Plot (Vec1,Vec2)
Mais ca ne marche pas...
Peut etre y a t il une commande pour bien lui faire comprendre de trouver 'nom de la colonne i' directement dans le work space pour qu'il comprenne de quels vecteurs je lui parle?
Tu pensais que j'avais utilisé fopen... Est ce une commande qui produit automatiquement l'importation de fichier que j'ai faite manuellement? J'ai eesayé de l'utilisé tel que: fid=fopen ('nom du fichier', 'r'); val = fscanf (fid, '%f'); mais il n'aime pas trop... (error using fscanf. Invalide file identifier, use fopen to generate a valide file identifier)
Bon je vais essayer de chercher un peu en attendant ton aide
G.
22/02/2010 - 12h52
lou_ibmix_xi
Date d'inscription
juin 2006
Localisation
Toulon
Âge
33
Messages
1 017
Re : Matlab-traitement de données importées
OK...
En fait le problème vient surtout du fait que tu n'utilises pas MATLAB comme moi: pour moi MATLAB est avant tout une ligne de commande, un peu comme la ligne de commande DOS ou UNIX. Donc lorsque tu ouvres MATLAB tu te retrouves dans un répertoire (je ne saurais pas te dire lequel sous windows). Or, la fonction "fopen" nécessite le chemin complet de ton fichier par rapport au répertoire courant, je suppose donc qu'il n'arrive pas à ouvrir le fichier, tu peux t'en assurer en affichant le résultats qui doit être un nombre strictement positif en cas de succès. Donc deux solutions: tu change de répertoire courant grâce à la commande "cd" (comme en DOS ou en shell), ou tu lui donnes le chemin complet du fichier à ouvrir...
De plus concernant l'import de donnée selon ta méthode, je ne peux pas t'aider car j'utilise OCTAVE, un clône gratuit de MATLAB, compatible à 99.999% avec ce dernier, mais qui ne travaille qu'exclusivement en ligne de commande.