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 :

Conversion fichier txt en matrice : Problème avec les solutions textread ou textscan


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 43
    Points : 29
    Points
    29
    Par défaut Conversion fichier txt en matrice : Problème avec les solutions textread ou textscan
    Bonjour.

    J'aurais besoin sous MATLAB de lire un fichier text du type :

    8.8050944e-001 3.8806645e-003 2.9418212e-002
    3.8806645e-003 1.0490385e-001 3.3107857e-004
    2.9418212e-002 3.3107857e-004 1.4586704e-002

    et de le convertir en matrice 3x3.

    Ce qu'il faut également savoir est que j'ai beaucoup de fichiers de ce type dans différents répertoire.
    Je fais donc choisir dynamiquement par l'utilisateur ce fichier dit d'entrée ( via un uigetfile) et je stock nom de fichier, nom de dossier et chemins d'accès dans différentes variables :

    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
    18
    19
    20
    21
    22
    23
    tensor_file =
     
    T2_V1_E1_P1_tens.txt
     
     
    tensor_path =
     
    D:\eleves\PFE LIM-CETIM\Etude CETIM\A_Données Expérimentales\Mesures ellipses\T2=30%\T2_V1=20ms-1\T2_V1_E1=1mm\T2_V1_E1_P1\Résultats MATLAB\
     
     
    tensor_folder_path =
     
    D:\eleves\PFE LIM-CETIM\Etude CETIM\A_Données Expérimentales\Mesures ellipses\T2=30%\T2_V1=20ms-1\T2_V1_E1=1mm\T2_V1_E1_P1\Résultats MATLAB
     
     
    tensor_name =
     
    T2_V1_E1_P1_tens
     
     
    tensor_folder =
     
    Résultats MATLAB
    Du coup premier problème, lorsque je veux utiliser textread ou textscan avec un code du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    tensor_adress=[tensor_path,tensor_file]
    fid=fopen('tensor_adress');
    C = textscan(fid, '%f %f %f','delimiter', ' ');
    fclose(fid);
    je me retrouve avec un message d'erreur car ma variable tensor_adress est considérée elle même comme chaine de caractères au lieu que ce soit l'adresse qu'elle stocke.

    D'autre part, %f est il le bon format pour les nombres adoptant la notation scientifique avec e ... ne vais je pas perdre de précision numérique ?!?

    Merci d'avance de m'éclairer de vos conseils avisés.

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Si ton fichier ne contient que des données numériques (comme dans ton exemple), tu peux utiliser la fonction LOAD.

    Sinon dans ton FOPEN, il ne faut pas mettre mais Bonne journée,
    Duf

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 307
    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 307
    Points : 52 887
    Points
    52 887
    Par défaut
    Et la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tensor_adress=[tensor_path,tensor_file]
    s'écrit de préférence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tensor_adress=fullfile(tensor_path,tensor_file);
    Citation Envoyé par Zaltymbunk Voir le message
    D'autre part, %f est il le bon format pour les nombres adoptant la notation scientifique avec e ...
    Oui, %f et %e conviennent ici
    Citation Envoyé par Zaltymbunk Voir le message
    ne vais je pas perdre de précision numérique ?!?
    Pas dans ton cas ( nombre avec 7 décimales)

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Ok impeccable merci bien !!

    Donc maintenant j'ai ma variable C qui contient bien les neufs valeurs ... mais dans une colonne de tableau de 9 lignes (9x1) ... y a t'il un moyen de directement lire et contenir ces neufs valeurs dans une matrice 3x3 ?!?

    Peut être vaudrait il mieux utiliser textread non ??

  5. #5
    Membre actif
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 213
    Points
    213
    Par défaut
    essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nouveauC = reshape(C,3,3)

  6. #6
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    As-tu essayé tout simplement avec LOAD comme te l'as conseillé Duf ?
    Tu gagnerais en nombre de lignes de code, en performance (je pense pas sure à 100%), et tu aurais directement ta matrice au bon format.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Ok j'ai un truc qui tourne bien en combinant cell2mat et reshape :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    format long e
    tensor_adress=[tensor_path,tensor_file];
    fid = fopen(tensor_adress,'r');
    tensor_datas = textscan (fid,'%f32');
    fclose(fid);
    tensor_col=cell2mat(tensor_datas);
    tensor_raw=tensor_col';
    tensor_mat=reshape(tensor_raw,3,3);
    Cependant j'ai l'impression que mon format long e de la première ligne ne sert plus à grand chose ... est il possible de l'intégrer dans le textscan à la place du %f32 ?

    D'autre part, dans mon cas, le format single est il suffisant ou faut il absolument que je sois en double ?

  8. #8
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Et sinon on pourrait savoir (non vraiment j'aimerais comprendre) pourquoi tu ne veux pas tout simplement utiliser LOAD ?

    NB : le format affiché sous MATLAB peut ne pas montrer toutes les décimales mais elles seront quand même bien dans les variables (il suffit pour s'en persuader d'utiliser "format long", ou d'afficher avec SPRINTF)

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    En fait j'ai essayé avec Load ... certes çà tiens en une seule ligne ... mais justement les valeurs sont en double ... et moi çà me sert pas spécialement à grand chose d'avoir une série de 4 ou 5 zéros supplémentaires après mes décimales ^^ !!

    Et donc pour mon histoire de format long e de la première ligne ... j'imagine qu'il vaille mieux que je le vire alors !?!

  10. #10
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Je ne comprends pas bien l'objectif du format final
    Qu'est-ce qui est gênant dans le fait que les valeurs soient de type double ?
    Ce qui compte c'est la valeur réelle dans la matrice non ? Et le fait qu'elle soit parfaitement égale à celle écrite dans le fichier ou je me trompe ?

    L'histoire de la commande FORMAT ne sert que pour l'affichage.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Ok je vois bien ce que tu veux dire et j'abonde en ton sens ... je considérais juste que cela ne servais à rien de faire stocker des zéros inutiles dans les variables ... et c'est ce que fait load.

    En tout cas merci encore pour vos astuces ... çà m'a permis de bien avancer !!

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

Discussions similaires

  1. Problèmes avec les fichiers .txt en Java
    Par aghade dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 23/08/2011, 14h24
  2. Sale problème avec les strings et les fichiers
    Par acieroid dans le forum C++
    Réponses: 18
    Dernier message: 26/04/2006, 09h47
  3. Réponses: 6
    Dernier message: 17/11/2005, 14h39
  4. Réponses: 2
    Dernier message: 10/05/2005, 10h58
  5. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44

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