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 :

Traitement automatique de fichiers par MATLAB


Sujet :

MATLAB

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2015
    Messages : 56
    Par défaut Traitement automatique de fichiers par MATLAB
    Bonjour,

    Je suis encore novice en MATLAB et dans le cadre de mon stage, je dois l'utiliser pour faire un traitement automatique de fichiers.
    Pour résumer, je lance un fichier.m qui me demande de sélectionner un fichier pour pouvoir le traiter. Cependant le traitement dure des heures et donc j'ai besoin de laisser l'ordi allumé la nuit pour pouvoir faire le traitement de tous les fichiers.
    Je souhaiterai donc réaliser un petit programme MATLAB qui me permettrait de traiter ces fichiers automatiquement ( pas besoin de lancer le .m a chaque fois et choisir le fichier..) mais étant novice je ne vois pas comment faire.
    Merci d'avance pour votre aide.

    Salah

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Bonjour,

    Peux tu nous faire voir le code associé au chargement de ce .m? Peux tu également nous dire comment s'effectue le choix de ce fichier?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2015
    Messages : 56
    Par défaut Utilisation des balises Code (#)
    Voici le code qui est lancé

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    function [  ] = Mapper( ~ )
    %MAPPER Summary of this function goes here
    %   Detailed explanation goes here
     
    % Ajout du sous-dossier des fonctions du mapper et des fonctions communes
    current_path = cd;
    addpath(genpath(current_path));
     
    % Recherche des données à traiter et Recherche des paramètres
    [Params] = Mapper_Param();
     
    % Creation des dossiers de résultats
    [~,~,~]= mkdir('images');
    [~,~,~]= mkdir('signals');
    [~,~,~] = mkdir(strcat('E...));
     
    % Ouverture des pools pour parralélisation
    if matlabpool('size') == 0
        matlabpool open
    end
     
     
    % Recherche du nombre de tours (on recherche le nombre de channels 0 présentes
    % exploration du dossier ciblé
    Params.N_N_tours = size(dir(strcat(Params.pathname,'/*Ch0*.bin')),1);
     
     
    % Initialisation de la matrice de résultats
    Results = zeros(Params.N_N_tours,Params.D_Enc);
    timing = zeros(1,Params.N_N_tours);
     
    tic
    for i = 1:Params.N_N_tours
        bla = tic;
        % Mise à jour du tour dans le fichier de paramètres des variables du
        % tour
        i
        Params.tour.i = i-1;
        Params.tour.R = Params.D_R_init - (i-1)*Params.D_step;
        Params.tour.F_d = Params.tour.R*Params.D_V/(Params.D_i0);
     
        % chargement des données du tour i 
        % SIG_tour correspond au signal brut du tour
        % ENC_tour donne pour position de sample dans le tour le signal
        % d'encodeur correspondant
        [Donnes.SIG_tour,Donnes.ENC_tour,Params] = Mapper_DataLoad(Params);
        Params.tour.N_Fdn = Params.tour.F_d/Params.tour.F_acq_tour; 
     
        % Détection par vraisemblance du tour i
        [Results_V, Params] = Mapper_detection(Donnes,Params);
     
        if Params.U_V_calc == 1
            % Sizing du tour i
            [Results_S] = Mapper_Sizer(Donnes,Params, Results_V(i,:));
            Results(i,:) = Mapper_Mise_en_Forme(Results_S,Params,Donnes);
        else
            Results_V = Results_V/255;
            Results(i,:) = Mapper_Mise_en_Forme(Results_V,Params,Donnes);
        end
     
        timing(i) = toc(bla);
    end
     
    toc
     
    save
     
    clk = datestr(now, 'yymmdd-HHMM_');
     
    save(strcat('signals\',clk,Params.Name_fold,'_Results.mat'),'Results')
    save(strcat('signals\',clk,Params.Name_fold,'_timing.mat'),'timing')
     
    Params.clk = clk;


    Je lance ce fichier .m et une fenêtre apparaît me permettant de chercher le fichier que je veux traiter dans les différents disques.

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Et sur quel critère tu choisis ces fichiers? Ce que j'essaie de te faire comprendre c'est que pour automatiser la procédure, il faut y trouver une logique.

    Tu ne vas pas faire deviner à ta machine quels fichiers il va devoir aller charger de lui même, il faut que tu nous expliques quelle procédure tu veux expliquer.

    Par exemple: tout les fichiers d'un répertoire. Ou alors les fichiers d'un répertoire commençant par "mesure_" ou alors tout les fichiers de divers répertoires. On ne peut pas deviner à ta place ce que tu désires charger

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2015
    Messages : 56
    Par défaut
    Désolé Gooby , je n'avais pas précisé mon idée.

    Je voudrais en fait choisir un groupe de fichiers dans un répertoire, donc définir les fichiers intéressés et ensuite charger le premier ( dont le traitement va prendre des heures) et comme je ne serais plus devant l'ordi , qu'il charge le deuxième automatiquement (il a été choisi) et ainsi de suite jusqu'au dernier.
    Est-ce assez clair (désolé je m'exprime mal ..) ?
    Merci déjà pour ton intérêt.

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Oui maintenant c'est très clair

    Est-ce que tu peux nous montrer le code de la fonction "Mapper_Param" ? Je pense que c'est dans cette fonction qu'il y a la ligne de code associé au choix d'un fichier

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2015
    Messages : 56
    Par défaut
    Voici le code de Mapper_param

    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
    37
    38
    39
    40
    41
    42
    function [ Params ] = Mapper_Param( ~ )
    %VIEWER_PARAM Summary of this function goes here
    %   Detailed explanation goes here
     
    %sélection du dossier contenant les fichiers à traiter
     
    if exist('previous_path.mat', 'file')~=2
        pathname = uigetdir;
        save('previous_path','pathname');
    else
        load('previous_path.mat')
        if pathname == 0
                pathname = uigetdir;
            save('previous_path','pathname');
        else       
            pathname = uigetdir(pathname);
            save('previous_path','pathname');
        end
    end
     
    Params.pathname = pathname;
     
    % name of current folder
    [~,a] = find(Params.pathname == '\');
    Params.Name_fold = Params.pathname(1,a(end)+1:end);
     
    % Recovering the parameters recorded during the acquisition
    Params = Param_Reader(Params);
     
    % Recovering the parameters asked to the user
    Params = Mapper_AskParam(Params);
     
    % Noms correspondants à chaque voie
        % nom commun
    com_name = strcat(Params.Name_fold,'_%d_')
        % nom de chacun
    Params.N_SIG_name = strcat(com_name,'Ch0.bin');
    Params.N_ENA_name = strcat(com_name,'Di0.bin');
    Params.N_ENB_name = strcat(com_name,'Di1.bin');
     
     
    end
    Encore merci pour ton aide

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Alors ici ce qui nous intéresse surtout c'est cette partie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if exist('previous_path.mat', 'file')~=2
        pathname = uigetdir;
        save('previous_path','pathname');
    else
        load('previous_path.mat')
        if pathname == 0
                pathname = uigetdir;
            save('previous_path','pathname');
        else       
            pathname = uigetdir(pathname);
            save('previous_path','pathname');
        end
    end
    La fonction uigetdir est celle qui est utilisé pour aller sélectionner le fichier. Ensuite la fonction load va servir à charger le fichier. C'est tout à fait automatisable en effectuant quelques petites modifications par ci par là pour pouvoir récupérer tout les fichiers voulus de façon automatique.

    Est-ce qu'il t'est possible de copier tout les fichiers que tu veux analyser dans un dossier ne contenant que ces fichiers et rien d'autre? ça faciliterait la chose, aussi bien dans la compréhension que dans le code.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2015
    Messages : 56
    Par défaut
    Oui, il m'est possible de les copier dans un dossier seulement reversé pour eux.

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Il y a plusieurs façon de procéder donc. Je te conseille de faire une copie de tes fonctions matlab puisque nous allons devoir les modifier.

    Commence par te renseigner sur la fonction dir pour voir de quel façon tu vas pouvoir faire la liste des fichiers à charger.

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2015
    Messages : 56
    Par défaut
    Merci.
    Alors la fonction dir permet de lister tous les fichiers présent dans un répertoire avec une certaine extension.
    Donc j'aurais besoin de définir le répertoire choisi, l'extension de fichiers choisi et ensuite d'utiliser la fonction dir pour lister tous les fichiers dont j'ai besoin c'est cela ?Et ensuite faudra-t-il utiliser la fonction load pour charger et traiter les fichiers ? Je ne sais pas ....

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Oui c'est globalement ça. Il va falloir modifier tes fonctions pour ne plus utiliser le uigetfile. En gros tu vas lui renseigner le path de ton répertoire contenant les fichiers à traités. Puis avec la fonction dir tu vas faire la liste de ces fichiers. Puis avec une boucle for tu vas parcourir la liste de ces fichiers un par un pour les charger et les analyser/apporter ton traitement.

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2015
    Messages : 56
    Par défaut
    Alors par exemple, si le répertoire où les fichiers se trouvent est C:\lan et que les fichiers que l'on veut on une extension .rn , on peut faire cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    rep = 'C:\lan' %nom du répertoire
    ext  ='*.rn' % fichiers de telle extension
    chemin = fullfile(rep,ext)
    list = dir(chemin)
     
    for ext=1:length(nom du fichier) 
    load list
    end

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Tout d'abord, sache que les 2 premières sorties de dir ne sortent pas le nom de tes fichiers mais "." et ".." donc le raisonnement est dans la bonne direction mais il faudra commencer ta boucle à i=3

    Ensuite, regarde ce que te renvoie la fonction dir. Tu devras plutôt faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monFichier = load(list(i).name);
    Tu commences à entrevoir comment cela va fonctionner?

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2015
    Messages : 56
    Par défaut
    Je comprends à peu près le raisonnement mais ne comprends pas le list(i).name
    le "list" correspond au listage des fichiers voulus mais je ne comprends pas le i et le name ...
    Désolé, c'est encore un peu dur pour moi....

  16. #16
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    J'ai utilisé la variable i c'était une erreur ici.

    dir ne te renvoie pas que le nom du fichier, il te renvoie plein d'autres trucs sous la forme d'une structure. mais ce qui t'intéresse toi c'est bien le nom du fichier à charger.

    Donc comme je l'ai expliqué plus haut, on commence la boucle à 3 car les 2 premières valeurs ne nous intéressent pas.
    on va charger à chaque ext (3 puis 4 puis 5 ...) un fichier de notre répertoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for ext=3:length(nom du fichier) 
         monFichier = load(list(ext).name);
    end

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2015
    Messages : 56
    Par défaut
    Merci pour ton aide encore.
    Juste une chose que je ne comprends : dans le "nom de fichier" dois-je mettre l'extension et dans le "name" de list(ext).name, le name est-il le nom de fichier ?
    Ces questions sont peut-être débiles mais je ne suis pas sûr ...
    Merci d'avance

  18. #18
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Pas de soucis pour l'aide, tant que tu essayes de comprendre par toi même, nous sommes toujours prêt à apporter notre aide.

    length(nom du fichier) c'est plutot length(list) en fait.

    et oui sinon, name donne bien le nom du fichier.

    Est-ce que tu comprends que ça va apporter quelques modifications à ton/tes code(s)?

    essaie d'utiliser la fonction dir sur un path tout simple pour comprendre comment elle fonctionne.

  19. #19
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2015
    Messages : 56
    Par défaut
    j'ai testé avec un path et dir me renvoie pour moi "une matrice" contenant le nombre et les informations d'élements avec l'extension choisie dans le path.
    La boucle avec la fonction load a l'air de fonctionner mais cela m'a mis une erreur : Error using load
    Unable to read file laser.pdf: No such file or directory.
    Je ne comprends pas pourquoi (peut-être que c'est parce que c'est un fichier pdf...

  20. #20
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    dir te renvoie une structure. Pour comprendre clairement ce qu'est une structure, je t'invite à consulter la FAQ qui l'explique très bien.

    Et le mieux quand tu vas charger tes données avec load c'est de lui donner le path complet. par exemple si ton path est path = 'D:\lan';.

    Mieux vaut faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    nomFichier = list(ext).name;
    path_complet = strcat(path,filesep,nomFichier);
    monFichier = load(path_complet);
    Comme ça même si tu ne travaille pas dans le dossier où tu charges tes fichiers et que tu n'as pas ajouté leur path au workspace, tu pourras les charger.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/02/2014, 15h32
  2. Recherche automatique de fichier par le programme
    Par dragondumond dans le forum VB.NET
    Réponses: 7
    Dernier message: 21/06/2013, 16h12
  3. envoi automatique de fichier par mail
    Par ellewided dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/08/2009, 19h27
  4. Réponses: 1
    Dernier message: 27/08/2007, 15h01
  5. Traitement automatique fichier
    Par billoum dans le forum Apache
    Réponses: 10
    Dernier message: 16/06/2006, 13h40

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