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 :

enregistrer des fichiers textes dans un tableau de cellules


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 enregistrer des fichiers textes dans un tableau de cellules
    Bonjour, j'ai voulu affecté le contenu du fichier texte dans un tableau de cellule. J'ai appliqué ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    % When global text files are finished, copy them to another final folder
    % the storing of these files will be end in a table cell
     
    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
    J'ai eu ce message d'erreur:

    Error using dlmread (line 139)
    Mismatch between file and format string.
    Trouble reading number from file (row 1u, field 1u) ==> #1 #2
    #3 #4 #5 #6 #7 #8 #9 #10 #11
    #12 #13 #14 #15 #16 #17 #18 #19 #20
    #21 #22 #23 #24 #25 #26 #27 #28 #29
    #30 #31 #32 #33 #34 #35 #36 #37 #38
    #39 #40 #41 #42 #43 #44 #45 #46 #47
    #48 #49 #50 #51 #52 #
    Lorsque j'enleve la colonne #1....#n et le caractère temps, y'a aucun problème.

  2. #2
    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
    Sinon, comment peut on faire pour copier le contenu du fichier dans le tableau de cellule sauf la première ligne et la première colonne?

  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 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Tu as un début de réponse ici, non ?

  4. #4
    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, tout d'abord je dois décortiquer ton code, j'ai pas d'habitude de travailler avec des fichiers de types XLSX ou TXT. Si je reviens à ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    % When global text files are finished, copy them to another final folder
    % the storing of these files will be end in a table cell
     
    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
    Pourquoi y'a un message d'erreur?Autrement dis pourquoi les données de types char ne peuvent pas êtres affecter. Merci

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Citation Envoyé par callofduty Voir le message
    Pourquoi y'a un message d'erreur?Autrement dis pourquoi les données de types char ne peuvent pas êtres affecter. Merci
    Parce que dlmread est initialement prévue pour importer des fichiers ne contenant que des valeurs numériques, ou bien seulement des caractères sur une ou plusieurs lignes d'entête (qui ne seront pas stockés)

    La première ligne de la documentation :

    RESULT = dlmread(FILENAME) reads numeric data from the ASCII delimited file FILENAME
    Si tu ne veux lire que les valeurs numériques à partir de la 3ème ligne du fichier, il faudra utiliser une des solutions données dans la FAQ : Comment passer l'entête d'un fichier texte en lecture ?

  6. #6
    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
    je trouve que l'idée de sauter des lignes et colonnes n'est pas bonne. En effet je veux stocker le fichiers comme il est. Si je comprends bien, la commande dlmread est conçue uniquement pour les valeurs numériques, y'a pas une autre commande qui s'occupe de ça?

  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 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Tu peux utiliser la fonction textscan

  8. #8
    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
    J'ai l'ai testé déjà au paravant , mais je trouve dlmread est plus rapide. Surtout que je travaille sur des fichiers volumineux. Bon j'ai exécuter ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    % When global text files are finished, copy them to another final folder
    % the storing of these end files will be in a table cell
     
    PathName = uigetdir;
     
    d = dir(fullfile(PathName,'*.txt'));
     
    A = cell(numel(d),1);
     
    for i = 1:numel(d)
     
        A{i} = textscan(fullfile(PathName, d(i).name));
     
    end
    j'ai eu ce message d'erreur:
    Error using textscan
    Not enough input arguments

  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 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Voir la FAQ : Not enough input arguments.

    Et la documentation de la fonction textscan (avec les exemples en bas de page)

  10. #10
    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
    Je pense pas que cette commande va me servir, puisque les fichiers sont volumineux, je l'ai déjà tester sur des données numériques, c'était vraiment long.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Il y aurait moyen d'effectuer la lecture avec dlmread en spécifiant le délimiteur comme étant # :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A = dlmread(fullfile(PathName, d(i).name), '#')
    On aurait alors une colonne insérée au début que l'on pourrait facilement supprimer.

    Une autre solution avec fscanf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fid = fopen(fullfile(PathName, d(i).name), 'rt');
    A = fscanf(fid, '#%d ', [9 Inf]).';
    fclose(fid);
    Ou avec textscan :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fid = fopen(fullfile(PathName, d(i).name), 'rt');
    A = textscan(fid, repmat('#%d ',1,9), 'CollectOutput', true);
    % A{1}
    fclose(fid);

  12. #12
    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
    J'ai crier un dossier sous le nom New_DATA, ensuite je copier les fichiers textes résultants dans ce dossier. Et a partir de ce dossier j'affecte ses fichiers textes dans un tableau voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mkdir('New_DATA');
    movefile(['new_test' num2str(F) '.txt'],'New_DATA');
    PathName = uigetdir;
    d = dir(fullfile(PathName));
    A = cell(numel(d),1);
    for i = 1:numel(d) 
        A{i} = dlmread(fullfile(PathName, d(i).name),'#');
    end
    J'ai eu un message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Error using dlmread (line 120)
    The file '/Users/wolfenstein/Documents/MATLAB/New_DATA/.' could
    not be opened because: Cannot open file. Existence? Permissions?
    Memory? . . .
    Le nouveau dossier est bien crié inclut dedans new_test1, new_test2...çave dire quoi existence, permission te memorry

  13. #13
    Invité
    Invité(e)
    Par défaut
    Comme vu dans l'autre discussion, le dossier courant '.' fait parti de la liste retournée par la fonction dir, attention donc de ne pas vouloir l'ouvrir comme un fichier avec dlmread

  14. #14
    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
    J'ai pas bien compris, dans le code j'ai oublié de mettre ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mkdir('New_DATA');
    movefile(['new_test' num2str(F) '.txt'],'New_DATA');
    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
    ça me donne erreur toujours:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Error using dlmread (line 139)
    Mismatch between file and format string.
    Trouble reading number from file (row 2u, field 1u) ==> Time
    23:56:08	23:57:05	23:58:02	23:58:59
    23:59:56	00:00:53	00:01:50	00:02:47
    00:03:45	00:04:42	00:06:08	00:07:05
    00:08:02	00:08:59	00:09:56	00:10:53
    00:11:50	00:12:47	00:13:45	00:14:42\n
    J'ai pensé a ajouter un délimiter Time, mais toujours la même chose

  15. #15
    Invité
    Invité(e)
    Par défaut
    dlmread sert à lire de vraies valeurs numériques. Ici ce sont des temps sous forme HH:MM:SS que tu souhaites lire : elle n'est donc pas adaptée.

    Si tu regardes bien ton fichier ce sont des ':' et espaces qui séparent les différentes données.
    Avec ce contenu :
    23:56:08	23:57:05	23:58:02	23:58:59
    23:59:56	00:00:53	00:01:50	00:02:47
    00:03:45	00:04:42	00:06:08	00:07:05
    00:08:02	00:08:59	00:09:56	00:10:53
    00:11:50	00:12:47	00:13:45	00:14:42
    tu pourras au mieux obtenir ceci avec dlmread(fullfile(PathName, d(i).name), ':')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        23    56     8    23    57     5    23    58     2
        23    58    59     0     0     0     0     0     0
        23    59    56     0     0    53     0     1    50
         0     2    47     0     0     0     0     0     0
         0     3    45     0     4    42     0     6     8
    Mieux vaut utiliser textscan ici

  16. #16
    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 bien dommage, parce que avec dlmread je le trouve assez rapide et facile aussi. J'ai essayé ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PathName = uigetdir;
    d = dir(fullfile(PathName,'*.txt'));
    A = cell(numel(d),1);
    for i = 1:numel(d)  
        fid = fopen(fullfile(PathName, d(i).name), 'rt');
        A = textscan(fid, repmat('#%d ',1,9), 'CollectOutput', true);
        fclose(fid);
    end
    Dans la cellule A{1,1}, une matrice de 3x9 int32!

  17. #17
    Invité
    Invité(e)
    Par défaut
    Nous sommes bien d'accord que le contenu de ton fichier ressemble à :
    23:56:08	23:57:05	23:58:02	23:58:59
    23:59:56	00:00:53	00:01:50	00:02:47
    00:03:45	00:04:42	00:06:08	00:07:05
    00:08:02	00:08:59	00:09:56	00:10:53
    00:11:50	00:12:47	00:13:45	00:14:42
    ? Ou autre chose ?
    Si c'est autre chose, la moindre des choses serait de la montrer, et j'aurais tendance à dire que tu lis le mauvais fichier vu le message d'erreur.
    Si c'est bien cela, tu constates comme moi qu'il n'y a aucun caractère # dedans. Inutile donc de recopier bêtement le code donné je ne sais plus où pour une autre forme de fichier.

    Il faudrait de plus savoir sous quelle forme précise tu souhaites obtenir tes donnes lues au final.

  18. #18
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    ? Ou autre chose ?
    => rassembler plusieurs fichiers textes en un seul

  19. #19
    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, si le fichier contient bien # et aussi Time dans les deux premières lignes du fichier texte global et c'est ce que je cherche déjà ou sinon j'affecte directement les données numériques sans les attributs. Veuillez voir le fichier ci-joint
    Fichiers attachés Fichiers attachés

  20. #20
    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
    J'ai appliqué ça:

    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)
     
    fid = fopen(fullfile(PathName, d(i).name),'rt'); %opening in read mode (default)
    A{i} = textscan(fid,'%[^\n]'); 
    fclose(fid);
     
    end
    J'ai remarqué les données sont enregistrées dans la même colonnes alors que je veux que sa sera indépendant. Autrement dit je veux que chaque colonne du fichier texte sera dans une colonne du tableau de cellule.

Discussions similaires

  1. [Débutant] Importer des caractères d'un fichier texte dans un tableau
    Par Crepit dans le forum C#
    Réponses: 7
    Dernier message: 05/02/2014, 12h18
  2. Réponses: 8
    Dernier message: 06/08/2006, 16h11
  3. PHP5: charger des fichiers textes dans une base MYSQL
    Par koueletbak dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/03/2006, 12h14
  4. [Tableaux] Stocker un fichier texte dans un tableau
    Par clairette59 dans le forum Langage
    Réponses: 13
    Dernier message: 28/01/2006, 00h48
  5. Réponses: 5
    Dernier message: 15/05/2005, 09h51

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