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] alignement des chiffres par rapport au dernier [Débutant]


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    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
    Par défaut [fprintf] alignement des chiffres par rapport au dernier
    Bonjour tous,

    je cherche à écrire un fichier texte qu'avec des colonnes de chiffres. Pour que ces colonnes soit bien rangées je voudrais que l'alignement se fasse par rapport au dernier nombre de chaque chiffre:

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      1,    2,   3,   4
      1,   23,   3,  34
    123,    4,  43,   3
    il me faudrait un espace entre le 1er chiffre de la colonne k+1 et la virgule de la colonne k


    et non pas:


    1, 2, 3, 4
    1, 23, 3, 34
    123, 4, 43, 3

    savez vous comment il est possible de faire ceci ?
    j'ai regardé dans l'aide de matlab mais je n'ai pas vu quelque chose qui pourrait faire cela en standard, je me trompe ..?

    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 317
    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 317
    Par défaut
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    M = [1 2 3 4
        1 23 3 34
        123 4 43 3]
     
    fmt = [repmat('%3d, ',1,size(M,2)-1) '%3d\n']
     
    fprintf(fmt,M.')

  3. #3
    Membre éprouvé
    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
    Par défaut
    en effet ca fonctionne, merci

    => si j'ai bien compris 3 est le nombre de chiffres qui est considéré avant la virgule, donc meme si on tape 1 matlab compredra 001 ?

    ps: pourrais tu me donner quelques explications car ça me parait un peu complexe tous cela...

  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 317
    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 317
    Par défaut
    Tout est dans la documentation de la fonction FPRINTF (voir le chapitre Flags)

  5. #5
    Membre éprouvé
    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
    Par défaut
    ok, merci DUT

    edit:

    en fait c'est plus le repmat qui me gene et le nombnre d'arguments que l'on met dans fprintf: une matrice?

  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 317
    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 317
    Par défaut
    On utilise REPMAT ici car il n'y a pas de virgule à la fin de la ligne.

    Il faut donc que le format soit %3d, %3d, %3d, %3d\n et non pas %3d, %3d, %3d, %3d,\n

    On peut aussi passer la matrice en entier dans la fonction PRINTF. MATLAB prends alors les valeurs colonnes par colonne (d'où la nécessité de faire la transposée).

    On peut lire dans la documentation :
    The fprintf function is vectorized for nonscalar arguments. The function recycles the format string through the elements of A (columnwise) until all the elements are used up. The function then continues in a similar manner through any additional matrix arguments.
    Une autre solution consiste à utiliser DLWRITE comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dlmwrite('test.txt',M,'delimiter',',','precision','%3d');

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

Discussions similaires

  1. Centrer des données par rapport à un texte "parent"
    Par firejocker dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 08/01/2007, 15h44
  2. Réponses: 9
    Dernier message: 04/01/2007, 11h58
  3. remplacer des chiffres par des lettres, & vis versa
    Par Argorate dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/08/2006, 19h36
  4. [CSS] Aligner le texte par rapport aux puces de listes
    Par Invité dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 20/11/2005, 10h35
  5. [débutant]Desactiver des champs par rapport a un select
    Par Pymm dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/02/2005, 16h24

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