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 :

mettre le contenu de ma cell dans un fichier texte [Débutant]


Sujet :

MATLAB

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut mettre le contenu de ma cell dans un fichier texte
    salut tous,

    j'ai un tableau de type CELL qui me donne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> table{1,1}(2:end)
     
    ans = 
     
        '5'    '34'    '3'    '1'    '110'    '139'    '108'    '106'
    je voudrais l'insérer directement dans mon fichier en le concatenant avec un string, j'ai donc fais ceci mais ça plante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fprintf(fid,[num2str(references(r)) table{d,r}(2:end) '\n']);
    du coup j'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char(table{d,r}(2:end))'
    mais ça me colle tous mes nombres alors que je voudrais que ça soit séparé ...

    pourriez vous me dire comment faire ?

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

    Aurais-tu un exemple de sortie que tu souhaites avoir?
    Je te renvoie à la documentation de FPRINTF ainsi qu'à cette discussion

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    en fait, comme tu le vois ci dessus, ma "CELL" contient un vecteur dont voici les composantes:

    '1' '5' '34' '3' '1' '110' '139' '108' '106'


    j'aimerai copier dans le fichier texte ces composantes en les séparant d'un espace, et en ne prenant pas en compte la première composante.

    on final ça devrait donner ceci dans mon fichier texte:

    5 34 3 1 110 139 108 106

    le soucis c'est que je n'arrive pas à le faire de manière optimisé, j'aurais tendance à passer par des boucles et d'autres trucs dans ce genre alors que je pense qu'il y a une solution très rapide pour cela avec matlab
    (surtout que le nombre de chiffre dans la ligne est variable et ça oblegerai de faire un test pour connaitre la taille de la ligne a copier...)

    ps(1): en fait la solution que j'ai donné avec "char" est pas mal mais il me manque les espaces entre chaques composantes

    ps(2): je vais jeter un oeil au lien que tu m'as donné, peut etre que j'y trouverai un element de reponse..

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ne parlais-tu pas aussi de concaténation avec un string?
    Bref, si ce n'est que cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(fid,'%s ',table{1,1}{2:end})

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci jerome ! (en effet c'etait que ça )
    j'avais zappé l'espace

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Jerome, j'ai encore une question à propos de ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fprintf(fid,'%s ',table{1,1}{2:end})
    j'ai bien compris que ça permet de mettre tous les string qu'il y a dans ma CELL dans un fichier texte. Par contre si je veux copier non pas les données mais les données toutes retranchées de 1, ciomment puis je faire rapidement sans passer par des boucles ou autre ?

    bien entendu ceci ne va pas marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fprintf(fid,'%s ',table{1,1}{2:end}-1)
    car on va pas retrancher 1 aux nombres mais aux code ASCII correspondant à mes string...
    j'ai essayé ceci aussi mais ça marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fprintf(fid,'%f ',str2num(table{1,1}{2:end})-1)

  7. #7
    Invité
    Invité(e)
    Par défaut
    Si tu souhaites effectuer cette opération de soustraction, il te faudra en effet faire la conversion, et quelle fonction sinon STR2DOUBLE n'est pas le mieux placée pour travailler sur un tableau de cellules?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci Jerome de ton aide.

    je viens de tester avec cette fonction mais je m'attendais à pouvoir faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    str2double(table{d,r}{2:end})
    pour traduite d'un coup tout le contenu des cellules mais matlab me rejete lachement en me disant:

    ??? Error using ==> str2double
    Too many input arguments.
    du coup, j'en deduis que la seule possibilité pour retrancher 1 à tous ces nombres:
    c'est de faire une boucle sur tous les nombres contenu et de faire un str2double sur chaque nombre ?
    je dis ceci car cette commande est la seule qui semble fonctionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    str2double(table{d,r}{2})
    dès que je dis que je veux un vecteur je me fais rejeter table{d,r}{2:end}

  9. #9
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Pour utiliser STR2DOUBLE sur plusieurs chaines de caractères, tu dois lui donner un tableau de cellules, de cette façon là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str2double(table{d,r}(2:end))
    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci DUF

    A+ et merci tous

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

Discussions similaires

  1. [PHP 5.4] Mettre le contenu d'un array dans un fichier
    Par aspkiddy dans le forum Langage
    Réponses: 9
    Dernier message: 06/03/2014, 22h56
  2. Mettre le contenu d'un StreamReader dans un label.text
    Par xav2303 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/05/2009, 12h19
  3. mettre le contenu d'une liste dans un fichier EXCEL
    Par john_wili dans le forum Jasper
    Réponses: 1
    Dernier message: 13/01/2009, 11h22
  4. Réponses: 8
    Dernier message: 13/04/2007, 11h17
  5. Réponses: 2
    Dernier message: 08/06/2006, 13h48

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