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 :

Fichiers finissant par ~


Sujet :

MATLAB

  1. #1
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut Fichiers finissant par ~
    Bonjour,

    J'ai un problème de sauvegarde de fichiers. J'ai pas mal de fichiers à enregistrer et il se trouve que pour quelque uns d'entre eux, au lieu de m'enregistrer un unique fichier, il en enregistre deux nommés : exemple.txt et exemple~.txt

    Le problème c'est que ces deux fichiers ne contiennent pas exactement la même chose. Dans un cas j'ai la bonne valeur, dans l'autre j'ai un NaN qui se promène.

    D'où provient l'erreur ?

  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
    Bonjour,

    Pourrais-tu nous montrer le code qui abouti à ce problème?

    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  3. #3
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    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
    35
    36
     
    function []=altitude()
    clear
    clc
    q5=0:0.25:1;
    q50=0.02:0.02:1;
    cd('~/Matlab/Codes/Altitudes/BV')
    listbv=dir;
     
    for i=3:length(listbv)
        if listbv(i).isdir==1
            eval(['cd ./' listbv(i).name]);
            liststation=dir;
            for j=3:length(liststation)
                listiname=liststation(j).name;
                fid=fopen(listiname);
                data=textscan(fid,'%s %f %f %f %f %s %s','HeaderLines',3);
                lat=data{3};
                alt=data{4};
                lat=mean(lat);
                    if lat>10000
                        lat=lat./1000;
                    end
                medalt=quantile(alt,0.5)';
                altz5=quantile(alt,q5)';
                altz50=quantile(alt,q50)';
                beta=0; % pour le Québec selon Valéry 2010
                Vmin=0.1; % selon Valéry 2010
                altitudes=['~/Matlab/Codes/Altitudes/BV/data_alt_lat_' listiname '.mat'];
                save(altitudes, 'medalt', 'altz5', 'altz50','lat','beta','Vmin');
                fclose(fid);
     
            end
            cd ../
        end
    end

  4. #4
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    Le problème se situe au niveau de la valeur que prend lat.
    J'ai regardé l'ensemble des valeurs que prend lat. Pour les fichiers n'ayant pas de ~, la série est de type

    5025
    5037
    5021
    ....

    alors que pour les fichiers ayant un ~, la série est :

    NaN
    5025
    5037
    5021
    ....


    Comment ça se fait que le même code lise deux choses différentes à partir du même fichier ?

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Apparemment tes données sont lues à partir des fichiers dont les noms sont dans liststation. As-tu regardé les valeurs de chaque liststation(j).name pour tous les j?

    Il semblerait que les fichiers "exemple" et "exemple~" existe avant l'exécution de ce code.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  6. #6
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    Merci magelan. Tu as la bonne réponse ! (et qui est tellement logique après coup) Ce qui est surprenant, c'est que malgré tout, ces fichiers n'apparaissent que dans ma fenêtre "current folder" de matlab. Encore plus surprenant, j'ai dû supprimer plusieurs fois les fichiers d'origine avec ~ et faire rouler plusieurs fois le code avant que l'ensemble des ~ disparaissent.

    Merci !

  7. #7
    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
    Voici une version améliorée de ton code :

    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
    function [] = altitude()
    clc
    q5 = 0:0.25:1;
    q50 = 0.02:0.02:1;
    pathname  =  '~/Matlab/Codes/Altitudes/BV';
    listbv = dir(pathname);
     
    for i = 3:length(listbv)
        if listbv(i).isdir
            liststation = dir(fullfile(pathname,listbv(i).name));
            for j = 3:length(liststation)
                fid = fopen(fullfile(pathname,listbv(i).name,liststation(j).name));
                data = textscan(fid,'%s %f %f %f %f %s %s','HeaderLines',3);
                fclose(fid);
                lat = data{3};
                alt = data{4};
                lat = mean(lat);
                if lat>10000
                    lat = lat./1000;
                end
                medalt = quantile(alt,0.5)';
                altz5 = quantile(alt,q5)';
                altz50 = quantile(alt,q50)';
                beta = 0; % pour le Québec selon Valéry 2010
                Vmin = 0.1; % selon Valéry 2010
                altitudes = fullfile('~/Matlab/Codes/Altitudes/BV',sprintf('data_alt_lat_%s.mat',liststation(j).name));
                save(altitudes, 'medalt', 'altz5', 'altz50','lat','beta','Vmin','-mat');
            end
        end
    end
    Sinon, sous Linux, les fichier se terminant par ~ sont généralement des fichiers d'enregistrement automatique qui se créent lors de leur ouverture (avec un éditeur de texte par exemple). Ce sont des fichers cachés
    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)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/09/2010, 10h27
  2. Réponses: 1
    Dernier message: 03/07/2009, 09h37
  3. Réponses: 10
    Dernier message: 18/11/2003, 18h01
  4. Réponses: 4
    Dernier message: 18/09/2003, 10h06
  5. Réponses: 6
    Dernier message: 02/09/2003, 15h12

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