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 :

Remplacer une ligne texte d'un fichier par une autre


Sujet :

MATLAB

  1. #1
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut Remplacer une ligne texte d'un fichier par une autre
    Bonjour,

    je souhaite simplement supprimer chaque occurrence d'une chaîne de caractères dans une ligne d'un fichier.
    Pour être plus concret, je souhaite supprimer chaque / de la 3e ligne de ce fichier (qui comprend des milliers de ligne).
    Voici le code que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    clc;clear all; close all; fclose all;
    fid = fopen('mon_fichier','r+')
    N=3;
    for i=1:N
        A = fgetl(fid);
    end
    A = strrep(A,'/','')
    fwrite(fid,A)
    fclose(fid)
    Sauf qu'il ne se passe rien dans 'mon_fichier' après l'exécution de ce script. Qu'est-ce qui cloche dans mon code svp ?

    Merci de votre aide
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  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 165
    Points
    53 165
    Par défaut
    Citation Envoyé par lecteur1001 Voir le message
    Pour être plus concret, je souhaite supprimer chaque / de la 3e ligne de ce fichier (qui comprend des milliers de ligne).
    Si ce caractère n’apparaît que sur la troisième du fichier, tu peux t'inspirer de cette idée de fonction : http://www.developpez.net/forums/d10...s/#post5795796

    Si cela ne convient pas ou si, pour des raisons de rapidité tu ne souhaites pas lire tout le fichier, on envisagera une solution plus complexe.
    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
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Effectivement, j'ai trouvé cette discussion et m'en était inspiré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    FileName='mon_fichier';
    fid = fopen(FileName,'r')
    A=fread(fid); % on récupère le contenu du fichier
    fclose(fid)
    A = strrep(A,'/',''); % on supprime la chaîne de caractère '/'
    NewFileName = [FileName '_new'];
    fid = fopen(NewFileName,'w')
    fwrite(fid,A)
    fclose(fid)
    Il n'empêche que cette solution ne convient pas car je lis l'intégralité de mon fichier pour supprimer toutes les / alors que je souhaiterais le faire uniquement dans la 3e ligne. De plus, niveau temps de calcul cela peut vite devenir contraignant si on lit un fichier de plusieurs dizaines de milliers de lignes.
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  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 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 165
    Points
    53 165
    Par défaut
    OK, dans ce cas, est-il possible de remplacer le caractère '/' par un espace (ou un autre caractère) plutôt que de le supprimer ?

    Le but est de conserver une taille de fichier constante avant et après modification.
    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)

  5. #5
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Citation Envoyé par Dut Voir le message
    OK, dans ce cas, est-il possible de remplacer le caractère '/' par un espace (ou un autre caractère) plutôt que de le supprimer ?
    Mouais, pourquoi pas.

    Citation Envoyé par Dut Voir le message
    Le but est de conserver une taille de fichier constante avant et après modification.
    Pourquoi donc ? Quel en est l'intérêt ?
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par lecteur1001 Voir le message
    Pourquoi donc ? Quel en est l'intérêt ?
    L'intérêt de ne pas ré-écrire ton fichier en entier.
    Si tu supprimes/rajoutes un bloc au début de ton fichier, tu es obligé de déplacer (et donc ré-écrire) tout ce qui suit en conséquence.
    Par contre si tu ne fais que changer son contenu, c'est juste ce qui change que tu as à écrire. D'où l'intérêt de remplacer ton '/' par un autre caractère.

    Tu peux donc reprendre le code de ton premier message en y insérant les fonctions FTELL et FSEEK afin de retenir la position de ta 3ème ligne, et y revenir pour la ré-écrire.
    Dernière modification par Invité ; 01/08/2011 à 13h14.

  7. #7
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    L'intérêt de ne pas ré-écrire ton fichier en entier.
    Si tu supprimes/rajoutes un bloc au début de ton fichier, tu es obligé de déplacer (et donc ré-écrire) tout ce qui suit en conséquence.
    Par contre si tu ne fais que changer son contenu, c'est juste ce qui change que tu as à écrire. D'où l'intérêt de remplacer ton '/' par un autre caractère.
    Merci de ces explications, je n'avais pas encore saisi ces subtilités. Pour gagner en temps d'exécution de mon script c'est vrai que c'est intéressant.
    En revanche, si je dois remplacer une chaîne de caractères par une autre n'ayant pas la même longeur je crois comprendre qu'on est obligé de ré-écrire le fichier en entier. Donc s'il fait 10^5 lignes, pas génial.

    Citation Envoyé par Winjerome Voir le message
    Tu peux donc reprendre le code de ton premier message en y insérant les fonctions FTELL et FSEEK afin de retenir la position de ta 3ème ligne, et y revenir pour la ré-écrire.
    Hummm... Même en lisant la doc de ces fonctions, je ne vois pas comment les utiliser. Pourrais-tu m'en dire plus stp ?
    Par contre, cette recherche m'a permis de découvrir fgets (ou fgetl, quasiment équivalent). Je n'ai pas encore trouvé comment m'en servir correctement pour l'usage que j'ai à en faire mais c'est un départ.
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

Discussions similaires

  1. Créer un fichier sur une ligne à partir d'un fichier séquentiel
    Par cari dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/09/2013, 06h04
  2. insérer ou remplacer une ligne string dans un fichier texte ?
    Par Night_Wolf1619 dans le forum Débuter
    Réponses: 34
    Dernier message: 16/05/2013, 11h49
  3. Réponses: 2
    Dernier message: 07/04/2013, 23h56
  4. Inserer une ligne texte dans un fichier *.txt
    Par jacquesis dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 21/12/2012, 11h56
  5. Remplacer une ligne d'un fichier par une autre
    Par vincent02 dans le forum Langage
    Réponses: 3
    Dernier message: 22/09/2007, 20h19

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