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 en format special dans un fichier


Sujet :

MATLAB

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut ecriture en format special dans un fichier
    Bonjour,

    Je me casse les dents depuis vendredi sur un probleme et je me decide maintenant a venir chercher un peu d'aide.

    Voila mon probleme :
    j'ai une matrice, par exemple :

    100 100 100
    100 0 100
    100 0 100

    Je souhaiterai que matlab me sorte un fichier data.txt d'interpretation de cette matrice comme suit :

    100*4 0*1 100*2 0*1 100*1
    traduction [valeur]*[nombre de fois que cette valeur est lu jusqu'a trouver 0]

    Pour le moment j'arrive a generer une sortie de fichier : de type 100*7

    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (P(k)==0)
            a=a+1
    end
     
    file = fopen('data.txt','w');
    fprintf(file,'%i%c%i',a,'*',100);
    fclose(file);
    Mais je ne parviens pas a trouver un algo qui s'arrete lorsque qu'il trouve 0 puis ecrit le nombre de 100 puis continu avec les zeros, s'arrete lorsqu'il trouve 100, ecrit le nombre de zero et continu jusqu'a la fin de la matrice.

    Quelqu'un aurait-il une idee d'algo pour ce probleme qui parait pas dure, mais la je donne ma langue au chat.

    Merci.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Salut,

    regarde de ce côté, ca devrait te donner des idées.

    http://www.developpez.net/forums/d89...zeros-vecteur/

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 58
    Points : 69
    Points
    69
    Par défaut
    Je vais pas écrire le code mais personnellement je le ferai comme suit:

    Boucle sur les élément de la matrice:
    1)stocker le premier nombre de la matrice: D = (0,100). Initialiser un compter à 1.
    2) Si l'élément suivant est égale à D --> Ajouter une unité à un compteur
    3) Si l'élément suivant est différent, tu écrit dans ton fichier l'élément D, plus le compteur, tu change D et tu restart le compteur à 1.

    Normalement tu devrais arriver au résultat voulu.

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    Merci a vous deux.

    Buide, j'ai essaye d'appliquer ton algo :

    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
    Nbr_of_cells=Nx*Ny;
    a=1;
    Perm2=P(1);
    file = fopen('data.txt','w');
     
    for k=1:Nbr_of_cells-1
     
    if (P(k+1)==Perm2)
            a=a+1;
     
       else fprintf(file,'%i%c%i',a,'*',Perm2);
             Perm2=0;
             a=1;
        end
     
    end
     
    fclose(file);
    sur cette matrice :

    100 100 100 100 100
    100 100 0 100 100
    100 0 0 0 100
    100 100 0 100 100
    100 100 100 100 100

    voici le resultat :
    7*100 1*0 1*0 1*0 4*0 1*0 1*0 2*0 1*01 *0 1*0 1*0 1*0 1*0

    Donc 7*100 et 1*0 est correct mais la suite est fausse. La bonne reponse serait : 7*100 1*0 3*100 3*0 3*100 1*0 7*100

    Il semblerait donc que ca fonctionne pour les deux premieres valeurs de k mais pas les suivantes.

    Une idee pour resoudre ca ?

    Merci encore

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 58
    Points : 69
    Points
    69
    Par défaut
    Citation Envoyé par DJEcalcul Voir le message
    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
    Nbr_of_cells=Nx*Ny;
    a=1;
    Perm2=P(1);
    file = fopen('data.txt','w');
     
    for k=1:Nbr_of_cells-1
     
    if (P(k+1)==Perm2)
            a=a+1;
     
       else fprintf(file,'%i%c%i',a,'*',Perm2);
             Perm2=0;
             a=1;
        end
     
    end
     
    fclose(file);
    La ligne Perm2=0 est fausse. Je te laisse réfléchir à la solution Relis bien ce que j'ai écrit
    Il faut aussi ajouter un printf à la fin (après la boucle). Puisque ta dernière itération ne sera pas imprimer sinon

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    Oui en effet, Merci Buide.

    Pour ceux qui en auraient besoin, voici la reponse qui fonctionne :

    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
    Nbr_of_cells=Nx*Ny;
    a=1;
    Perm2=P(1);
    file = fopen('data.txt','w');
    for k=1:Nbr_of_cells-1
        if (P(k+1)==Perm2)
            a=a+1;
        else fprintf(file,'%i%c%i',a,'*',Perm2);
             Perm2=P(k+1);
             a=1;
        end
    end
    fprintf(file,'%i%c%i',a,'*',Perm2);
     
    fclose(file);
    Merci Buide

    Question bonus, j'aimerai savoir si il existe un moyen (toujours en ecrivant dans le fichier) d'aller a la lligne au bout de par exemple de x informations.

    Par exemple au lieu d'avoir le fichier :

    5*100 2*0 8*100 3*0

    d'avoir

    5*100 2*0
    8*100 3*0

    Merci.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Bonjour,

    regardes la documentation sur fprintf et en particulier le tableau "Espace Characters".

    Christophe
    INCIA : MATLAB R2014a sous MAC OS 10.9.3

    Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par DJEcalcul Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    file = fopen('data.txt','w');
    Il est préférable d'indiquer à MATLAB que le fichier est de type texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    file = fopen('data.txt','wt');
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Dut Voir le message
    Il est préférable d'indiquer à MATLAB que le fichier est de type texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    file = fopen('data.txt','wt');
    Merci pour la nuance Dut.

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

Discussions similaires

  1. Ecriture d'une list() dans un fichier Pb d'optimisation
    Par sebastien2222 dans le forum Langage
    Réponses: 11
    Dernier message: 13/06/2006, 16h53
  2. ecriture d'un tableau dans un fichier
    Par hafid49 dans le forum C
    Réponses: 4
    Dernier message: 06/06/2006, 23h38
  3. Format décimal dans les fichiers XML
    Par wozzz dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 31/05/2006, 09h18
  4. Ecriture à une position donné dans un fichier
    Par xarius dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 29/05/2006, 16h05
  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