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

MATLAB Discussion :

[Débutant] Lire un fichier avec un formatage particulier


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 24
    Points : 8
    Points
    8
    Par défaut [Débutant] Lire un fichier avec un formatage particulier
    Bonjour,
    voila je suis tout nouveau dans matlab, et je cherche à lire un fichier, et tracer un courbe avec les points qu'il y a dedans.
    le fichier se présente suivant 5 colonnes (la première colonne innutile, la courbe 1, 2, 3 et 4), le tout séparé d'un ; à chaques fois sauf à la fin et avec des virgules comme séparateur décimal (je sias pas si c'est génant dans matlab... mais ça se change vite ça)

    // ;voie 1;voie 2 ;voie 3 ;voie 4
    252;401,90;1311,71;4027,48;13144,90
    252;401,05;1303,42;4027,48;13061,71

    J'aimerai zapper la première colonne et tracer les courbes 1 à 4 en fonction du temps (1/400ième de seconde entre chaque ligne)

    Le truc c que je ne connais pas matlab et je suis un peu novice en prog...
    Je ne sais pas du tout comment m'y prendre pour zapper la première colonne, lire et stocker la voie 1 jusqu'au ";" changer de ligne pour lire le point suicant de la voie 1....

    bref, si quelqu'un pouvait me donner un petit coup de main.... ce serait vraiment pas de refus !

    merci d'avance !

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Bonjour,

    voici une solution :

    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
     % Lecture des données
    [X{1:4}]=textread('data.txt','%*d%s%s%s%s','delimiter',';','headerlines',1);
     
    % Modification du séparateur décimal
    X=strrep([X{:}],',','.');
     
    % Transformation en nombres
    X=str2num(char(X));
     
    % Remise en forme de la matrice X
    X=reshape(X,numel(X)/4,[]);
     
    % Affichage des courbes
    t=0:1/400:(size(X,1)-1)/400;
    p=plot(t,X(:,1),'r-',t,X(:,2),'b-',t,X(:,3),'k-',t,X(:,4),'m-');
     
    legend(p,{'Voie 1' 'Voie 2' 'Voie 3' 'Voie 4'})
    Je reste disponible pour plus d'info !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 24
    Points : 8
    Points
    8
    Par défaut

    héhé... nickel !
    Merci bcp Dutmatlab.

    Puis-je poser 1 ou 2 questions ??

    J'ai essayé de comprendre un peu ton code, et si jai bien compris, pour n'afficher qu'une des colonne, faut changer la 1ère ligne en remplaçant '%*d%s%s%s%s' par '%*d%*d%s%s%s' ...?
    (jai pas très bien pigé ce que faisait %*d% et %s%...)

    Une autre question...
    Chaque valeur qui est tracée, est une fréquence. A chaque fréquence, corresponds une valeur de tension, qui corresponds a une mesure de pression (c'est un peu compliqué

    J'ai des points d'étalonnage, qui me donnent la correspondance pour chaque courbe qq points de référence.
    Je ne sais pas trop comment intégrer cela au code... tu as une idée ??

    Re merci !!!

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Citation Envoyé par babounlehobbit
    (jai pas très bien pigé ce que faisait %*d% et %s%...)
    En fait il y a plusieurs problèmes ici :

    1) L'emploi de * dans le format permet de ne pas stocker un élément du format.
    Dans mon exemple, je l'ai employé pour ne pas stocker le premier nombre entier (première colonne).

    2) Le format %s (chaine de caractères) a été utilisé parce que, comme tu le pensais, Matlab n'aime pas la virgule comme séparateur décimal. Il fallait donc :

    lire en %s => changer "," en "." => transformer en nombres

    Toutes ces infos sont disponibles dans la documentation... en anglais !

    Pour ta dernière question... j'ai pas vu la question

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    ok, je vais bouquiner un peu la doc...

    Pour la dernière question, en fait, je voudrais essayer d'aficher les valeurs de pression au lieu d'afficher la fréquence.
    Pour cela, j'ai des relevés de qq points qui me disent que pour la "voie 0", j'ai 326Hz=40kPa... (cf piece jointe)
    J'ai donc 2 pts par voie, et suppose que j'ai une régression linéaire. Je peux donc en tirer une équation du genre y=ax+b... pour chaque voie.
    Mais le souci, c'est que je ne sais pas comment l'intégrer dans le code...

    (j'espère avoir été un peu plus clair )
    Images attachées Images attachées  

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Citation Envoyé par babounlehobbit
    Mais le souci, c'est que je ne sais pas comment l'intégrer dans le code...
    Je ne sais pas si c'est moi ...mais intégrer quoi exactement dans quel code ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    Héhé... non c'est p'tet moi aussi.... jai pas bcp dormi ces derniers jours, j'ai un peu du mal a mettre de l'ordre dans mes idées...!

    En fait, le code dont je parle , c'est celui que tu m'as proposé au dessus, et qui m'a permis de tracer les courbes.
    Et au lieu de tracer "betement" les chiffres qu'il y a dans le fichier texte, ce que je voudrai faire c'est effectuer un petit calcul avant de tracer.

    Exemple :
    Pour la voie 1, dans le fichier on peux lire 401,90. Cette valeur corresponds à 30kPascal (calculé grace à une formule genre y=ax+b)
    et bien au lieu de tracer directement 401,90 je voudrai calculer puis afficher 30...
    Tu vois ?


    Et ya une formule différente pour chaque voie (a et b changent)

    Voila, j'espère que là c'est plus clair... sinon, c vraiment moi le boulet

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    Oui, bon en fait cela reviens à multiplier la 2ème, 3ème, 4ème et 5ème colonne par a1, a2... bref.
    Donc ma question c'est juste comment fait on pour multiplier juste une colonne

    Si je veux le mettre dans la matrice Y, est-ce que c'est un truc dans le genre Y(:,2)=X(:,2)*a+b; ?

    Merci!

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Citation Envoyé par babounlehobbit
    est-ce que c'est un truc dans le genre Y(:,2)=X(:,2)*a+b; ?
    Bonjour,

    il suffit d'essayer !

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/03/2007, 12h39
  2. Réponses: 1
    Dernier message: 19/12/2005, 17h09
  3. Lire un fichier avec un charset UTF8
    Par Sonic dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 03/05/2005, 19h37
  4. Réponses: 1
    Dernier message: 24/11/2004, 16h54
  5. [ZIP]besoin de lire des fichiers avec l'extension tar.gz
    Par mathieublanc13 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 24/05/2004, 13h35

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