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 :

Ajouter de lignes au début et à la fin d'un fichier texte


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 2
    Points
    2
    Par défaut Ajouter de lignes au début et à la fin d'un fichier texte
    Bonjour,

    J'aimerai ajouter un ligne de code au début d'un m-file sans effacer le contenu du fichier.
    J'ai utiliser la fonction fprintf avec l'option append pour fopen, mais elle permet seulement de rajouter des donnnées à la fin du fichier, et les autres options tels que write etc... écrase le contenu du fichier.
    Est-ce que qqun aurait une idée sur ce sujet ?

    Merci d'avance !

    Moun

  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
    Il est impossible d'ajouter dynamiquement des lignes au début ou au milieu d'un fichier sans :
    1. lire le fichier en entier
    2. stocker les données du fichier dans une variable
    3. modifier les données du fichier dans la variable
    4. écraser entièrement le fichier à partir de la variable modifiée
    Sauf bien sur pour ajouter des données à la fin (argument append de FOPEN)
    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
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    Comment ??

  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 166
    Points
    53 166
    Par défaut
    Ta question n'est pas assez spécifique.

    Tu trouveras toutes les fonctions utiles dans cette note technique : File I/O Guide
    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
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci pour ta reponse, je pense que tu as raison, qu'il est impossible de rajouter une ligne en début de fichier. Dans ce cas la je pense a une autre méthode. Mais je ne sais pas comment la mettre en oeuvre non plus.

    Elle consiste a creer un fichier, a injecter la ligne qui m'interesse dans ce dernier. Ensuite, rajouter a la suite le script. Par contre, je ne sais pas comment rajouter un script à la suite d'un autre.
    Sais-tu comment faire ?

    Moun

  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
    Si tu nous disais plutôt pourquoi tu veux faire tout ça ? Quel est le contexte de ton problème ?
    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
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    Bon en gros je creer un logiciel avec GUI mais la cette info na pas dinteret pour la question. Dans ce GUI j'execute un script. mais je veux que le contenu de ce script soit des données de l'utilisateur.

    J'appel [Donnees] le contenu du m-fichier de l'utilisateur...

    Moi je veux rajouter au début :
    function out = applicate(m)
    Et a la fin :
    return;

    En gros je veux un script tel quel :
    function out = applicate(m)
    [Donnees]
    return;

  8. #8
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    C'est toujours pas clair ??

  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
    Personellement je ne vois pas l'intérêt de modifier le script en fonction ?
    Quel intérêt trouves-tu à cela ?
    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
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    L'interet c que je veux imposer le nom de la fonction (nom = application).
    L'utilisateur proposer des données, et moi je dois les éxécutés. Pour cela il fo que ce soit dans une fonction. Pour que je puisse l'executé qqsoit le contenu, jdois moi meme faire la fonction.
    Je ne peux pas dire a l'utilisateur de mettre une fonction x avec un nom y et pouvoir l'executé dans tout les cas, c'est impossible.
    Donc je demande a lutilisateur de rentré seulemen le contenu de la fonction, le corp de la fonction je men occupe.

  11. #11
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    Moi en gros ce que je veux savoir c'est si on peut fusionner le contenu de deux m-files (dans un m-file). Et si c'est le cas, Comment ?

  12. #12
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    La première réponse de Dut te donnait la réponse :
    Citation Envoyé par Dut
    1. lire le fichier en entier
    2. stocker les données du fichier dans une variable
    3. modifier les données du fichier dans la variable
    4. écraser entièrement le fichier à partir de la variable modifiée
    et sa seconde réponse te donnait le lien vers toutes les fonctions nécessaires pour le faire.

    Si cela ne te suffit pas expliques nous alors quels sont les problèmes que tu rencontres ?
    Règles du Forum

    Adepte de la maïeutique

  13. #13
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    J'ai bien lu ce que m'a écris Dutmatlab, et j'ai fait des recherches en conséquence. Mais je n'ai pas trouver comment faire, voila mon probleme.

  14. #14
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    Voila du concret :

    Cette premiere partie va me permettre d'injecter une ligne à la deuxieme ligne du m-file
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    % This example differs from Example 3 in that it tries to 
    % squeeze out any extra characters if the new 
    % line is shorter than the line it is replacing. 
    % Opening the file to both read and write 
    fid = fopen('applicate.m','r+'); 
    % Can change 'loc' to insert data at any line in file. 
    % When loc=1, data will inserted at line 2 
    loc = 1; 
    for i = 1:loc 
        % Used FGETL to move file pointer a whole line at a time: 
        % See FGETL section below for more information 
         temp_line = fgetl(fid); 
         if ~ischar(temp_line), break, end 
    end; 
    if ischar(temp_line) 
         p = ftell(fid) 
         temp_line = fgetl(fid); 
         if ischar(temp_line) 
             % Read in the rest of the file after line of interest 
             % with FREAD 
             c = fread(fid,inf,'uchar'); 
            % Place the internal pointer back to the line of interest 
            fseek(fid,p,'bof'); 
            % Print the last_line data to the current position 
            fprintf(fid,'%s','function out=applicate(fem)'); 
            % Write the rest of the data in the file with FWRITE 
            fwrite(fid,c,'uchar'); 
        else 
            fprintf(fid,'%s','function out=applicate(fem)'); 
        end 
    else 
        fprintf('Not enough lines in file to skip. Nothing appended...\n'); 
    end 
    fclose(fid);
    cette partie va me permettre d'injecter une ligne a la fin de mon m-file
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fid = fopen('applicate.m','a');
    fprintf(fid,'%s\n','out = fem;');
    fprintf(fid,'%s\n','return;');.
    fclose(fid);
    En faite ce que j'aimerais, c'est pouvoir ajouter une ligne à la première ligne du m-file. Et pour le moment je n'ai pas trouvé comment je pouvais faire.

  15. #15
    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
    Tout ceci me semble toujours bien compliqué... enfin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    fid = fopen('applicate.m','r');
       temp=fread(fid,[1,inf]);
    fclose(fid);
     
    temp=['out = fem;' 10 13 temp 10 13 'return;']; % [10 13] est l'équivalent de '\n'
     
    fid = fopen('applicate.m','w');
       temp=fwrite(fid,temp);
    fclose(fid);
    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)

  16. #16
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Merci ça fonctionne mieux que ce que j'avais. Mais juste par curiosité qu'est ce qui te semble compliqué? Suis-je compliqué? ou est ce que c'était mon programm?. J'avou il etait bien long par rapport au tien. Bref je les mis quand même parce que j'avais pas l'impression que vous ne compreniez pas mon soucis. En tout merci pour le tps que tu as consacré à mon probleme.

  17. #17
    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
    Citation Envoyé par Moun2001
    Suis-je compliqué?
    Peut être... non sérieusement, je ne comprends pas toujours pourquoi transformer le fichier Script en Fonction.
    Mais le principal, c'est que le problème soit résolu.
    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)

  18. #18
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    Oui c'est l'essentiel, en tout cas merci bcp. Je vais quand meme t'expliquer rapidement le pourquoi de la fonction.
    Je dois faire un logiciel qui simule (je te passe les détails) selon des données physiques, et géométrique. Je permet a l'utilisateur de modifier la géométrie, Les données physiques c'est l'utilisateur qu'il les soumet, et en faite c des données qui s'execute. Lorsque l'on lance la simulation, il y a fonction qui creer la ou les géométrie, la fonction 'applicate' qui execute les données, et la fonction simulation. Pour que jpuisse executé la fonction applicate dans tout les cas, je met moi meme l'entete de la fonction dans le fichier donnée physique. Et les personnes qui seront suceptible d'utiliser mon logiciel n'auron peut etre aucune notion en matlab, et donc je facilite les choses en leur demandant un m-file contenant seulement les données physique. De plus je me vois mal executé une fonction sans connaitre le nom de cette derniere. Voila, encore merci

  19. #19
    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
    On ne va pas éterniser la discussion... puisque le problème est résolu mais je ne peux m'empêcher.

    Pourquoi ne pas simplement faire remplir un fichier texte par l'utilisateur et utiliser une seule fonction qui extrait les données de ce fichier et qui exécute les instructions avec ces données ?

    Au fait, si le fichier est bien une fonction, il n'y a pas besoin du "return" à la fin.
    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)

  20. #20
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Mon encadrant veut absoluement que ce soit dans un m-file que soit contenu les données, et jcrois comprendre pkoi. Les données sont issus du logiciel comsol (des models) qu'on peut enregistrer sous m-file seulement.
    La fonction retourne bien une valeur qui m'interesse. l'entete étant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function out=application(f);
    la fin du fichier est
    et on retourne 'f'.

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

Discussions similaires

  1. Ajout de lignes en début et fin de plusieurs fichiers
    Par lolo1410 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 21/01/2013, 13h52
  2. [JCL] Ne garder que les lignes du début et de fin d'un fichier
    Par ALaurent22 dans le forum JCL - SORT
    Réponses: 6
    Dernier message: 05/04/2012, 18h08
  3. Ajouter une ligne en début de fichier
    Par MB_MathemaTeX dans le forum Général Python
    Réponses: 4
    Dernier message: 20/03/2010, 18h02
  4. [TPW] Suppression au début et à la fin d'un fichier
    Par toutowa dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 30/10/2009, 15h42
  5. Réponses: 2
    Dernier message: 21/10/2008, 10h46

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