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 :

Afficher la colonne et ligne à chaque itération


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 Afficher la colonne et ligne à chaque itération
    Bonjour;j'ai affecté les données numériques d'un fichier text dans un tableau de cellule. Pour chaque itération j'affiche l'état du transfert du fichier ainsi sa taille. Lors de l'affichage la dimension du fichier lu n'est pas bonne.Donc voila:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    disp(['FILE ALLOCATION NUMBER:' num2str(i) ' IS COMPLETED...THE SIZE IS :' num2str([nLines nCols])]);
    j'aurais ça:
    FILE ALLOCATION NUMBER:1 IS COMPLETED...THE SIZE IS :2050 1441
    FILE ALLOCATION NUMBER:2 IS COMPLETED...THE SIZE IS :4100 1441
    FILE ALLOCATION NUMBER:3 IS COMPLETED...THE SIZE IS :6150 1441
    FILE ALLOCATION NUMBER:4 IS COMPLETED...THE SIZE IS :8200 1441
    .......

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    quelle est la question? Si il y a un problème de dimensions, c'est que le problème vient de la lecture du fichier, non?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  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
    Quelle est la question? Si il y a un problème de dimensions, c'est que le problème vient de la lecture du fichier, non?
    Oui c'est ça, mais pourquoi ce problème, les fichiers nommés Test1, Test 2..., Testd sont lus aléatoirement!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PathName = uigetdir;
    d = dir(fullfile(PathName,'*.txt'));
    A = cell(numel(d),1);
    nLines = 0; delimiter = sprintf('\t'); 
    for i = 1:numel(d)
        A{i} = dlmread(fullfile(PathName, d(i).name),'\t',2,1); 
    end

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Je vais me répéter mais quel est la question précisément? Quelles sont les dimensions des fichiers que tu souhaiterais voir afficher? 2 lignes et 1 colonne?

    Ce qui serait bien, c'est que tu nous donnes toutes les informations d'un coup : ton code complet, le résultat du code, le résultat que tu souhaites, un ( ou des) exemple(s) de fichier(s), et la question précise!
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  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
    Désolé si j'etais pas claire Bon je voudrais pour chaque itération, affecter le contenu numérique de fichiers textes de taille variable dans un tableau de cellule A(d,1) et afficher sa taille (ligne colonne). Mon problème c'est que je trouve la taille du fichier désirer n'est pas identique à celui sauvegardé. Finalement, en vérifiant dans les cellules, on dirait que la lecture des fichier n'a pas été dans l'ordre, alors que les données sont bien numérotés de 1:d. le '2,1' signifie que je saute une 1 colonne et 2 lignes puisque la commande dlmread ne prend pas en charge les caractères. Mon code est :
    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
    PathName = uigetdir;
    d = dir(fullfile(PathName,'*.txt'));
    A = cell(numel(d),1);
    nLines = 0; delimiter = sprintf('\t'); 
    for i = 1:numel(d)
     % Identify the rows and columns of text settings file
        fid = fopen(fullfile(PathName, d(i).name),'rt'); 
    while (fgets(fid) ~= -1),
        nLines = nLines+1; 
    end
        fclose(fid);
        fid = fopen(fullfile(PathName, d(i).name),'rt');
        Lines = fgets(fid);
        nCols = numel(strfind(Lines,delimiter)) + 1;
        fclose(fid);
        A{i} = dlmread(fullfile(PathName, d(i).name),'\t',2,1); 
    disp(['FILE ALLOCATION NUMBER:' num2str(i) ' IS COMPLETED...THE SIZE IS :' num2str([nLines nCols])]);
    end
    Donc au lieu d'avoir une taille 1200x4078 j'aurais une taille d'un autre fichier, et secundo au prochaine itération le nombre de lignes depasse la taille maximal des lignes qui est 2048.

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par callofduty Voir le message
    Finalement, en vérifiant dans les cellules, on dirait que la lecture des fichier n'a pas été dans l'ordre, alors que les données sont bien numérotés de 1:d.
    As-tu vérifié le contenu de la variable d pour avoir dans quel ordre sont lus les fichiers? (regarde d(i).name pour connaitre le nom du ième fichier)

    A quoi sert le code avec open, fgets, etc? Pourquoi ne pas laisser juste la ligne avec dlmread?

    Et à chaque itération, tu ne réinitialises pas nLines, tu obtiens donc le nombre de lignes cumulées de tous tes fichiers.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  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,je trouve un peu bizar une lecture aléatoire!à la place de test29 je trouve test9. Pour fopen j'ai cru que je dois tout d'abord ouvrir le fichier. Sinon je peux avoir votre code proposé. Dans la variable de structure d voila ce que j'ai:
    d(1,1)=test1
    d(2,1)=test10
    d(3,1)=test11
    ....
    d(12,1)= test2
    d(13,1)=test20
    .....
    d(22,1)=test29
    d(23,1)=test3
    ......
    d(29,1)=test9

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Il n'y a pas de lecture aléatoire! L'ordre des fichiers obtenus avec la fonction dir s'explique surement avec le nom de tes fichiers (que nous ne connaissons pas en passant). Le meilleur moyen pour que la lecture se fasse correctement, c'est d'utiliser une nomenclature du genre : text00i.txt ou i est le numéro du fichier (le nombre de 0 dépend du nombre de fichier). Par exemple text9.txt devient text009.txt, text29.txt devient text029.txt. En adoptant cette nomenclature, l'ordre des fichiers avec dir devrait être bon.

    Il te suffit de tout supprimer à l'intérieur de la boucle et de ne garder que la ligne avec dlmread. Et il te suffit d'afficher les dimensions de A{i} pour vérifier.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  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
    L'ordre des fichiers obtenus avec la fonction dir s'explique surement avec le nom de tes fichiers (que nous ne connaissons pas en passant).
    d(1,1)=test1/d(2,1)=test10/d(3,1)=test11..../d(12,1)= test2/d(13,1)=test20.....
    /d(22,1)=test29/d(23,1)=test3....../d(29,1)=test9.
    En ajoutant le 00, le problème est bien résoluje dois me débrouiller donc pour adapter cette ligne à ce principe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    movefile(['test' num2str(F) '.txt'],'New_DATA_FINAL');
    Sinon pour affichage de la dimension, j'ai pas bien compris!Donc je garde uniquement la boucle for avec dlmread,comment faire pour afficher la dimension de A(i) apres chaque itération?

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par callofduty Voir le message
    Donc je garde uniquement la boucle for avec dlmread,comment faire pour afficher la dimension de A(i) apres chaque itération?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  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, size! je l'ai déjà utilisé avant et ça n'a pas marché, surement il y'avait une erreur quelque part. Si je comprend bien sa sera donc tout simplement ç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)    
        A{i} = dlmread(fullfile(PathName, d(i).name),'\t',2,1);
        [nLines nCols]=size (A{i,1});
    disp(['FILE ALLOCATION NUMBER:' num2str(i) ' IS COMPLETED...THE SIZE IS :' num2str([nLines nCols])]); 
    end

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [nLines nCols] = size(A{i});
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  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
    Bonsoir, merci magelanjust une question si vous me permettez! dans le cas ou je veux tout affecter (valeurs numériques + les deux premières lignes de chaine de caractéres). Est il obligatoire de faire 3 lectures (donc 3 variables) pour un seul fichier?y'a t'il un moyen plus simple pour avoir le tous en une seul fois comme le fait la commande dlmread pour les données numériques ce qui rend par la suite l'accé à une variable plus facile.

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Tu peux essayer la fonction importdata mais si la première colonne contient des caractères, cela va poser problème. Sinon, il faut utiliser les fonctions de bas niveau fopen, fgets, fclose.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  15. #15
    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, vraiment désolé pour le retatd Bon soit disant j'ai ça dans un fichier text:
    #1 #2 #3... #n
    time 22:34 34:10 35:17..... 59:00:13
    1 2.0 123.00 43.90.... -19.08
    ..... .... .... .... ....
    .... ..... .... ..... ......
    1275 -98.09 0.04 32.09 33.090
    Avec dlmread je peux uniquement affecter les valeurs numériques et vraiment rapide. Je viens de tester importdata et je la trouve un peu gourmande en terme de temps et j'ai eu 3 variables. Est il possible d'avoir le tous en un seul tableau?

  16. #16
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Comment as-tu utilisé importdata pour avoir 3 variables? Peux-tu nous montrer le code?

    Tu peux toujours concaténer ces variables dans une structure ou un tableau de cellules.

    Pour ce qui est du temps d'exécution, la seule solution est de coder une fonction spécifique de lecture qui est adapté au format de tes fichiers en utilisant les fonctions de bas niveau (fopen, fscanf, fclose).
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  17. #17
    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 Magelan, donc voila j'ai appliqué simplement ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x=importdata('new_test001.txt',' ');
    le tous donne une dimension de 2050x1 (vecteur) alors que c'est pas le cas. A la place de ' ' j'ai mis '\t' ça m'a donné:
    data: <2048x1441>double
    textdata: <2x1441 cell>
    colheader: <1x1444 cell>

  18. #18
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    x est une structure de données contenant 3 champs. Je ne vois qu'une seule variable : x.

    Dans tous les cas, tu ne peux pas mélanger des chaines de caractères et des valeurs numériques dans un tableau classique. Pour cela et comme déjà dit au-dessus, il faut utiliser une structure (comme celle renvoyée par importdata) ou un tableau de cellules.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  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 Magelan, j'ai pas compris pourquoi c'est pas possiblealors que les tableau de cellules sont bien adaptés pour stocker n'import qu'elle type de variable. Donc, est impossible d'avoir le tout en un seul affichage (tableau classique). Sinon peut tu m'offrir un code svp pour bien lire ce genre de fichier? merci

  20. #20
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par callofduty Voir le message
    Bonjour Magelan, j'ai pas compris pourquoi c'est pas possiblealors que les tableau de cellules sont bien adaptés pour stocker n'import qu'elle type de variable. Donc, est impossible d'avoir le tout en un seul affichage (tableau classique).
    Tu peux lire ton fichier comme une seule chaine de caractère que tu auras alors dans une variable.
    Je ne comprends pas pourquoi tu veux regrouper tout dans la même variable. Quel est le problème avec ton code actuel?
    Citation Envoyé par callofduty Voir le message
    Sinon peut tu m'offrir un code svp pour bien lire ce genre de fichier? merci
    non. Même si j'avais compris ce que tu souhaites faire, je ne suis pas là pour faire ton boulot à ta place.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

Discussions similaires

  1. Afficher les colonnes en ligne
    Par shaun_the_sheep dans le forum SQL
    Réponses: 9
    Dernier message: 26/04/2018, 14h29
  2. Afficher les colonnes en lignes
    Par villegente dans le forum SQL
    Réponses: 4
    Dernier message: 23/08/2011, 15h03
  3. Réponses: 3
    Dernier message: 26/07/2010, 12h12
  4. Requête SQL : Afficher les colonnes en ligne, et vice versa
    Par paflolo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 17/03/2009, 09h16
  5. Matrices : afficher le nom des lignes et colonnes
    Par Luke58 dans le forum Débuter
    Réponses: 3
    Dernier message: 17/02/2009, 13h52

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