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 :

rajouter un char à la fin de chaque ligne d'un fichier txt


Sujet :

MATLAB

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut rajouter un char à la fin de chaque ligne d'un fichier txt
    bonjour,

    J'ai le fichier txt suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Time;Vect;Vect2
    1;2;3
    2;2;3
    3;3;3
    4;4;5
    6;1;2
    J'aimerai rajouter un point virgule à la fin de chaque ligne pour obtenir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Time;Vect;Vect2;
    1;2;3;
    2;2;3;
    3;3;3;
    4;4;5;
    6;1;2;
    voici le code que j'ai essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    clear all
    close all
    clc
    fid=fopen('essai.txt','a+');
        while ~feof(fid)
            fprintf(fid,';');
            fgets(fid)     
        end
     fclose(fid);
    le problème c'est que je n'arrive pas à parcourir toutes les lignes, car 'a+' (qui veut dire append, commence toujours à la dernIère ligne.

    Ouvrir le fichier avec 'r' ou 'w' ne marche pas non plus car ca écrase le contenu du ficheir txt.

    Avez vous des idées ?
    Merci beaucoup,

  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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Une solution possible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    txt_data=textread(filename,'delimiter','\n');
     
    fid = fopen(filename,'wt');
    if (fid == -1);return;end
    fprintf(fid,'%s;\n',txt_data{:});
    fclose(fid)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut
    merci,
    mais il me semble qu'il y a quelque chose qui manque à textread.

    J'obteins l'erreur suivante en effet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ??? Error using ==> dataread
    Param/value pairs must come in pairs.
     
    Error in ==> textread at 177
    [varargout{1:nlhs}]=dataread('file',varargin{:});
     
    Error in ==> semicolon at 5
    txt_data=textread(filename,'delimiter','\n');

  4. #4
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Oups , au temps pour moi je me suis emmêler les pinceaux

    C'est plutôt comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    txt_data=textread(filename,'%s');

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut
    parfait, ca marche . merci.

    peux tu juste me dire à quoi sert le t dans 'wt' ? je ne l'ai pas trouvé dans le help.

  6. #6
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Ca veut dire que le fichier que tu ouvres est un fichier texte (FOPEN peut aussi ouvrir les fichiers binaires)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut
    d'accord, merci.
    sinon, est ce que t'as une idée de code qui permet de supprimer le point virgule qu'on vient de rajouter ? je chercher en fait, l'effet inverse du code précédent.

    merci

  8. #8
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Je ferais comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    txt_data=textread(filename,'%s');
     
    txt_data = regexprep(txt_data,';$','');
     
    fid = fopen(filename,'wt');
    if (fid == -1);return;end
    fprintf(fid,'%s\n',txt_data{:});
    fclose(fid)

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut
    merci,
    tu peux juste me dire à quoi sert le symbole ';$' ?

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 956
    Points
    52 956
    Par défaut
    Deux petites fonctions vite faites :

    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
    function addeol(file,c)
     
    fid = fopen(file,'r+');
     
        if fid==-1
            error('Impossible d''ouvrir le fichier');
        end
     
        X = fread(fid);
     
        X = strrep(X,sprintf('\n'),[c sprintf('\n')]);
     
        frewind(fid);
     
        fwrite(fid,X);
     
    fclose(fid);
    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
    function remeol(file,c)
     
    fid = fopen(file,'r');
     
        if fid==-1
            error('Impossible d''ouvrir le fichier');
        end
     
        X = fread(fid);
     
    fclose(fid);
     
    fid = fopen(file,'w');
     
        if fid==-1
            error('Impossible d''ouvrir le fichier');
        end
     
        X = strrep(X,[c sprintf('\n')],sprintf('\n'));
     
        fwrite(fid,X);
     
    fclose(fid);
    La première ajoute un caractère à la fin de chaque ligne d'un fichier, l'autre fait l'inverse.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addeol('test.txt',';');
    Il faut impérativement que la dernière ligne du fichier soit une ligne vide.

    Enfin, c'est l'idée... à améliorer si besoin

    Je pense que ces deux fonctions sont portables =>
    • Windows => à vérifier
    • Linux => OK
    • Mac => à vérifier

    Citation Envoyé par bakaratoun Voir le message
    tu peux juste me dire à quoi sert le symbole ';$' ?
    C'est pour chercher le motif en fin de chaine de caractères (ou ici de ligne)
    Cherches des informations sur les expressions régulières (qui ne sont pas spécifiques à MATLAB)

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut
    parfait,
    merci pour toutes ces infos...

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

Discussions similaires

  1. Ecrire a la fin d'une ligne d'un fichier .txt
    Par Vince_14 dans le forum LabVIEW
    Réponses: 5
    Dernier message: 02/05/2011, 20h45
  2. ajouter un ; a la fin de chaque ligne de mon fichier CSV
    Par pelois dans le forum Conception
    Réponses: 1
    Dernier message: 21/06/2010, 10h24
  3. Réponses: 5
    Dernier message: 14/04/2008, 16h27
  4. Réponses: 1
    Dernier message: 19/08/2006, 16h02
  5. Réponses: 4
    Dernier message: 19/06/2004, 23h28

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