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 :

Ecriture texte et variables dans fichier .txt


Sujet :

MATLAB

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2012
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 97
    Points : 87
    Points
    87
    Par défaut Ecriture texte et variables dans fichier .txt
    Bonjour à tous,

    Mon problème est le suivant. Je dispose d'un vecteur de plusieurs colonnes que je souhaite imprimer dans un fichier texte. J'utilise pour cela la commande fprintf. Jusque là tout va bien. A ces données j'ajoute une entête, à savoir un nom pour chaque colonne, toujours avec la fonction fprintf. Là aussi, pas de souci.

    Admettons, pour l'exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    x = [1:1:100]';
    y = x.^2;
     
    resultats = [x y];
    entete2 = {'Colonne 1' 'Colonne 2'};
     
    filename = 'test.txt'; 
    fid = fopen(filename,'wt');
    fprintf(fid,'%s\t %s\n',entete2{:});
    fprintf(fid,'%6f\t %6f\n',resultats);
    fclose(fid);
    J'aimerais également ajouter dans une seconde entête placée tout en haut du fichier un mélange de texte et de variables rangés comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    entete1 = {'Carburant :' a;...
        'Pression :' b;...
        'Temperature :' c;...
        'Vitesse :' d};
    Où a, b, c et d représentent les valeurs respectives de Carburant, Pression, Temperature et Vitesse.

    Mais la fonction fprintf me renvoit le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error using fprintf
    Function is not defined for 'cell' inputs.
    J'en déduis qu'elle n'apprécie pas spécialement le format de entete1. Dois-je imprimé séparément le texte et les variables ou y a t-il une solution pour éviter d'en arriver là ?

    Autre chose également (qui n'a certes rien à voir avec le problème présenté ici mais je ne me voyais pas créer un autre sujet pour ça), est-il possible d'écrire sur plusieurs lignes dans l'éditeur les différents éléments d'une popupmenu lorsque ces derniers sont trop nombreux ? Ma popupmenu permet en effet l'affichage d'une liste d'une dizaine d'éléments aux noms assez longs. C'est juste purement esthétique mais ça fait un peu tâche d'avoir une ligne de code qui fait quinze kilomètres.

    Un grand merci d'avance.

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    entete = cell(n,3);
    entete1{1,1} = 'carburant';
    entete{1,2} = a;
    ...
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     cellfun(@(x) fprintf('%s\n',x), entete(:,1));
    fabien

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

    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    entete1 = { ...
        'Carburant :'   1;...
        'Pression :'    2;...
        'Temperature :' 3;...
        'Vitesse :'     4};
    entete1 = entete1.';
    fprintf('%s %d \n',entete1{:})

  4. #4
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    'tain, faut que j'arrête de me compliquer la vie !

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2012
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 97
    Points : 87
    Points
    87
    Par défaut
    J'avais oublié de préciser que mes variables a, b, c et d étaient à la fois des nombres mais aussi des mots. J'ai opté pour couper l'entête en plusieurs morceaux en adaptant le format en fonction des éléments à la façon de l'exemple de Winjerome. Merci à vous

    Concernant la question sur la popmenu, pas d'avis ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Concernant les longues lignes pour ton popup, oui c'est parfaitement possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    liste = {'une ligne' , ...
        'une autre ligne', ...
        'encore une autre', ...
        ['une ligne, '...
        'très longue ligne']};
    uicontrol('Style','popupmenu',...
        'String',liste)
    Sinon pour le premier exemple avec des mots :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    entete1 = { ...
        'Carburant :'   1;...
        'Pression :'    2;...
        'Temperature :' '3°C';...
        'Vitesse :'     '4 km/h'};
     
    entete1(:,2) = cellfun(@num2str, entete1(:,2), 'UniformOutput', false);
    entete1 = entete1.';
    fprintf('%s %s \n',entete1{:})

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2012
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 97
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    Sinon pour le premier exemple avec des mots :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    entete1 = { ...
        'Carburant :'   1;...
        'Pression :'    2;...
        'Temperature :' '3°C';...
        'Vitesse :'     '4 km/h'};
     
    entete1(:,2) = cellfun(@num2str, entete1(:,2), 'UniformOutput', false);
    entete1 = entete1.';
    fprintf('%s %s \n',entete1{:})
    Si j'ai bien compris, cellfun permet d'appliquer la fonction num2str à la deuxième colonne de l'entête, à savoir la transformer en chaine de caractères. Plus possible dans ce cas d'imposer un nombre de décimales si certains éléments de cette deuxième colonne sont des nombres ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Oui c'est bien cela (pour plus de détails, voir la FAQ Comment appliquer une fonction à chaque cellule ?)
    Comme fprintf, avec num2str tu as la possibilité de formater la chaîne.

  9. #9
    Membre régulier
    Inscrit en
    Décembre 2012
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 97
    Points : 87
    Points
    87
    Par défaut
    Merci beaucoup pour ces explications. Problème résolu !

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

Discussions similaires

  1. Ecriture de requêtes SQL dans fichier .TXT
    Par Kevfou dans le forum Langage
    Réponses: 11
    Dernier message: 19/10/2011, 17h59
  2. PHP ajout Texte dans fichier TXT
    Par malabarbe dans le forum Langage
    Réponses: 5
    Dernier message: 02/05/2008, 04h11
  3. Ecriture d'images dans fichier txt
    Par The Niceman dans le forum Images
    Réponses: 2
    Dernier message: 22/01/2008, 22h13
  4. [C++] lecture/ecriture dans fichier txt/binary
    Par vince3320 dans le forum C++
    Réponses: 6
    Dernier message: 28/09/2007, 18h00
  5. Réponses: 13
    Dernier message: 14/06/2003, 22h15

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