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 :

Tableaux de cellules en .txt


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 43
    Points
    43
    Par défaut Tableaux de cellules en .txt
    Je voudrais exporter des tableaux de cellules en .txt a partir de MATLAB

    On effet, mon tableau de cellule se présente sous forme de de colonnes avec en premières lignes, les titres des colonnes puis des nombres:

    ' ID'	'mean'	'Intensity '	'std'	'HA mean'
    0	58419	1043,19640000000	1106	972
    1	73811	858,267460000000	895	825
    7	205889	1806,04380000000	2129	1629
    8	73044	1074,17650000000	1201	990
    9	108074,010000000	1029,27620000000	1120	958
    10	127078	962,712100000000	1030	896
    11	46618	1456,81250000000	1526	1372
    12	165397	1008,51830000000	1138	914
    13	150576	1167,25590000000	1281	1051
    14	132898	1208,16370000000	1437	1039
    15	121709	1398,95400000000	1516	1268
    20	75436	1300,62070000000	1510	1111
    21	197000	1313,33340000000	1465	1186
    22	168268	1294,36930000000	1597	1121
    J'ai essayé fprintf mais il ne faut pas que ce soit des "cell"
    La version de MATLAB que j'ai ne présente pas la fonction cell2table et je suis un peu perdue.

    Quelqu'un aurait une idée? Je vous en serai très reconnaissante.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    J'arrive à sauvegarder sans aucun problème sous format.XLS mais j'ai besoin de les avoir aussi en format .txt et ayant plein de données à traiter j'aimerai bien ne pas à avoir à rouvrir Excel et sauvegarder en .txt.

    Merci de votre aide

  3. #3
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    Tu peux passer par la fonction fprintf tout de même.

    Par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    m(1)={'pouetpouet'}
    m(2)={'blabla'}
    for i=1:numel(m)
        fprintf('%s\n',m{i})
    end

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Bonjour, merci pour votre réponse,

    j'ai en effet déjà essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf ('%s\n', tabexport{1})
    mais j’obtiens cette erreur :
    ??? Error using ==> fprintf
    Function is not defined for 'cell' inputs.
    tabexport est un tableau de cellules et tabexport{1} est une "matrice" avec en 1ere ligne des chaines de "char" (titre des colonnes) et après le reste sont des "doubles".

    Si quelqu'un a des idées, je suis preneuse.

    Merci d'avance

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

    Tes données sont -elles formées ainsi ?
    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
    tabexport = [...
      {'ID'    'mean'   'Intensity '   'std'    'HA mean'}
        num2cell([...
        0        58419    1043.1964      1106       972
        1        73811    858.26746       895       825
        7       205889    1806.0438      2129      1629
        8        73044    1074.1765      1201       990
        9    108074.01    1029.2762      1120       958
        10      127078     962.7121      1030       896
        11       46618    1456.8125      1526      1372
        12      165397    1008.5183      1138       914
        13      150576    1167.2559      1281      1051
        14      132898    1208.1637      1437      1039
        15      121709     1398.954      1516      1268
        20       75436    1300.6207      1510      1111
        21      197000    1313.3334      1465      1186
        22      168268    1294.3693      1597      1121])]
    tabexport = mat2cell(tabexport, size(tabexport,1), ones(1,size(tabexport,2)))
    ?
    Le tout est d'obtenir le contenu de chaque niveau de cellule afin de se retrouver au final des valeurs numériques ou chaines.
    Ici tabexport{1} est aussi un tableau de cellules :
    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
    >> tabexport{1}
     
    ans = 
     
        'ID'
        [ 0]
        [ 1]
        [ 7]
        [ 8]
        [ 9]
        [10]
        [11]
        [12]
        [13]
        [14]
        [15]
        [20]
        [21]
        [22]
    Il faut donc encore descendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >> tabexport{1}{1}
     
    ans =
     
    ID
     
    >> tabexport{1}{2}
     
    ans =
     
         0

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Ah super,

    tabexport est composé de 3 cellules et chacune de ces cellules est du type que vous avez décrit. Il y a donc un étage de plus dans l'arborescence

    J'étais bien parti sur l'idée de tout mettre en chaine de char ou en valeur numériques avec quelquechose du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    % la 1ere ligne est traduite en chaine
    B= cellstr(tabexport{1}(1, :));
     
    % et apres, on traduit le reste de la matrice en chaine ( mais cela ne focntionne pas!!!!!)
    for i=2:size(tabexport{1},1)
    C=cellstr(tabexport{1}(i, :));
    end
     
    %puis on concatène
    tabexport1 = [B;C];
    le hic , c'est que la boucle ne fonctionne pas.


    J'ai essayé de faire autrement avec tout en numérique avec cell2mat mais la 1ere ligne est bizzare.


    MErci de votre aide

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par gegon Voir le message
    tabexport est composé de 3 cellules et chacune de ces cellules est du type que vous avez décrit. Il y a donc un étage de plus dans l'arborescence
    Pourrais-tu montrer la représentation exacte de tabexport ? Éventuellement ce qui sert à le générer ? Que l'on se fasse une idée réelle de ce qu'il contient...

    Ensuite, que veux-tu obtenir précisément ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Alors pour essayer d’être claire et précise, je joins un fichier : tabexport.docx

    pour la petite explication, tabexport est un tableau de cellules (3 cellules en ligne). Chaque cellule représente une "matrice" avec en première ligne, le titre des colonnes puis en dessous les nombres associés.

    J’espère que c'est compréhensible.

    ET avec tout cela, je veux exporter les 3"matrices" dans 3 fichiers .txt différentstabexport.docx

    J'ai tout a fait réussi à les exporter sous plusieurs fichiers Excel ou même un seul fichier Excel avec plusieurs onglets mais je n'arrive pas à le faire en .txt.

    En espérant avoir été claire

  9. #9
    Invité
    Invité(e)
    Par défaut
    Tu ne peux pas TOUT concaténer au sein d'un même tableau, ce n'est pas possible.

    Tu peux commencer par prendre les titres, (cellstr ne sert à rien dans ton cas : ce sont déjà des cellules)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    titres =  tabexport{1}(1, :);
    puis en retirer un tableau numérique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    donnees = cell2mat(tabexport{1}(2:end, :))
    il te suffit alors d'effectuer l'écriture des deux séparément

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Euh..., ""il te suffit alors d'effectuer l'écriture des deux séparément"" signifie que je peux sauvegarder en 2 temps sur le même fichier .txt pour avoir le titre des colonnes puis les données (comment?) ou même ça c'est impossible?

    Je viens de penser a quelque chose qui serait plutôt lourd je trouve, mais bon.. Comme je suis arrivée à les sauvegarder en .xls ( et pas en .txt), est ce qu'avec MAtlab, je peux reouvrir ces fichiers.xls et les resauvegadrer en .txt (c'est farfelu mais bon si ça marche!)?

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par gegon Voir le message
    Euh..., ""il te suffit alors d'effectuer l'écriture des deux séparément"" signifie que je peux sauvegarder en 2 temps sur le même fichier .txt pour avoir le titre des colonnes puis les données (comment?) ou même ça c'est impossible?
    Bien sûr, tu peux avoir autant d'appel de fprintf ou autre fonction d'écriture à la suite

    Citation Envoyé par gegon Voir le message
    Je viens de penser a quelque chose qui serait plutôt lourd je trouve, mais bon.. Comme je suis arrivée à les sauvegarder en .xls ( et pas en .txt), est ce qu'avec MAtlab, je peux reouvrir ces fichiers.xls et les resauvegadrer en .txt (c'est farfelu mais bon si ça marche!)?
    Avec le Contrôle d'Excel par MATLAB via Automation il t'est possible d'automatiser cela (méthode Workbook.SaveAs avec l'entrée FileFormat à xlText).

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Re bonjour,

    JE reviens vers vous car pour la première méthode, soit d'enregistrer deux fois avec fprintf d'abord la ligne de titre puis la matrice et ce , dans le même fichier .txt; voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    B1= cellstr(tabexport{1}(1, :));
    donnees1 = cell2mat(tabexport{1}(2:end, :));
    filename = ['Export',dish,'53BP1.txt'];
    fid = fopen (filename,'w');
     
    fprintf (fid,'%d,' ,B1)
    et j'obtiens l'erreur
    ??? Error using ==> fprintf
    Function is not defined for 'cell' inputs.

    LA 2eme solution étant de réouvrir un chiser.xls et de le reenregistrer sous.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    filename = ['Export',dish,'53BP1.xls'];
    filenametxt = ['Export',dish,'53BP1.txt'];
    xlswrite(filename, tabexport {1});
     
    Excel = actxserver('Excel.Application');
    Excel.Visible = true;
    Workbook = Excel.Workbooks.Open(fullfile(cheminMatlabResults,filename));
    name= [cheminMatlabResults filenametxt];
    Workbook.SaveAs (name)
    Workbook.Close;
    Excel.Quit;
    et le problème , c'est que cela me donne des hiéroglyphes!!
    Quelqu'un a une idée, pour une méthode ou une autre?

    Merci d'avance

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    Je me retourne encore vers vous car vous êtes d'une grand aide et toujours efficace!

    JE voudrais realiser la prmeiere methode en exportant à l'aide de fprint tout d'abors la premiere ligne (titre des colonnes) puis ajouter dans ce même fichier la matrice de valeurs.

    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
     
    % B1 represente la 1ere ligne (titre des colonnes)
    B1= char(tabexport{1}(1, :)); 
     
    % donnees1 represente la matrice de valeur
    donnees1 = cell2mat(tabexport{1}(2:end, :));
     
    %Creation du fichier .txt
    filename = ['Export',dish,'moi.txt'];
    fid = fopen (filename,'w');
     
    % ecriture dans ce fichier txt des titres et des valeurs
     
    fprintf (fid,B1);
    fprintf (fid,'\r\n' ,donnees1);
    malheureusement, en rien cela ne donne ce que j'espere obtenir.
    Quelqu'un aurait une idée?

    Merci d'avance de votre formidable aide.

Discussions similaires

  1. [Débutant] sauvegarder des tableaux de cellules en plusieurs fichiers .txt
    Par gegon dans le forum MATLAB
    Réponses: 7
    Dernier message: 25/01/2013, 15h05
  2. Réponses: 7
    Dernier message: 20/02/2008, 13h46
  3. [Tableaux] si cellule vide, alors cellule inexistante
    Par afrodje dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 31/07/2007, 13h21
  4. Réponses: 2
    Dernier message: 01/12/2006, 13h28
  5. [Tableaux] Taille cellule de tableau
    Par johnkro dans le forum Langage
    Réponses: 4
    Dernier message: 27/07/2006, 08h48

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