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 :

écriture de données dans un fichier


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 8
    Points : 6
    Points
    6
    Par défaut écriture de données dans un fichier
    Salut, chers tous
    svp j'ai une préoccupation:

    J'ai utilisé la fonction préprogrammé ode15s ([t,Y] = ode15s(@f,[500 10^5],Y0);) pour la résolution d'équations différentielles (de type raide) de la forme dY/dt=f(x,t);
    J'ai donc obtenu une matrice Y de dimension 450x450, et j'aimerai juste extraire quelques colonnes significatives (par exemple Y(:,5); Y(:,17), Y(:,39), Y(:,73); Y(:,279) et Y(:,426)) pour inscrire dans un nouveau fichier avec la variable temps t.

    Mon problème: j'aimerai écrire dans un même fichier les couples (t, Y(:,i)), i=5, 17, ...,426 de sorte d'obtenir des vecteurs colonnes facilement exploitables.
    j'ai utilisé la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(nomdufichierdesortie, '%f\n', t,  Y(:,5), t, Y(:,17), t, Y(:,39), t, Y(:,73), t, Y(:,279), t, Y(:,426));
    mais j'obtiens plutôt un fichier dans lequel les valeurs se suivent et ne sont pas rangées en colonnes comme je le souhaite!

    j'ai essayé d'autres syntaxes en changeant même l'extension du fichier de sortie, mais toujours rien. Merci de m'aider!

    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
    19
    20
    21
    22
    23
    24
    fidCTA4 = fopen('TestCsvCta.txt', 'w');
    fidCTA44 = fopen('TestCsvCta_2.csv', 'w');
    fidCTA5 = fopen('TestDatCta.csv', 'w');
    %fidCTA6 = fopen('TestXlsxCta.xlsx', 'w');
    fidCTA6 = fopen('TestXlsxCta.xls', 'w');
    fidCTA7 = fopen('TestTxtCta.txt', 'w');
     
    fprintf(fidCTA5, '%i\n', t', Y(:,5*n+3));
    %fprintf(fidCTA4, '%i\n', t);
    %fprintf(fidCTA4, '%f\v', Y(:,5*n+2));
    fprintf(fidCTA4, '%f\n', t);
    fprintf(fidCTA44, '%f\n %f\n', [t Y(:,5*n+7)]);
    fprintf(fidCTA6, '%f\n', t,  Y(:,5), t, Y(:,17), t, Y(:,39), t, Y(:,73), t, Y(:,279), t, Y(:,426));
    fprintf(fidCTA7, '%f\v', Y(:,5*n+2), Y(:,5*n+5), Y(:,5*n+7));
    fprintf(fidCTA7, '%f\v', t);
    fprintf(fidCTA7, '%f\v', Y(:,5*n+2));
    fprintf(fidCTA7, '%f\v', t);
    fprintf(fidCTA7, '%f\v', Y(:,5*n+7));
     
    fclose(fidCTA4);
    fclose(fidCTA44);
    fclose(fidCTA5);
    fclose(fidCTA6);
    fclose(fidCTA7);

  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 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 : 53 166
    Points
    53 166
    Par défaut
    Comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(nomdufichierdesortie, '%f %f %f %f %f %f %f\n', t, Y(:,5), Y(:,17), Y(:,39), Y(:,73), Y(:,279), Y(:,426));
    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)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 8
    Points : 6
    Points
    6
    Par défaut vérification code
    Merci Jerome, ça marche!

    Je viens aussi de m'en rendre compte que c'est bloc-notes (mon soft de lecture par défaut) qui n'affiche que des blocs qui se suivent toujours. J'ai donc essayé d'ouvrir avec WordPad et Notepad++, et l'alignement est respecté.

    SVP j'ai deux petites préoccupations supplémentaires:

    -Lorsque j'utilise l'extension ".csv" pour pouvoir ouvrir le fichier de sortie avec Excel, tous les résultats s'inscrivent dans une même colonne du tableur excel, en respectant toujours la séparation. Je ne peux donc tracer une variable en fonction de l'autre dans excel!

    Ma question 1 : Est-ce possible, si oui comment faire pour que les différents blocs s'inscrivent dans différentes colonnes (avec excel)?

    -Question 2: Comment insérer au début de chaque bloc le nom de la variable mesurée?

    Merci d'avance...

  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
    salut

    en utilisant le séparateur ; dans ton csv, ca marchera nickel en l'ouvrant dans Excel ou avec xlsread

    Fabien

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 8
    Points : 6
    Points
    6
    Par défaut code
    ok Fabien,
    mais en utilisant le ; comme séparateur dans le code matlab, ça marquera "??? Error: File:", Unbalanced or unexpected parenthesis or bracket.

    et s'il faut séparer ainsi dans le fichier résultat, ce sera un travail fastidieux vu la taille de la 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 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 : 53 166
    Points
    53 166
    Par défaut
    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(nomdufichierdesortie, '%f;%f;%f;%f;%f;%f;%f\n', t, Y(:,5), Y(:,17), Y(:,39), Y(:,73), Y(:,279), Y(:,426));
    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)

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 8
    Points : 6
    Points
    6
    Par défaut code
    dans la format '%f %f %f %f\n', j'ai remplacé \n par \r\n ==> '%f %f %f %f\r\n', et ça semble résoudre mou problème avec Bloc-notes.

    J'ai même pensé à écrire un autre petit code qui prend en entrée les résultats du premier code après itérations, pour mieux les manipuler.

    Et pour l'insertion des noms des variables, t'as une idée de la procédure?

    Armand

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 8
    Points : 6
    Points
    6
    Par défaut vérification code
    Jerome, pour le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(nomdufichierdesortie, '%f;%f;%f;%f;%f;%f;%f\n', t, Y(:,5), Y(:,17), Y(:,39), Y(:,73), Y(:,279), Y(:,426));
    ça marche au niveau de l'écriture, j'obtiens bel et bien 7 colonnes, mais à regarder les résultats de plus prêt, je m'en rends compte que toutes les "n" premières lignes des 7 colonnes (sous matrice nx7) dans le fichier résultat ne concernent que la variable t. les n linges suivantes (sous matrice (n+1:2*n)x7) correspondent à la variable Y(:,5), ainsi de suite. Dans chaque colonne du fichier résultat se trouvent donc les valeurs de toutes les 7 variables qui m'intéressent!

    or je voudrais plutôt écrire, par exemple dans toute la première colonne du fichier de sortie (fichier résultat), uniquement les valeurs de à la première variable "t", ce qui correspond à la sous matrice nx1 dans le fichier résultat, et aussi écrire, dans toute la deuxième colonne, uniquement la 2ème variable "Y(:,5)" ==> la sous matrice nx2, ..., à la 7ème colonne, la 7ème variable "Y(:,426)" ==> la sous matrice nx7;

    Armand

  9. #9
    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 : 53 166
    Points
    53 166
    Par défaut
    J'ai effectivement répondu un peu n'importe quoi
    Je n'avais pas lu correctement ton premier message

    Essaie plutôt ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(nomdufichierdesortie, '%f;%f;%f;%f;%f;%f;%f\n', [t Y(:,5) Y(:,17) Y(:,39) Y(:,73) Y(:,279) Y(:,426)].');
    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)

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 8
    Points : 6
    Points
    6
    Par défaut validation code
    Merci, Jerome.

    j'ai oublié de le mentionner la dernière fois, mais le nouveau code a très bien marché. Cela me permettra d'évoluer plus vite. Merci.

    Armand

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

Discussions similaires

  1. Question bête sur l'écriture de données dans un fichier
    Par bourgui78 dans le forum Général Python
    Réponses: 9
    Dernier message: 27/03/2014, 14h23
  2. lecture et écriture de données dans un fichier
    Par follichon dans le forum C
    Réponses: 1
    Dernier message: 24/11/2011, 12h17
  3. écriture de données dans un fichier
    Par follichon dans le forum C
    Réponses: 3
    Dernier message: 13/11/2011, 23h35
  4. Réponses: 3
    Dernier message: 22/02/2004, 20h09
  5. Temps d'accès à des données dans un fichier
    Par TONIAPEL dans le forum Assembleur
    Réponses: 5
    Dernier message: 28/09/2003, 15h21

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