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 :

Lire fichier text avec dlmread


Sujet :

MATLAB

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut Lire fichier text avec dlmread
    Bonjour, après une suite de teste et la difficulté rencontré a lire et a affecter le contenu de ces fichiers excel volumineux, j'ai donc changé le type de fichier en travaillant avec des fichiers text. J'ai entendu parlé de la commande textscan, mais là je confirme que la commande dlmread est plus intéressante, très simple et surtout rapide. Donc voila, j'ai affecté ces fichiers texte un peu partout dans un tableau de cellule. Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    clear all;  % clears all variables
    close all;  % close all windows
    clc ;       % clears the command window
    workspace;  % Make sure the workspace panel is showing.
     
    A= cell(30,1);
    for i = 1:30
        [FileName,PathName] = uigetfile('*.txt');
        A{i} = dlmread(fullfile(PathName, FileName));
    end
    Le code marcherai bien, et surtout rapide, j'espère y'a pas d'erreur a ce niveau la! Ma question est la suivante, afin d'éviter le chargement de chaque fichier pour chaque itération, je vais les mettre donc dans le même dossier et je sélectionne le tout a la fois. J'ai procédé cette manipe mais ça marche pas, voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [FileName,PathName] = uigetfile('*.txt');
    A = cell(numel(FileName),1);
    for i = 1:numel(FileName)
        pathFile = fullfile(PathName, FileName{i});
        A{i} = dlmread(fullfile(PathName, FileName{i}));
    end

  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 882
    Points
    52 882
    Par défaut
    Dans ce cas, utilise plutôt uigetdir et dir comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    PathName = uigetdir;
     
    d = dir('*.txt');
     
    A = cell(numel(d),1);
     
    for i = 1:numel(d)
     
        A{i} = dlmread(fullfile(PathName, d(i).name));
     
    end
    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 régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut
    Bonsoir Dut, merci beaucoup! mais là je rencontre un problème, je pense pas que c'est aussi grave, j'ai obtenu ce message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Error using dlmread (line 62)
    The file '/Users/wolfenstein/Desktop/Test/01.txt' could not be
    opened because: No such file or directory
    ce que je comprends pas 01 n'existe pas dans le dossier selectionné Test. De plus j'en ai 30 fichiers text dans le dossier et quand j'applique numel(d) ça me donne 3 au lieu de 30.

  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 882
    Points
    52 882
    Par défaut
    Une erreur dans le code que j'ai posté précédemment.

    Remplacer :
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d = dir(fullfile(PathName,'*.txt'));
    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 régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut
    c'est super, ça marche merci DUT, là je confirme que la fonction dlmread est très intéressante. Une question Dut, en examinant le contenu de la cellule ex A{1,1}, il y'a quelques valeurs qui prennent cette écriture exponentiel par ex:2.287980000000000e+03 au lieu de 2287.98 et est ce que n'influe pas sur n'importe qu'elle traitement? merci

  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 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 882
    Points
    52 882
    Par défaut
    Citation Envoyé par callofduty Voir le message
    en examinant le contenu de la cellule ex A{1,1}, il y'a quelques valeurs qui prennent cette écriture exponentiel par ex:2.287980000000000e+03 au lieu de 2287.98 et est ce que n'influe pas sur n'importe qu'elle traitement? merci
    Non

    Voir la FAQ : Pourquoi MATLAB affiche-t-il des valeurs tronquées ?
    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)

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut
    Bonsoir, bein ton mieu, si ça va pas influencer sur mon prochain traitement Une dernière question si tu me permets, comment peut on sauvegarder le tableau de cellule résultant A?

  8. #8
    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 882
    Points
    52 882
    Par défaut
    Tu peux sauvegarder le contenu de la variable A dans un fichier .mat avec la fonction save.
    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)

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut
    Bonjour DUT , donc voila pour le sauvegarder c'est save et pour le charger une autre fois c'est load, donc voila le code pour l'enregistrement:

    Le fichier est enregistré automatiquement dans workspace avec l'extension .mat, ce que j'ai remarqué c'est que la taille ou le poids de ce fichier A est beaucoup moin importante que celle des fichiers text, je m'explique A{i}.mat =148,3 Mo et la taille de l'ensemble des fichiers txt vaut 428,9 Mo . Est ce que c'est normal?

  10. #10
    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 882
    Points
    52 882
    Par défaut
    Où as-tu placé cette ligne ?

    Il faut la mettre à l'extérieur de la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    PathName = uigetdir;
     
    d = dir(fullfile(PathName,'*.txt'));
     
    A = cell(numel(d),1);
     
    for i = 1:numel(d)
     
        A{i} = dlmread(fullfile(PathName, d(i).name));
     
    end
     
    save A.mat A
    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)

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut
    Bonjour, justement Dut j'ai les mis a l'extérieur de la boucle, je sauvegarde le résultat après tout le parcoure, voici ma syntaxe y'a pas de grand chose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    save A{i}; % Save A{i} cell array
    Mais là, je trouve la taille est du fichier enregistré est un quart de la taille de l'ensemble de données! je ne sais pas si c'est normal ou pas?

  12. #12
    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 882
    Points
    52 882
    Par défaut
    Les fichiers binaires (comme les .mat) ont généralement une taille plus faible que les fichiers txt. D'autre part, MATLAB utilise des algorithme de compression lors de l'écriture des fichiers .mat

    Sinon, je ne vois pas l'intérêt de nommer ton fichier A{i}.mat ?
    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)

  13. #13
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut
    Merci Dut, donc y'a pas de problème! pour ta remarque Dut, il ne y'a aucun intérêt, j'aurai pu le faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    save('mon_fichier_mat.mat','A');
    J'ai trouvé ce lien qui aborde ce sujet avec une commande savefast.

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

Discussions similaires

  1. Lire un fichier texte avec différents champs
    Par Propyle49 dans le forum Débuter
    Réponses: 3
    Dernier message: 16/04/2010, 11h40
  2. lire un fichier texte avec fscanf
    Par yesil08 dans le forum Débuter
    Réponses: 8
    Dernier message: 30/10/2009, 10h21
  3. Réponses: 13
    Dernier message: 07/07/2008, 14h29
  4. Réponses: 7
    Dernier message: 04/07/2008, 17h25
  5. [C++] Lire un fichier Texte avec SDL
    Par d-jey dans le forum SDL
    Réponses: 8
    Dernier message: 26/05/2006, 02h38

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