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 :

Extraire des données d'un fichier texte


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Extraire des données d'un fichier texte
    Bonjouur,
    SVP est ce que vous pouvez m'aidez j'ai un fichier txt de 47000 ligne et quelque,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    6899,W,0.00,,140409,,,A*6E
    $GPGGA,154632.000,3544.1947,N,00553.6899,W,1,08,1.2,28.7,M,47.4,M,,0000*78
    $GPGSA,A,3,27,28,24,10,08,07,15,26,,,,,2.1,1.2,1.7*33
    $GPGSV,3,1,11,10,80,306,34,08,56,041,39,27,40,233,37,28,38,118,42*7C
    $GPGSV,3,2,11,15,30,292,21,24,27,291,29,26,20,285,34,02,20,203,*78
    $GPGSV,3,3,11,07,16,045,29,21,02,325,,04,00,175,*41
    $GPRMC,154632.000,A,3544.1947,N,00553.6899,W,0.00,,140409,,,A*6D
    ....
    Et moi je veux juste extraire les lignes commençant par $GPRMC
    SVP je suis bien bloqué.....

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Points : 6
    Points
    6
    Par défaut
    Salut,

    à ce que je vois tu récupères des données d'un système GPS.
    Je te conseille d'utiliser la fonction :
    Tu peux la récupérée dans un des message que Magelan a posté sur la discussion intitulée "traitement des données". Après tu tapes dans command window :
    Et tu auras toute les infos concernant cette fonction.

    Mais n'oublie pas de mettre cette fonction (fichier.m) dans le répertoire où se trouve ton projet et ton fichier.txt

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Points : 6
    Points
    6
    Par défaut
    Tiens voici pour télécharger la fonction http://www.mathworks.com/matlabcentr.../18430-txt2mat

    Ps : quand tu mets du code utilise les balises code, c'est représenté par un bouton #. La Magelan l'a fait pour toi.

  4. #4
    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
    Salut,

    là, c'est un peu plus compliqué, tes lignes mélangent chaînes de caractères et valeurs numériques, le nombre de données séparées par des virgules est différent à chaque lignes...

    je pense que tu vas devoir utiliser les fonctions de bas niveau, voici un exemple :
    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
    % Ouverture du fichier
    fid=fopen('nom_du_fichier.txt','rt');
     
    %lecture de la première ligne
    tline = fgetl(fid);
     
    mat = [];
    while tline~=-1
        % On récupère toutes les données de la ligne séparées par des virgules
        a = strread(tline,'%s','delimiter',',');
        % On test si la première donnée est $GPRMC
        if strcmp(a{1},'$GPRMC')
            % par exemple, on récupère la valeur numérique à la deuxième
            % position sur la ligne
            mat = [mat a{2}];
        end
        tline = fgetl(fid);
    end
    fclose(fid);
    C'est l'idée...

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par magelan Voir le message
    Salut,

    là, c'est un peu plus compliqué, tes lignes mélangent chaînes de caractères et valeurs numériques, le nombre de données séparées par des virgules est différent à chaque lignes...

    je pense que tu vas devoir utiliser les fonctions de bas niveau, voici un exemple :
    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
    % Ouverture du fichier
    fid=fopen('nom_du_fichier.txt','rt');
     
    %lecture de la première ligne
    tline = fgetl(fid);
     
    mat = [];
    while tline~=-1
        % On récupère toutes les données de la ligne séparées par des virgules
        a = strread(tline,'%s','delimiter',',');
        % On test si la première donnée est $GPRMC
        if strcmp(a{1},'$GPRMC')
            % par exemple, on récupère la valeur numérique à la deuxième
            % position sur la ligne
            mat = [mat a{2}];
        end
        tline = fgetl(fid);
    end
    fclose(fid);
    C'est l'idée...

    D'abord Mercii bien pou l'interet que vous avez portez à mon prebleme
    qui est exactement comme vous l'avez décrit mais comme j'ai testé les insstruction que vous m'avez donné j'obtient comme resultat
    mat =

    154632.000154633.000154634.0
    alors que moi je veux une matrice de 3 colone contenant les trois donné par exemple:
    154632 3544.1947 00553.6899
    154633 3544.1947 00553.6899
    ....

  6. #6
    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
    Il suffit de remplacer :
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mat=[mat;a(2) a(4) a(6)];

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par magelan Voir le message
    Il suffit de remplacer :
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mat=[mat;a(2) a(4) a(6)];
    Mercii j'ai déjà essayé ça hier mais le probléme c'etait " ; " ,et mnt ça va Mercii bien

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Pardonez moi , Mais si je veux effectuer certaines opérations pour les éléments de cette matrice, par ex au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mat=[mat;a(2) a(4) a(6)];
    je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mat=[mat;a(2) a(4) cos(a(6))*111 ];
    j'ai testé mais ça donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ??Function 'cos' is not defined for values of class 
    'cell'.
    alors commnet je peut remédier à ce problème

    je pense que le probléme revient au type de ces variables 'string'...

    Merci d'avance

  9. #9
    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
    Le code que je t'ai donné était censé servir d'exemple pour que tu puisses le comprendre et t'en inspirer, mais si tu es débutantes avec MATLAB, c'est vrai que ce code peut paraître un peu obscur...

    Soit tu modifies la façon de lire le ligne avec strread, soit tu convertis les string en double en utilisant str2double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mat=[mat;str2double(a{2}) str2double(a{4}) cos(str2double(a{6}))*111 ];

Discussions similaires

  1. extraire des données depuis un fichier text
    Par marouene_ dans le forum Général Java
    Réponses: 1
    Dernier message: 22/06/2011, 00h23
  2. Extraire des données d'un fichier texte
    Par damilari dans le forum MATLAB
    Réponses: 8
    Dernier message: 12/06/2009, 16h25
  3. Extraire des données d'un fichier texte
    Par fredfaz dans le forum Langage
    Réponses: 2
    Dernier message: 28/02/2009, 06h24
  4. Réponses: 2
    Dernier message: 22/06/2008, 15h41
  5. Extraire des donnés d'un fichier texte
    Par sadsad dans le forum Langage
    Réponses: 2
    Dernier message: 07/02/2006, 15h09

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