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 :

Renommer à l'aide d'une boucle data1,data2 data3 en test1 test2 test3 [Débutant]


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Par défaut Renommer à l'aide d'une boucle data1,data2 data3 en test1 test2 test3
    Bonjour

    J'aimerai renommer plusieurs fichier à l'aide d'une boucle.
    Je possède les fichier data1.txt data2.txt data3.txt et j'aimerai créer les matrices tast1 test2 test3 à partir des fichiers data.

    J'ai tenter plusieurs méthodes mes aucune n'aboutis.

    J'ai tenté un programme de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for n=1:3
    strcat(['test',num2str(n)])=dlmread(strcat('data',num2str(n),'.txt'),'\t');
    end
    J'obtiens le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     In an assignment  A(I) = B, the number of elements in B and
     I must be the same.
    Que dois-je faire pour obtenir ce que je veux?

    Merci

  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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Bonsoir,

    Pour faire celà, il faudrait utiliser EVAL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i_data = 1:length(data)
    eval(['test',num2str(n), '=dlmread([''data'',num2str(i_data),''.txt''],''\t'');')
    end
    Celà dit cette solution n'est pas à privilégier (la lisibilité du code n'est pas bonne et tu risques d'avoir des problèmes pour accéder à tes variables ensuite).

    Une autre solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i_data = 1:length(data)
    values.(['test', num2str(n)]) = dlmread(strcat('data',num2str(n),'.txt'),'\t');
    end
    Bon courage,
    Duf

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Par défaut
    Merci pour ton aide sa m'a permit d'avancer.

    J'ai utilisé la 2iéme méthode comme tu le suggéré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for n= 1:3
    values.(['test', num2str(n)]) = dlmread(strcat('data',num2str(n),'.txt'),'\t')
    end
    Sous Matlab j'obtiens la réponse suivant :
    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
    25
    26
    27
    28
    29
    30
     
    fileloop
     
    values = 
     
        test1: [1 2 3]
     
     
    values = 
     
        test1: [1 2 3]
        test2: [4 5]
     
     
    values = 
     
        test1: [1 2 3]
        test2: [4 5]
        test3: [6 7 8 9]
     
    >> values
     
    values = 
     
        test1: [1 2 3]
        test2: [4 5]
        test3: [6 7 8 9]
     
    >> test1
    ??? Undefined function or variable 'test1'.
    J'arrive a accéder au valeur en tapant values.test1

    Que dois je faire pour que test1 test2 test3 sois des vecteurs, (j'aimerai enlever values. et just avoir à taper test1 par exemple)?

  4. #4
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Citation Envoyé par matmuay Voir le message
    Que dois je faire pour que test1 test2 test3 sois des vecteurs, (j'aimerai enlever values. et just avoir à taper test1 par exemple)?
    La première méthode (celle avec EVAL)

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Par défaut
    merci beaucoup pour ton aide

    pour la suite j'aimerai faire une somme du genre somme=data1(1)+date2(1)+data3(1) (data'i' est un vecteur)

    J'ai fait une boucle du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cpt=0
    for i=1:3
        cpt=cpt+('data' int2str(n) '(1)')
    end

    Malheureusement cela ne marche pas que dois-je faire pour résoudre ce dernier problème?

  6. #6
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    AH, la démonstration de ce que je t'ai dis plus haut

    Construire des noms de variables avec EVAL n'est pas une bonne soution, tu vas galérer ensuite pour utiliser tes variables.

    Un exemple de comment tu pourrais faire (avec une structure):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for n= 1:3
    donnees(n).values = dlmread(strcat('data',num2str(n),'.txt'),'\t')
    end
    Ensuite tu peux aisément utiliser tes données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    somme = sum([donnees.values(1)]);
    A tester (je suis pas sur à 100% ) mais au pire une solution avec une boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    somme = 0;
    for i_donnee = 1:length(donnees)
    somme = somme + donnees(i_donnee).values(1);
    end

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

Discussions similaires

  1. Décrémentation à l'aide d'une boucle FOR-END
    Par fouad192007 dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/06/2007, 17h54
  2. Besoin d'aide pour une boucle
    Par lenneth666 dans le forum Prolog
    Réponses: 2
    Dernier message: 27/12/2006, 15h41
  3. [VBA-E] Ouvrir une série de fichiers à l'aide d'une boucle
    Par Tiki40 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/12/2006, 14h34
  4. Réponses: 6
    Dernier message: 15/09/2006, 08h54
  5. Renommer un fichier dans une boucle
    Par Thomas Carrere dans le forum C
    Réponses: 5
    Dernier message: 05/05/2006, 18h20

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