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 :

importer des données du fichier texte vers un tableau de cellule


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut importer des données du fichier texte vers un tableau de cellule
    Bonjour tout le monde je suis débutant au forum,
    je dispose un fichier texte dont son organisation des données est comme suit (veuillez voir l'attachement):
    1. Les deux premieres lignes sont de type char
    2. les autres lignes sont sont de type double
    Je voudrais donc importer ces données dans un tableau de cellule. En essayant ç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'));
     
    for i = 1:numel(d)
     
        A(i) = importdata(fullfile(PathName, d(i).name),'\t');
     
    end
    J'ai obtenu des cases vides pour la premiere ligne à affecter, ce qui est n'est pas normal à mon avis (voir la photo).
    En effet chaque case doit contenir un symbole comme ceci (ex: case 1: *1 case 2: *2...etc).


    dossier sans titre.zip

  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 304
    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 304
    Points : 52 888
    Points
    52 888
    Par défaut
    Cela me rappelle des discussions antérieures sur ce forum…

    Pour la lecture, je ferais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    fid = fopen('004.txt', 'rt');
     
    % premiere ligne
    str = fgetl(fid);
    H1 = textscan(str, '%s');
     
    % deuxieme ligne
    str = fgetl(fid);
    H2 = textscan(str, '%s');
     
    %valeurs numériques
    M = fscanf(fid,'%f', [size(H2{1},1) inf]).';
     
    fclose(fid);
    ou avec une version récente de MATLAB :
    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
    fid = fopen('004.txt', 'rt');
     
    % premiere ligne
    str = fgetl(fid);
    H1 = strsplit(str);
     
    % deuxieme ligne
    str = fgetl(fid);
    H2 = strsplit(str);
     
    %valeurs numériques
    <s>M = fscanf(fid,'%f', [size(H2{1},1) inf]).';</s>
    M = fscanf(fid, '%f', [numel(H2) inf]).';
     
    fclose(fid);
    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
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci Dut pour votre réponse,

    j'ai un petit souci avec le deuxième code

    En fait, pour le parementer M doit être une matrice et non pas un vecteur

  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; essaye ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    M = fscanf(fid,'%f', [size(H2,2) inf]).';

  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 304
    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 304
    Points : 52 888
    Points
    52 888
    Par défaut
    Effectivement, strsplit renvoie un tableau de cellules 1xN

    Il faut donc écrire, comme l'a déjà corrigé callofduty, dans le deuxième code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    M = fscanf(fid, '%f', [size(H2, 2) inf]).';
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    M = fscanf(fid, '%f', [numel(H2) inf]).';
    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)

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'ai envis maintenant ouvrir plusieurs fichiers textes contenant dans un dossier.
    Lorsque j'applique ce code, il m'indique erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PathName = uigetdir;
    d = dir(fullfile(PathName,'*.txt'));
    for i=1:numel(d)                               
        fid = fopen(d(i).name, 'rt');
        str = fgetl(fid);
        H1 = strsplit(str);                            
        str = fgetl(fid);
        H2 = strsplit(str);
        M = fscanf(fid,'%f', [size(H2,2) inf]).'; 
        fclose(fid); % processing
    end

    l'erreur est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Error using fgets
    Invalid file identifier.  Use fopen to generate a valid file identifier.
     
    Error in fgetl (line 34)
    [tline,lt] = fgets(fid);

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fid = fopen(fullfile(PathName,d(i).name), 'rt');

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je vous remercie pour votre aide.
    J'aimerais bien savoir si c'est possible de regrouper
    le tout (1 chaine, 2 chaine, donnee numerique) dans une cellule.

  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, à mon avis c'est possible avec le code fournit par Dut, puisque strsplit renvoie un tableau de cellules. Donc on est d'accord que les 2 premieres lignes de ton fichier sont stockées dans une cellule. Il te reste le paramètre (M) qui est en double q'il faut le convertir avec num2cell(M) . Et par la fin, tu rassembles le tout en 1 cellule global. Personnellement, je connais pas la fonction strsplit, ou sinon tu devras utiliser textscan à sa place, et donc une autre conversion est recommandée.

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    j'ai pas bien compris, comment associer ces 3 parametres en une cellule globale. Merci

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    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 304
    Points : 52 888
    Points
    52 888
    Par défaut
    A mon avis, il n'y a quasiment aucun intérêt à mettre ces données dans un seul tableau de cellules.

    Pourquoi souhaites-tu faire cela ?
    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)

  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
    Bonsoir; tu peux consulter ma discussion ici: http://www.developpez.net/forums/d14...e/#post7920880. Pour ton cas tu peux ajouter le scanne de la première ligne. Et à la fin tu auras ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    total{i} = [H1 ,H2; num2cell(M)];

Discussions similaires

  1. Importation des données de fichier Excel vers MySQL
    Par franco9 dans le forum Requêtes
    Réponses: 1
    Dernier message: 14/01/2013, 19h14
  2. Réponses: 3
    Dernier message: 24/05/2008, 18h56
  3. Récuperer des données de fichier pdf vers une feuille xls
    Par zeralium dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/08/2007, 14h03
  4. [VBA-E]Importer des données de fichiers excel fermés
    Par bart64 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/04/2006, 11h35
  5. Réponses: 1
    Dernier message: 19/01/2006, 19h22

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