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 dans un fichier .txt


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Ecriture dans un fichier .txt
    Bonjour,

    J'ai un nouveau souci et je n'arrive pas à trouver ce que je cherche dans l'aide de Matlab.
    Je dispose d'un vecteur ligne du style :
    data_vect =

    2.6829 1.6450 101.0000 0.0134 2.0450 102.0000

    Ce vecteur est de type double array et il se trouve dans une boucle qui, à chaque fois que l'on boucle, écrase toutes ses valeurs et les remplacent par de nouvelles.
    En restant dans la boucle, je souhaite écrire ce vecteur sur une ligne dans un fichier .txt. J'utilise la fonction fprintf pour l'écriture dans le texte mais cela m'écrase les valeurs précédentes à chaque passage dans la boucle ce qui ne me laisse à la fin que les dernières valeurs du vecteur dans le fichier .txt.
    Je voulais donc savoir s'il existe une commande permettant de revenir à la ligne à chaque fois qu'il écrit. J'ai vu qu'il existait le paramètre \n mais lorsque je l'utilise il me met chaque valeur du vecteur data_vect à la ligne c'est à dire si on reprend le vecteur :
    2.6829
    1.6450
    101
    ....
    alors que je voudrais avoir un résultat du style
    2.6829 1.6450 101.0000 0.0134 2.0450 102.0000
    2.6824 2.8320 101.0000 0.0073 3.2310 102.0000

    En fait, je pense qu'il faut utiliser une commande juste après l'écriture dans le fichier .txt qui dit au curseur de ce fichier de revenir à la ligne comme çà, dès qu'il revient il écrira sur la ligne suivante la totalité du vecteur. Je cherchais aussi par rapport à la fonction fseek mais je ne vois pas comment lui dire de revenir à la ligne.
    Voyez-vous un moyen de le faire?
    Merci.

  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 316
    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 316
    Points : 52 949
    Points
    52 949
    Par défaut
    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    X = [2.6829 1.6450 101.0000 0.0134 2.0450 102.0000
         2.6824 2.8320 101.0000 0.0073 3.2310 102.0000];
     
    fid = fopen('data.txt','wt');
     
    for n = 1:2
        fprintf(fid,'%.4f %.4f %.4f %.4f %.4f %.4f\n',X(n,:));
    end
     
    fclose(fid);

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Tout d’abord, je tiens à souligner la rapidité avec laquelle vous répondez aux annonces et votre efficacité et vous en remercie.

    En ce qui concerne mon problème, je ne peux malheureusement pas récupérer les différentes valeurs que prend le vecteur data_vect dans une matrice X comme tu l’as fait. Pour mieux comprendre mon problème je vais expliquer comment j’obtiens ce vecteur. Je récupère des données fournies par un système d’acquisition par le biais d’un interfaçage en GPIB. Le système d’acquisition possède un certain nombre de voies de mesures et je le commande en lançant un balayage qui scanne chaque voie (ici il n'y a que 2 voies). Le résultat qu’il me retourne est sous la forme d’une chaîne de caractères séparés entre eux par une virgule. Ainsi, si on reprend l’exemple précédent. Pour un seul balayage j’obtiendrais :

    2.6829,1.6450,101.0000,0.0134,2.0450,102.0000

    (Les trois premiers nombres sont relatifs à la voie 101 (respectivement valeur mesurée, temps de mesure, numéro de voie) et les 3 derniers à la voie 102).

    Je commande le balayage par un timer prédéfini. Pour qu’il me retourne le résultat de chaque balayage, j’insère les commandes de lecture et de récupération des résultats dans une boucle while qui me permet d’arrêter l’acquisition lorsque je le veux (je ne connais donc pas le nombre de fois que ce vecteur changera). Dans cette même boucle while, je transforme la chaîne de caractères du résultat en un vecteur, le fameux data_vect. Et il faut absolument que, dans cette même boucle, j’écrive les différentes valeurs de data_vect sur une nouvelle ligne de mon fichier toto.txt (car les manips sont longues et si ça plante en cours de route il faut quand même que je puisse avoir toutes les valeurs qu'a pris vect_data écrites dans toto.txt avant le plantage).

    J'espère être assez clair dans mon explication.

  4. #4
    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
    Bonsoir,

    Moi je serais d'avis que dans ta boucle tu écrives ce genre de choses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    donnees = [donnees vecteur]
    Je m'explique :

    A chaque itérations, tu as un nouveau vecteur (enfin que tu crées).

    Si tu enregistres à chaque itérations les vecteurs à la suite des autres (en fait, tu crées ta matrice)

    Il ne te reste plus qu'à enregistrer non pas ton vecteur qui va écraser l'ancien mais plutôt l'ensemble de tes vecteurs (ta matrice) qui écraseras la précédente.

    Sinon, tu peux utiliser une variable supplémentaire qui s'incrémente à chaque itération et qui te permets de gérer où tu veux enregistrer dans un tableur comme excel. Ce qui te retire la création de ta matrice. Je pense que c'est possible pour un enregistrement en fichier texte mais je ne peux pas te le confirmer...

    Perso, j'utilise Excel, ça te permet de gérer les feuilles, tu peux faire un prétraitement sous excel... Mais c'est ma vision des choses...

    Sur ce, j'espère t'avoir aidé

    Christophe

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    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 316
    Points : 52 949
    Points
    52 949
    Par défaut
    Je crois que je ne vois pas bien le problème ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    fid = fopen('data.txt','wt');
    k=1;
     
    while k<10
     
       val = rand(1,3)*10^k;;
       fprintf(fid,'%.4f %.4f %.4f\n',val);
     
       k = k+1;
     
    end
     
    fclose(fid);
    En même temps, il n'y a pas de raison de traiter les chaine de caractères.
    Tu peux certainement directement faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    str = '2.6829,1.6450,101.0000,0.0134,2.0450,102.0000';
    str = strrep(str,',',' ');
    fid = fopen('data2.txt','wt');
       fprintf(fid,'%s\n',str);
    fclose(fid);

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci Dut!

    Je n'avais tout simplement pas pensé à écrire le fichier str après avoir utilisé la fonction strrep dans le .txt.

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

Discussions similaires

  1. Problème de lecture/ecriture dans un fichier txt
    Par fraid49 dans le forum Général Python
    Réponses: 6
    Dernier message: 20/11/2008, 11h32
  2. Ecriture dans un fichier txt avec C++
    Par altera14 dans le forum C++
    Réponses: 4
    Dernier message: 17/06/2008, 10h57
  3. Ecriture dans un fichier txt
    Par ENSAM-ALAMI dans le forum MATLAB
    Réponses: 4
    Dernier message: 05/05/2008, 16h46
  4. ecriture dans un fichier txt
    Par warubi dans le forum VB.NET
    Réponses: 3
    Dernier message: 02/06/2007, 11h07
  5. Réponses: 8
    Dernier message: 07/09/2006, 11h43

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