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 :

reconnaissance de fichiers excel [Débutant]


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut reconnaissance de fichiers excel
    Bonjour,

    je vous recontacte suite à mon post*:
    http://www.developpez.net/forums/d13...tion-cellules/


    Je souhaiterais améliorer mon programme. Mais je ne sais même si ce que je veux est réalisable, tellement cela me semble complexe à mettre en œuvre.

    Je re-explique mon programme.
    Il me permet d'aller chercher des fichier excel (.XLS) et de les mettre dans une cellule. J'utilise la première colonne de chacun des fichiers que j'envoie sous un tableau de cellule.
    Ce sont des donnée temporelles. Ensuite j'effectue un calcul sur ces données pour en extraire une valeur unique pour chacun des tableaux. Je nomme cette valeur «*A{j}*» par exemple.
    Et ensuite je modélise sur un graphe A en fonction du nombre de mes fichiers que je suis allé chercher.

    Là arrive mon problème. J'aimerais que sur l'axe des abscisse n'apparaisse pas le nombre de mes fichiers mais leur numéro. Chacun des fichier est appelé sous le nom Parcours_1, Parcours_2 etc...j'aimerais retrouvé sur l'axe des abscisse le n° 1, 2 3 ou autre que je pointe.

    En résumé, si je charge le fichier Parcours_26 puis le fichier Parcours_5, que sur mon graphe je puisse détecter quelle donnée appartient à quel fichier.

    Est-ce réalisable*?

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    oui bien sur

    déjà pour récupérer le numéro du fichier, regardes du coté de textscan par exemple

    ensuite il suffit de stocker ce numero dans un tableau avec les mêmes indices que ton tableau de cellules

    sinon une autre solution est d'utiliser une structure (un tableau de structures) dans laquelle tu mets tes données ET le numero (voir aussi le nom complet du fichier ....)

    FAb

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    J'essaie de comprendre en effet ta méthode avec le textscan

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    %============================= CHARGEMENT DES FICHIERS ======================
     
    [FileName,PathName] = uigetfile('*.xls','Sélectionnez les fichiers Excel', 'MultiSelect', 'on'); % pour créer une liste de nom de fichiers à ouvrir
    % Sélectionner les fichiers dans l'ordre souhaité inverse pour qu'ils apparaissent
    % dans l’ordre dans la cellule sous MATLAB
    for i_file = 1:length(FileName);
        m{i_file} = xlsread(fullfile(PathName, FileName{i_file}));
        C{i_file} = textscan(FileName, '%1d %*1d');
    end
    mais comme nom de fichier parcours_1 est composé de texte et aussi d'un numéro, je suis un peu déboussolé. Sachant que je cherche uniquement à récupérer le n°

    par exemple MATLAB propose un exemple qui me surprend :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    str = '0.41 8.24 3.57 6.24 9.27';
    C = textscan(str, '%3.1f %*1d');
     
    TEXTSCAN returns a 1-by-1 cell array C:
    C{1} = [0.4; 8.2; 3.5; 6.2; 9.2]

  4. #4
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Salut,
    regarde ce que donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textscan('parcours_1', 'parcours_%1d')

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    ca m'a lair de marcher mais du coup lorsque je crée mon graphe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    plot(C{j},A{j},'.r')
    ca ne fonctionne pas bien évidement.

    En fait apres observation, dans ma cellule ca n'enregistre que des 1. Probleme

  6. #6
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Salut,
    tu peux nous décrire un peu plus ton problème? Tu as un message d'erreur?
    Que te renvoie :

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    C me renvoie des cellules mais toute égale a 1 et A ne pose pas de problème car mon calcul marche. J'ai une valeur de A par fichier


    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
     
    [FileName,PathName] = uigetfile('*.xls','Sélectionnez les fichiers excel', 'MultiSelect', 'on'); 
     
    for i_file = 1:length(FileName);
        m{i_file} = xlsread(fullfile(PathName, FileName{i_file}));
        C{i_file} = textscan(FileName, 'parcours_1_%1d');
    end
     
     
    % Boucle sur les i_file
     
    for j=1:i_file
     
    A{j}
    plot(C{i_file},A{j},'.r')
     
    end

  8. #8
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Attention au copier coller...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C{i_file} = textscan(FileName, 'parcours_%1d');
    La tu cherches dans filename les apparitions de "parcours_" suivit d'un entier.

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    Ta proposition ne fonctionne pas :
    ??? Undefined function or variable 'Filename'.
    
    Error in ==> lire2 at 11
        C{i_file} = textscan(Filename, 'parcours_%1d');
    
    Error in ==> run at 57
              evalin('caller', [s ';']);

  10. #10
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    FileName est ta variable!
    [FileName,PathName] = uigetfile('*.xls','Sélectionnez les fichiers excel', 'MultiSelect', 'on');
    Dans ta boucle tu fais ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i_file = 1:length(FileName);
        m{i_file} = xlsread(fullfile(PathName, FileName{i_file}));
        C{i_file} = textscan(FileName{i_file}, 'parcours_1_%1d');
    end

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    En effet, excuse-moi pour cette erreur stupide de ma part. En revanche malgré cela mon graphe ne fonctionne pas. Mais les C{j} eux sont bien enregistrés.

    ??? Error using ==> plot
    Conversion to double from cell is not possible.
    Sachant que la suite de mes C{j} peut être non linéaire. C'est l'objectif.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Le retour de textscan est un tableau de cellules. Donc déjà C est un tableau de cellules, mais C{i_file} aussi.
    Pour accéder à la valeur numérique, il faut donc mettre un autre jeu d'accolades :
    Prend bien le temps de regarder le contenu de tes variables.

  13. #13
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    J'ai essayé avec ta formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for j=1:i_file
     
        A{j}
        plot(C{i_file}{j},A{j},'.r')
     
    end
    Le plot ne fonctionne toujours pas mais il y a du mieux (tout les points sont centrés sur la première valeur d'abscisse si je met (C{i_file}{1} et sinon il y a un message d’erreur
    ??? Index exceeds matrix dimensions.
    . Pourtant j'aurais cru que ça n'aurais pas posé de problème.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    Prend bien le temps de regarder le contenu de tes variables.
    Regarde bien ce que retourne chaque C{i_file}.

    Et MA formule c'est avec 1 et pas j

    Sinon pourquoi faire deux boucles ? Tu fais quelque chose entre ? Si non je vais me répéter
    Citation Envoyé par Winjerome Voir le message
    Je me pose toujours la question sur l'utilité de garder autant de tableaux de cellules à la place de simples tableaux locaux à la boucle

  15. #15
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    C{1,1}=1 et C{1,2}=2 donc a priori pas de problème au niveau de cette variable.
    Elle enregistre bien les n° de mes fichiers.

    J'ai bien utilisé C{i_file}{1} dans mon plot hélas..

    Je stocke les tableaux de cellules si je veux effectuer justement d'autres calculs dessus..

  16. #16
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    J'ai bien utilisé C{i_file}{1} dans mon plot hélas
    Tu peux nous montrer le code entier, pour nous montrer où tu en es, et le message d'erreur associé s'il c'est le cas?

  17. #17
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    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
    24
     
    %============================= CHARGEMENT DES FICHIERS ======================
     
    [FileName,PathName] = uigetfile('*.xls','Sélectionnez les fichiers Excel', 'MultiSelect', 'on'); % pour créer une liste de nom de fichiers à ouvrir
    % Sélectionner les fichiers dans l'ordre souhaité inverse pour qu'ils apparaissent
    % dans l'ordre dans la cellule sous MATLAB
    for i_file = 1:length(FileName);
        m{i_file} = xlsread(fullfile(PathName, FileName{i_file}));
        C{i_file} = textscan(FileName{i_file}, 'parcours_%1d');
    end
     
    C1=50.36
    C2=39.44
     
    for j=1:i_file
        t{j} = m{j}(:,1);
        T(j) = t{j}(end); 
        A{j} = T(i)+C1*log10(t{j}/C2);
     
    % Affichage 
    figure(1)
    hold on,
        plot(C{i_file}{1},A{j},'.r')
    end
    tous les points sont centrés sur la première valeur d'abscisse si je mets C{i_file}{1} .

  18. #18
    Invité
    Invité(e)
    Par défaut
    Rajoute un hold on avant ta boucle

    [EDIT] Suite à la modification de ton code.
    Que cherches-tu à tracer précisément ici ?
    À noter que tes C{i_file}{1} représentent un unique point d'abscisse. Tu traces donc les points
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    C{i_file}{1}    A{j}(1)
    C{i_file}{1}    A{j}(2)
    ...
    C{i_file}{1}    A{j}(end)
    Remarque :
    Tu peux sortir le lignes
    de ta boucle, en les mettant juste avant.
    Dernière modification par Invité ; 28/03/2013 à 14h45.

  19. #19
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    Rajoute un hold on avant ta boucle
    J'en ai un déjà dedans milles excuses pour cet oubli. je dois en rajouter un à l'extérieur ?

  20. #20
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Tu ne voudrais pas plutôt écrire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot(C{j}{1},A{j},'.r')
    ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Extraction de données sur des fichiers excel
    Par iupgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 13h53
  2. Enregistrement d'un fichier Excel par automation
    Par tiopan dans le forum Access
    Réponses: 2
    Dernier message: 04/12/2003, 19h57
  3. Sauvegarde fichier excel
    Par tiopan dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/10/2003, 13h36
  4. [Turbo Pascal] Utiliser un fichier Excel
    Par Lady dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 09/03/2003, 20h34
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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