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 :

conversion cellule issues d'un fichier TXT


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 57
    Points : 33
    Points
    33
    Par défaut conversion cellule issues d'un fichier TXT
    Bonjour,
    j'ai besoin de lire des fichiers textes (le séparateur étant un ";") et de réorganiser les données sous forme de tableau pour pouvoir calculer des moyennes, écart-types...

    Le souci est que les données sont dans un tableau de cellules et je n'arrive pas à transformer ce tableau de cellule en matrice simple. Je pense que cela vient du fait que j'ai à la fois du texte et des chiffres.

    Voici mon code pour lire les fichiers TXT et les mettre sous forme de tableau:

    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]=uigetfiles('*.txt', 'Charger le Fichier TXT');
    for f=1:max(size(filename));
        filetxt=strcat(pathname,filename{f});
        X = textread(filetxt,'%s','delimiter',';');
        for i=1:90
            XX(1,i)=X(i,1);
        end
        countL=0;
        for j=91:180
            countL=countL+1;
            XX(f+1,countL)=X(j,1);
        end
    end
    for i=1:90
        Z(1,i)=cell2mat(X(1,i));
        Z(2,i)=cell2mat(X(2,i));
    end
    Je pense, malgré avoir consulté l'aide pour la fonction cell2mat, ne pas avoir bien compris comment l'utiliser... J'ai un message d'erreur et je ne vois pas d'u vient le problème...
    Merci d'avance.

  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 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 953
    Points
    52 953
    Par défaut
    Je ferais plutôt quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    filetxt = fullfile(pathname,filename{f});
    X = textread(filetxt,'%d','delimiter',';');

    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    filetxt = fullfile(pathname,filename{f});
    X = textread(filetxt,'%f','delimiter',';');
    Selon le type de données à récupérer

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 57
    Points : 33
    Points
    33
    Par défaut
    En fait j'ai essayé ces 2 solutions mais cela me renvoie un message d'erreur.
    Concernant le type de donneés, j'ai du texte, des espaces vides, des chiffres, des dates, heures... bref, c'est plutôt varié.

  4. #4
    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 953
    Points
    52 953
    Par défaut
    Montre nous quelques lignes du fichier ou bien attache le à un message (dans une archive zip ou rar si il est trop volumineux)

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 57
    Points : 33
    Points
    33
    Par défaut
    J'ai mis le fichier en pièce jointe de ce message.
    Merci de prendre du temps pour m'aider.

  6. #6
    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 953
    Points
    52 953
    Par défaut
    Effectivement c'est un peu tout mélangé la dedans

    Quels informations essayes-tu de retrouver ?
    Le nombre de champs par ligne est-il constant dans tout le fichier ?

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 57
    Points : 33
    Points
    33
    Par défaut
    Et oui, un peu mélangé...
    On a en fait 180 champs dans ce fichier.
    L'idée est de mettre la 1ère série de texte en 1ere ligne de colonne (soit 90 colonne ligne 1). C'est l'en-tête du fichier en fait.
    Et dans la seconde ligne, de mettre la valeur qui correspond à l'en-tête.
    Le nombre de champ est identique.

    Ex ligne 1 colonne 1 = champ n°1
    ligne 2 colonne1 = champ n°91

    Le petit code que j'ai fait fonctionne bien pour réorganiser les données comme ça.
    Mais vu que c'est sous forme de cellules, quand je veux faire des calculs je ne sais pas comment procéder, d'ou l'idée de convertir XX en matrice.

    Je sais pas si j'ai été clair...

  8. #8
    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 953
    Points
    52 953
    Par défaut
    Tu ne peux pas mettre à la fois des chaînes de caractères et des valeurs numériques dans un tableau.... c'est soit l'un soit l'autre.

    Ou alors il faut utiliser un tableau de cellules...

  9. #9
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 57
    Points : 33
    Points
    33
    Par défaut
    Donc je peux créer mon tableau XX comme base de travail puis aller chercher des infos dedans pour faire mes calculs ensuite? Mais comment faire mes calculs avec des cellules?
    Ayant plusieurs fichiers j'aurai donc plusieurs lignes (chaque ligne à partir de la seconde ligne correspondant aux données d'un fichier). Comment faire à partir de ce tableau de cellules pour calculer par exemple la moyenne des ligne 2 à max(ligne(XX)) de la colonne 10?

  10. #10
    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 953
    Points
    52 953
    Par défaut
    Et pourquoi ne pas écrire le format des 90 champs dans TEXTREAD.
    A première vue ça parait fastidieux mais tu récupérerais tes données dans le bon format (numérique ou chaîne de caractères au choix)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X = textread(filetxt,'%s%s%s%s%d%s%d%f%f%s...........','delimiter',';');

  11. #11
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 57
    Points : 33
    Points
    33
    Par défaut
    Effectivement ça peut etre une solution. Mais quel sigle correspond à mes caractère? Ou plutot, %s correspond à quoi exactement? de même pour %f, %d...
    Mais c'est vrai que c'est pénible à faire, mais bien plus pratique ensuite...

    Globalement, quel signe pour une chaine de caractère, quel signe pour une date (12/02/2001 par exemple), quel signe pour un "vide" et quel signe pour une valeur numérique?

  12. #12
    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 953
    Points
    52 953
    Par défaut
    Citation Envoyé par kariboubou Voir le message
    quel signe pour une chaine de caractère
    %s
    Citation Envoyé par kariboubou Voir le message
    quel signe pour une date (12/02/2001 par exemple)
    %s
    Citation Envoyé par kariboubou Voir le message
    quel signe pour un "vide"
    Peu importe c'est vide... tu peux toujours renseigner l'argument 'EmptyValue' de TEXTREAD.
    Ou mettre %s, %d ou %d en fonction de la valeur qui devrait être présente théoriquement
    Citation Envoyé par kariboubou Voir le message
    quel signe pour une valeur numérique?
    %d si c'est un entier, %f si c'est un réel

    Plus d'information dans la documentation de FPRINTF :

  13. #13
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 57
    Points : 33
    Points
    33
    Par défaut
    Je viens de tester cette solution mais cela ne semble pas fonctionner... Je vais continuer à creuser ça pour trouver une solution... Merci pour votre aide.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 57
    Points : 33
    Points
    33
    Par défaut
    Bonjour,
    j'ai finalement choisi l'option d'ouvrir mes txt dans excel et de les enregistrer en xls.
    Cela me permet de pouvoir travailler très facilement avec les données numériques par la suite dans matlab ([numeric, txt]=xlsread....).

    Merci pour ton aide Dut.
    Bonne journée.

  15. #15
    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 953
    Points
    52 953
    Par défaut
    Je ne vois pas bien l'intérêt d'Excel ici...

    Quel est le problème avec TEXTREAD ?

  16. #16
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 57
    Points : 33
    Points
    33
    Par défaut
    L'intérêt est d'avoir directement mes données numériques dans un format que je peut utiliser pour faire mes calculs ensuite. Car je ne sais pas utiliser les données numériques des cellules.
    La fonction cell2mat fonctionne pour une cellule mais pas quand je veux l'utiliser pour plusieurs cellules en même temps...
    Donc je fais comme ci-dessous, après avoir réenregistré mon fichier en .xls
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [filename, pathname]=uigetfiles('*.xls', 'Charger le Fichier XLS');
    tic
    for f=1:max(size(filename));
        filetxt=strcat(pathname,filename{f});
        [NUMERIC,TXT]=xlsread(filetxt);
        N(f,:)=NUMERIC(1,:);
        T(f,:)=TXT(2,:);
    end
    Taille_moy=mean(N(:,2));
    Surface_moy=mean(N(:,31));
    disp('fin fonction')
    toc

Discussions similaires

  1. Conversion d'un binaire en fichier .txt
    Par narmika dans le forum Langage
    Réponses: 0
    Dernier message: 20/09/2007, 14h59
  2. Réponses: 11
    Dernier message: 18/04/2007, 18h39
  3. conversion en masse de fichier txt en xls
    Par anisr dans le forum VBScript
    Réponses: 2
    Dernier message: 06/03/2007, 16h32
  4. Conversion fichier txt en xls
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/03/2007, 14h54
  5. [VBA - EXCEL] Pb de conversion fichier txt avec methode TextToColumns
    Par bicoun dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/02/2007, 10h46

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