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 :

probleme avec fprintf [Débutant]


Sujet :

MATLAB

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut probleme avec fprintf
    salut tous,

    j'ai un petit soucis avec "fprintf", je m'explique :

    j'ai fais un code qui va dans divers dossiers pour effetuer des calculs puis qui sort ensuite pour revenir dans l'espace de travail de depart. Une fois ceci effectué, je génére des dossiers (avec des noms de ce type : "azert1.5e-4_A45") et je sauvegarde des résultats en format .txt dans ces dossiers.

    J'ai deja fais des choses dans ce genre mais ds ce code j'ai une erreur qui apparait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ?? Error using ==> fprintf Invalid format
    lors de mon premier passage dans la boucle principale tous se passe bien : les résultats sont correctements écrits dans mon dossier. Par contre, lors du deuxieme passage j'ai ce message s'erreur qui apparait et je ne comprends pas pourquoi....

    es ce que ça peut être dû à mes changements de dossiers? au noms bizarres que portent mes dossiers?....

    merci d'avance pour votre aide

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour 21did21,

    Peux-tu nous mettre quelques lignes de ton code (surtout la ligne avec fprintf !) ?

    Mikaël

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    oui, bien sur, désolé

    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
    cd(folder);
    fid = fopen('initial.dat','r');
    fidm = fopen('final.txt','w+');
    fprintf(fidm,'%% we use the .... \n');
    fprintf(fidm,'%% we must put ...\n');
    fprintf(fidm,'\n');
    fprintf(fidm,'\n');
    fprintf(fidm,'# okokok 1\n');
    while ~feof(fid) 
        ligne = fgets(fid);
        fprintf(fidm, ligne);
    end
    fclose(fid);
    fclose(fidm);
    pause(2)
    delete('bof.dat');
    delete('bofbof.dat');
    system('soft.exe');
    cd(currentFolder);
    j'ai remarqué des warning juste au dessus de mon message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Warning: File 'initial.dat' not found. 
    > In mymatlab at 6
    Warning: File not found or permission denied 
    > In mymatlab at 5

  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 : 52 882
    Points
    52 882
    Par défaut
    D'après ce que je comprends, tu ne fais que concaténer 2 fichiers texte.

    Dans ce cas, la commande DOS Copy devrait te simplifier la tâche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dos('copy a.txt + b.txt c.txt')
    Cette commande concatène le contenu de a.txt et b.txt dans c.txt
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    En effet le warning aide un peu !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Warning: File 'initial.dat' not found. 
    > In mymatlab at 6
    Warning: File not found or permission denied 
    > In mymatlab at 5
    Ton erreur sur le fprintf vient du fait que matlab ne trouve pas le fichier 'initial.dat' ou que tu n'as pas le droit de le lire.

    es ce que ça peut être dû à mes changements de dossiers? au noms bizarres que portent mes dossiers?....
    Cela vient donc de tes changements de dossier.

    [troll=on]
    Dans ce cas, la commande DOS Copy devrait te simplifier la tâche
    Mais du coup le code n'est plus "plateforme indépendant", ce n'est peut-être pas important ici mais je ne suis pas sur que ce soit une bonne habitude
    [troll=off]

  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 : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par neurolab Voir le message
    [troll=on]

    Mais du coup le code n'est plus "plateforme indépendant", ce n'est peut-être pas important ici mais je ne suis pas sur que ce soit une bonne habitude
    [troll=off]
    C'est tout aussi simple sous Unix :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat a.txt b.txt > c.txt
    donc la fonction MATLAB portable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function cattxtfile(A,B,C)
     
    if ispc
       cmd = sprintf('copy %s + %s %s',A,B,C);
       dos(cmd);
    else
       cmd = sprintf('cat %s %s > %s',A,B,C);
       unix(cmd);
    end
    Une autre solution portable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fid = fopen('a.txt','r');
    X1 = fread(fid);
    fclose(fid);
     
    fid = fopen('b.txt','r');
    X2 = fread(fid);
    fclose(fid);
     
    fid = fopen('c.txt','w');
    fwrite(fid,X1);
    fwrite(fid,X2);
    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)

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Super ! (avec ça si 21did21 s'en sort pas... !)

    Je préfère ta seconde solution où on laisse matlab gérer au maximum les appels système.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci beaucoup de votre aide

    => la methode que vous me dites permet de passer outre les "permissions denied" ?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    => la methode que vous me dites permet de passer outre les "permissions denied" ?
    Non, c'est juste une méthode qui permet de concaténer deux fichiers (ce que tu veux faire a priori...)
    D'après ce que je comprends, tu veux mettre ce qu'il y a dans le fichier initial.dat à la fin de plein de fichiers différents dans différents répertoires.

    1. Tu lis le fichier initial.dat qu'une seule fois avec la méthode de Dut et tu stock sont contenu dans une variable (ici X1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    fid = fopen('initial.txt','r');
    X1 = fread(fid);
    fclose(fid);
    2. tu te balades ou tu veux dans tes dossiers et tu peux écrire le contenu de initial.dat à la fin des fichiers que tu créé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    fid = fopen('mon_nouveau_super_fichier.txt','w');
    fwrite(fid,'blablablablabla....');
    % on écrit le contenu de initial.dat
    fwrite(fid,X1);
    fclose(fid);
    Au boulot !

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    en fait j'ai un petit soucis avec ça. Voici ce que j'ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    delete('final.txt');
    pause(1)
    dos('copy exemple.txt + initial.dat final.txt');
    et voici mon message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    exemple.txt 
    Le processus ne peut pas acc‚der au fichier car ce fichier est utilis‚ par un autre processus. 
            0 fichier(s) copi‚(s).

  11. #11
    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 : 52 882
    Points
    52 882
    Par défaut
    Le fichier est-il ouvert dans un éditeur ?
    Si tu y as accédé depuis MATLAB avec FOPEN, l'as-tu fermé avec FCLOSE ?

    Sinon, je pense que le DELETE n'est pas nécessaire ici.

    Tu devrais pouvoir faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dos('copy exemple.txt + initial.dat final.txt');
    ou plus proprement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dos('copy /Y /A exemple.txt + initial.dat final.txt');
    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)

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    en fait je ne comprends pas car les fichiers ne sont pas utilisé ailleurs...

    voici ce que j'ai :
    1°) dans chaque dossier j'ai un fichier "exemple.txt" qui n'est utilisé par personne

    2°) un fichier "initial_1.dat" qui est écrit par un logiciel dans un fichier et que je copie sous le nom "initial.dat" dans plusieurs dossiers.

    3°) ensuite je vais dans chaque dossier pour concaténer le fichier exemple et le fichier initial.

    ==> ce que je ne comprends pas c'est que dans le premier dossier la copie echoue mais par contre dans tous les autres dossiers ça fonctionne...

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    tout est OK à présent

    => j'ai redémarré mon PC et le probleme de permission et résolu

    merci beaucoup

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

Discussions similaires

  1. [fprintf] probleme avec des non entiers
    Par DJEcalcul dans le forum MATLAB
    Réponses: 2
    Dernier message: 09/03/2011, 18h15
  2. probleme avec fprintf
    Par gipfel11 dans le forum C
    Réponses: 5
    Dernier message: 09/03/2008, 08h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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