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 :

Extraire données fichier texte vers une matrice


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut Extraire données fichier texte vers une matrice
    Bonjour,

    Je suis débutant dans matlab, et je doit traiter de nombreux fichiers textes avec une grande quantité de données!!

    Ces fichiers textes sont le résultats d'essais, et j'ai une grande quantité de fichiers répartis dans plusieurs dossier. Pour ouvrir ces fichier, j'utilise la fonction uigetfile.

    Voici le début de mon programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    clear all
    close all
    [FileName,PathName] = uigetfile('*.txt','sélectionnez le fichier texte');
    fid=fopen(FileName,'r');
    c=textscan(fid,'%f%f%f%f%f%f%f','headerlines',46);
    fclose(fid);
     
    temps=cell2mat(c(1));
    distance=cell2mat(c(2));
    tour=cell2mat(c(3));
    mu=cell2mat(c(4));
    poslin=cell2mat(c(5));
    forfric=cell2mat(c(6));
    prof=cell2mat(c(7));
    Le problème c'est que je n'arrive à ouvrir correctement que les fichiers qui se trouvent dans le même répertoire que le répertoire de travail de matlab.

    Pouvez vous me dire si j'ai fait une erreur?

    Voici un exemple de fichier texte que j'utlise:

    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
    ------------------------------------
    Données filtrées
    ------------------------------------
    Valeur du filtre : 0
    Temps 	Distance [m]	 Tours	 µ	Position linéaire [m]	Force de friction [N]	Profondeur de pénétration en µm
    0.025	0	0.00000	0.00419	0.00558954663574696	0.00105	23.4375
    0.050	0.00015999999595806	0.00667	-0.02656	0.0054933107458055	-0.00664	-76.2470016479492
    0.075	0.00031999999191612	0.01333	-0.48836	0.00538743752986193	-0.12209	-171.549514770508
    0.100	0.000480000016978011	0.02000	-0.26783	0.00527211325243115	-0.06696	-157.001190185547
    0.125	0.00063999998383224	0.02667	-0.36978	0.00514754001051188	-0.09245	-165.087554931641
    0.150	0.0007999999797903	0.03333	-0.37562	0.00501393573358655	-0.09391	-169.042190551758
    0.175	0.000960000033956021	0.04000	-0.31812	0.00487153604626656	-0.07953	-153.909484863281
    0.200	0.00112000002991408	0.04667	-0.39698	0.00472058961167932	-0.09924	-173.521408081055
    0.225	0.00127999996766448	0.05333	-0.31867	0.00456136139109731	-0.07967	-153.263885498047
    0.250	0.0014400000218302	0.06000	-0.35634	0.0043941312469542	-0.08909	-164.254638671875
    0.275	0.0015999999595806	0.06667	-0.35189	0.00421919254586101	-0.08797	-162.182022094727
    0.300	0.00176000001374632	0.07333	-0.37653	0.00403685169294476	-0.09413	-167.589447021484
    Merci de votre aide!!!

  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 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Déjà, modifie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [FileName,PathName] = uigetfile('*.txt','sélectionnez le fichier texte');
    fid=fopen(fullfile(PathName,FileName),'r');
    Ensuite :

    Citation Envoyé par mygwel Voir le message
    Le problème c'est que je n'arrive à ouvrir correctement que les fichiers qui se trouvent dans le même répertoire que le répertoire de travail de matlab.
    Quel est le problème exactement ?
    MATLAB renvoie-t-il un message d'erreur ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    Il me renvoi cette erreur à chaque foi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> textscan
    Invalid file identifier.  Use fopen to generate a valid file identifier.
     
    Error in ==> lecture3 at 5
    c=textscan(fid,'%f%f%f%f%f%f%f','headerlines',46);
    Avec la modifictation que tu m'as donné, ça marche!!!

    Merci

    Juste une autre petite question, dans la 4éme colonne de mon fichier texte, il y a desnombre négatif et des nombre positif. Je souhaiterai faire une matrice de 7 colonnes (nombre de colonne de mon fichier texte) avec tous mes nombres négatifs et une deuxiéme avec tous les nombres positifs. Comment je pourrai faire?

    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 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par mygwel Voir le message
    Je souhaiterai faire une matrice de 7 colonnes (nombre de colonne de mon fichier texte) avec tous mes nombres négatifs et une deuxiéme avec tous les nombres positifs. Comment je pourrai faire?
    Dans un premier temps, il est plus simple ici de récupérer les données sous forme d'une seule matrice plutôt que de multiplier les variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fid = fopen(fullfile(PathName,FileName),'rt');
        for n=1:46
            fgetl(fid);
        end
        X = fscanf(fid,'%f',[7,inf]).';
    fclose(fid);
    Tu peux donc maintenant étudier la colonne n°4 de X à l'aide de l'indexage logique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    idx = X(:,4)>0;
    Xpos = X(idx,:);
    Xneg = X(~idx,:);
    Lire ceci à propos des méthodes d'indxage : http://briot-jerome.developpez.com/m...sgestion/#LIII
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    Encore une dernière question, est ce qu'il est possible de faire un graphique à partir de 2 colonnes d'une matrice?

    Merci beaucoup!!!

    en fait c'est bon, j'utilis un plot comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot(Xpos(:,3),Xpos(:,4))
    par exemple.

    la 4éme colonne représente le mouvement alternatif de mon expérience.
    Est ce qu'il est possible de transformer la matrice contenant la 4ème colonne negative en matrice positive? en fait je souhaiterai tracer les 2 courbes sur le même graphique afin de comparer les 2 sens de déplacement, et faire un fit des données pour avoir une courbe moyenne de chaque sens.

    Il faut donc que je redresse ma courbe négative pour que je puisse la placer sur la courbe positive.

    Je ne sais pas si je suis trés clair...

    Merci de votre aide!!!

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    En faite en utilisant ça,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot(Xneg(:,3),abs(Xneg(:,4)))
    j'ai ma courbe négative qui devient positive!!

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par mygwel Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot(Xneg(:,3),abs(Xneg(:,4)))
    Ou, comme Xneg(:,4) ne comporte que des valeurs négatives, tu aurais pu faire simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot(Xneg(:,3),-Xneg(:,4))
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    merci beaucoup de votre aide!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/02/2013, 22h33
  2. Réponses: 7
    Dernier message: 28/10/2012, 20h44
  3. extraire les données d'un fichier text vers une table access
    Par djatto dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/09/2008, 17h51
  4. [MySQL] Problème pour insérer les données d'un fichier texte vers une table Mysql !
    Par BARRIAU76 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/01/2008, 23h24
  5. extraire donner fichier texte vers BDD
    Par dr_octopus74 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 29/12/2006, 19h07

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