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 ascii dans dossiers


Sujet :

MATLAB

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut Traitement ascii dans dossiers
    Bonjour,

    Voilà mon problème : j'ai pas mal de données dans différents dossiers:
    Tous les fichiers ASCII sont de la forme:

    AnnéeJourMois_HeureMinuteSecondeMilième (ex: 090204_12054585 = 4 février 2009 à 12h 05 minutes 45 secondes 85 millième)

    Tous ces fichiers sont classés sont des dossiers avec une arborescence : Année > mois > jour > heure (ex: 090204_12054585 se trouve dans C:\2009\02\04\12 avec d'autres fichiers de la même heure)

    J'aimerais pouvoir ouvrir et lire et traiter un à un tous les signaux de l'année 2009.

    Mais je n'arrive même pas à utiliser la commande cd sous matlab windows il me met ce message d'erreur :

    cd D:\Travail\DOSSIER TEST\TEST BOUCLE\test1
    ??? Error using ==> cd
    Too many input arguments.

    Error in ==> OuvertureFichier_2 at 5
    cd D:\Travail\DOSSIER TEST\TEST BOUCLE\test1
    Quelqu'un aurait il une idée, une façon de traiter toutes ces données de façon la plus simple possible (car bcp de données..). J'imagine qu'il suffit simplement de faire des boucles mais je ne m'y connais pas pour les boucles dans des dossiers avec du texte etc...

    Merci beaucoup d'avance !

  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 317
    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 317
    Par défaut
    C'est l'espace dans le nom qu chemin qui pose problème ici.
    C'est généralement une règle à respecter en programmation : pas d'espace, ni de caractère accentué, ni caractère spécial dans le nom des répertoires...

    Essaie comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cd('D:\Travail\DOSSIER TEST\TEST BOUCLE\test1')
    Je pense aussi que la fonction DIR te sera très utile ici : Comment lister les fichiers d'une certaine extension dans un répertoire ?

    A noter que DIR retourne la liste des fichiers et des sous-répertoires

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Merci, effectivement cela marche.

    En ce qui concerne dir, oui j'avais déjà lu ce petit tuto bien fait. Ce qu'il me manque particulièrement c'est la mise en forme des boucles..
    Par exemple si j'ai deux dossiers avec dans chaque 4 fichiers du style :

    c:\2008\01\02\01

    080102_01050806.txt
    080102_01250506.txt
    080102_01950807.txt
    080102_01250846.txt

    c:\2008\01\03\04

    080103_04865645.txt
    080103_04128545.txt
    080103_04080645.txt
    080103_04748789.txt
    Comment écrire une boucle simple qui lirait les fichiers un par un des deux dossiers ?

    Merci d'avance

  4. #4
    Expert confirmé
    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
    Par défaut
    Dans un cas comme celui-ci il faut utiliser la récursivité.
    Tu peux en voir un exemple en éditant la fonction GENPATH de MATLAB.

  5. #5
    Membre expérimenté
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Par défaut
    Citation Envoyé par Newenda Voir le message
    Merci, effectivement cela marche.

    En ce qui concerne dir, oui j'avais déjà lu ce petit tuto bien fait. Ce qu'il me manque particulièrement c'est la mise en forme des boucles..
    Par exemple si j'ai deux dossiers avec dans chaque 4 fichiers du style :



    Comment écrire une boucle simple qui lirait les fichiers un par un des deux dossiers ?

    Merci d'avance
    Si tu veux lire les fichiers d'un dossier un par un, essaie ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    temp = dir('nomDuDossier');
    listeFichiers = {temp.name}
    Si tu veux lire tous les fichiers d'un gros dossier et de ses sous-dossiers, regarde la fonction rdir dans Matlab Central

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Merci, je vais essayer

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Merci, j'ai essayé ça :

    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
    clear all
    close all
     
    A=rdir('D:\Travail\DOSSIER_TEST\TEST_BOUCLE\test0*\*.txt');
     
    for p=1:size(A,1)
     
        fid=fopen(A(p).name,'r');
     
        %% Traitement du fichier
     
        N = 15; % N = Nombre de ligne à passer
        for n=1:N;
            fgetl(fid);
        end;
     
        %fréquence échantillonage
        f_ech = 10000;
     
        %tmax = temps d'enregistrement d'un événement
        tmax = 0.5002;
     
        %axe de temps
        t = [0:1/f_ech:tmax-1/f_ech];
        t=t';
     
        % Lecture des données qui se trouvent sur deux colonnes
        donnee=fscanf(fiche,'%g %g',[2 inf]);
     
        % Mettre le vecteur de donnees dans le bon ordre
        donnee=donnee';
     
        voie1 = donnee(:,1);
        voie2 = donnee(:,2);
     
     
        voie1_fft = fft(voie1);
     
        %fréquence pas
        freq = [0:1/tmax:f_ech-1/tmax];
        freq = freq';
        %spectre d'énergie
     
        spi = abs(voie1_fft).^2; %voie1_fft.*conj(voie1_fft)
     
        figure
        plot(freq, spi);
     
        fclose(fid);
     
    end
    Mais il me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> fgetl
    Invalid file identifier.
     
    Error in ==> OuvertureFichier_3 at 13
    fgetl(fid);
    La ligne 13 (erreur) est au niveau de la boucle pour dépasser l'entête du fichier.. pourquoi ne reconnait il pas le fid à cet endroit, Il semble pourtant ne pas y avoir de raison !

    Merci

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    As-tu au moins vérifié ce que contenait la variable A ?

    Sinon, il manque un paramètre dans le FOPEN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fid=fopen(A(p).name,'rt');

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    A =

    56x1 struct array with fields:
    name
    date
    bytes
    isdir
    Y'a un rapport avec le n° du fid?

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Je voulais surtout savoir si tu avais vérifié chaque champs name de la structure A

    Tapes ceci à l'invite de commandes et vérifies chaque valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A=rdir('D:\Travail\DOSSIER_TEST\TEST_BOUCLE\test0*\*.txt');
    A.name
    Sinon, la variable fid contient une valeur particulière. Pour faire simple, si la commande FOPEN réussi à ouvrir le fichier, fid a pour valeur 3 sinon si FOPEN échoue, alors la valeur de fid sera -1

    C'est pour cela que l'on fait généralement le test suivant juste après FOPEN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fid = fopen(...);
    if fid == -1
       error(...);
    end

Discussions similaires

  1. Droits d'acces aux fichiers dans dossier en partage
    Par catoucat dans le forum Windows XP
    Réponses: 3
    Dernier message: 03/07/2006, 02h47
  2. [C#] probleme ascii dans un chaine
    Par Cirdan Telemnar dans le forum C#
    Réponses: 4
    Dernier message: 15/06/2006, 09h48
  3. Fermeture avec traitement long dans le onActivate
    Par benj63 dans le forum C++Builder
    Réponses: 14
    Dernier message: 20/03/2006, 18h54
  4. Signification de codes ASCII dans OnKeyPress
    Par e-ric dans le forum Langage
    Réponses: 5
    Dernier message: 19/08/2005, 10h33
  5. Import fichier ASCII dans une base
    Par pithier dans le forum Bases de données
    Réponses: 3
    Dernier message: 01/02/2005, 19h03

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