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 :

[fprintf] Plusieurs formats de données


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 12
    Par défaut [fprintf] Plusieurs formats de données
    Bonjour à tous,

    J'aimerais pouvoir écrire un tableau de cellules dans un fichier .txt. Mon tableau de cellules comporte 33 colonnes et les formats de données sont soient des chaînes de caractères, des entiers ou des réels à 3 décimales. Voici le code que j'ai fait pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      fid = fopen([repertoireSorties 'Results.txt'], 'w');
    for line = 1 : size(Tab,1)
        for column = 1 : size(Tab,2)
            fprintf(fid, '%s\t', Tab{line,column,5});
        end
        fprintf(fid, '\n');
    end
    fclose(fid);
    fclose all ; 
    fprintf(' Done !\n');
    Le code marche. J'ai bien un fichier .txt mais j'ai des symboles bizarres qui apparaissent dans certaines colonnes. Les entiers ne s'affichent pas aussi.
    Est-ce que j'aurais dû spécifier le format de chaque colonne ?

    Merci pour votre aide.
    Marine

  2. #2
    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 : 41
    Localisation : France

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

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

    Tel que tu l'as spécifié FPRINTF n'écrit que des chaines de caractères, il effectue donc des conversions sur tes valeurs numériques ce qui te donne des caractères indésirables...

    Pour spécifier un entier, tu peux utiliser %d et %f pour un flottant (regarde dans la doc de FPRINTF, tous les formats possibles sont décrits).

    Pour te faciliter la vie, comme tu as un grand nombre de colonnes, tu peux utiliser la fonction REPMAT pour construire le format, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fmt = ['%s\t', repmat('%d\t',1,4), repmat('%f\t',1,3), '\n'];
    permet de définir un format avec une colonne de String, 4 colonnes d'entiers et 3 colonnes de flottants...

    Enfin, tu n'as pas besoin d'utiliser de boucle avec FPRINTF, une fois le bon format défini, tu peux utiliser FPRINTF de cette façon là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Tab = Tab'; % Penser à transposer le tableau de cellules avant FPRINTF
    fprintf(fid, fmt, Tab{:});
    Duf

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 12
    Par défaut
    Bonjour,

    Merci beaucoup pour votre réponse. J'ai essayé la commande repmat. Le problème est que j'ai des en-têtes au format chaînes de caractères à chaque colonne. Donc en spécifiant le formant entier pour une colonne d'entiers j'ai un pb avec l'en-tête correspondant. Voici mon code pour mon tableau de cellules à 32 colonnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    fid = fopen([repertoireSorties 'Results.txt'], 'w');
     
    fmt = [repmat('%s\t',1,2), repmat('%0.3f\t',1,3), repmat('%d\t',1,2),...
    '%s\t','%d\t','%0.3f\t','%s\t','%d\t','%0.1f\t', repmat('%0.3f\t',1,6), '%s\t', repmat('%0.3f\t',1,2),...
    '%d\t', repmat('%0.3f\t',1,2),'%d\t', repmat('%0.3f\t',1,4),'%d\t','%s\t','%d\t','\n'];
     
    TabState5 = TabState(:,:,5)';
     
    fprintf(fid, fmt, TabState5{:});
    Merci pour votre aide.
    Marine

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

    Rien ne t'empêche d'ajouter tes entêtes avec une autre ligne FPRINTF au début...
    D'où vient ton problème?

Discussions similaires

  1. Imprimer automatiquement fichiers de plusieurs formats
    Par lutin511 dans le forum Windows
    Réponses: 5
    Dernier message: 07/12/2005, 18h38
  2. Format de données en sortie d'une procédure stockée
    Par Martin Sylvie dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/02/2005, 12h02
  3. pB format de données
    Par calamity_jane dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 12/10/2004, 08h33
  4. triggers sur plusieurs bases de données
    Par Shabata dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/05/2004, 10h02
  5. Réponses: 4
    Dernier message: 04/12/2003, 08h12

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