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 :

Séparateur de texte et rangement de données dans une matrice


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Séparateur de texte et rangement de données dans une matrice
    Bonjour à tous

    J'ai un petit problème sous Matlab.

    Voila je voudrais lire des valeurs au formats texte et les ranger dans une matrice.
    Il s'agit de données binaires que j'ai transformé au format texte (plusieurs millions de données par fichier 55méga au format .txt)
    Une fois que je suis sur la bonne ligne et après avoir lu cette ligne je n'arrive pas à extraire les valeurs seules et à les ranger dans ma matrice.

    Voila un aperçu du début des data qui sont des latitudes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    data:
     
    lat = 88.542, 86.6531, 84.7532, 82.8508, 80.9473, 79.0435, 77.1394, 75.2351, 
        73.3307, 71.4262, 69.5217, 67.6171, 65.7125, 63.8079, 61.9033, 59.9986, 
        58.0939, 56.1893, 54.2846, 52.3799, 50.4752, 48.5705, 46.6658, 44.7611,
    je voudrais avoir un vecteur latitude avec toutes mes valeurs lat(88.542,86.6531,84.7532...)

    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
    while feof(fid)==0  
    line=fgetl(fid)
        if findstr(line,'data:')
        line=fgetl(fid);  %on saute la  ligne vide
            for cmp=1:13         %cmp est un compteur de ligne
            latitude=fgetl(fid)   %lecture de la premiere ligne
            [lati,latinew]=strtok(latitude,',')
            lat(1:i)=lati
                while latinew ~=0
                i=i+1;
                [dechet,latinew]=strtok(latinew,' ')   %recupere les valeurs dans lati
                [lati,latinew]=strtok(latinew,',')        %et  les espace deviennent dechets
                lat(1:i)=lati
                end
            cmp=cmp+1;    
            end
      ........
    plusieurs probléme: il ne me range pas les valeurs de lati, il ne reconnait pas la valeur dans lati comme un nombre (j'ai essayer un str2num et meme combat)
    je ne vois plus trop comment m'y prendre j'ai essayer pas mal de choses
    En espérant que vous pourrez m'aider
    D'avance je vous remercie

  2. #2
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    strtok n'est pas vraiment l'idéal ici.
    Pour commencer il faut déjà enlever le "lat=" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    latitude=fgetl(fid)   %lecture de la premiere ligne
    %enlever le "lat="
    idx=findstr(latitude,'=');
    if ~isempty(idx)
        latitude(1:idx)='';
    end
    Ce qui permet ensuite de n'avoir que des chiffres que tu n'es pas obligé de lire 1 par 1.
    Tu peux faire directement :Ensuite tu as oublié de nous dire :
    - c'est quoi la variable i ? Es-tu conscient que lat(1:i) veut dire variable lat de la position 1 à la position i ?
    - Tu as plusieurs jeux de données dans ton fichier : cela recommence-t-il par "data:" ou par "lat=" ?

    Une erreur classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for cmp=1:13         %cmp est un compteur de ligne
               %blabla
               cmp=cmp+1;
    end
    Le "cmp=cmp+1" ne sert à rien puisque cmp est incrémenté par la boucle FOR-END

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Merci Mr Samourai pour la présentation.

    Et vraiment merci Caro95170 pour une tortue tu répond vachement vite...

    Donc c'est ok le lat s'en va et je me retrouve avec la variable lat qui vaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    latitude =
     
     lat = 88.542, 86.6531, 84.7532, 82.8508, 80.9473, 79.0435, 77.1394, 75.2351, 
     
     
    lat =
     
       88.5420   86.6531   84.7532   82.8508   80.9473   79.0435   77.1394   75.2351
    donc ici pour les valeurs de latitude je veut les ranger dans la variable lat avec la premiere valeur dans la premiere colonne, la deuxième dans la deuxième colonne.... le tout sur une seule ligne. Lat sera une dimension 1 ligne et 94 valeurs de latitudes
    La variable i était un compteur qui me permettait de faire varier la colonne de lat pour le rangement des valeurs.
    Donc là j'avoue je sais pas comment lui dire de me ranger les valeurs.

    Ensuite oui dans mon fichier:
    - valeurs de latitude comme là
    - valeurs de longitude commence par long = (donc idem que latitude)
    - Valeurs de vitesses commençant par time =
    - valeurs de vitesses de vent commence par valeurs (toutes négatives sur le fichier)

    Je ne connais pas la taille maxi d'une matrice sous Matlab (et si il y en a une)
    donc je pense directement extraire les données qui m'interessent c'est à dire point de latitude et longitude demandé à l'utilisateur en lisant le fichier.


    Le "cmp=cmp+1" ne sert à rien puisque cmp est incrémenté par la boucle FOR-END
    ça c'est les reflexes du C qui restent...

    Merci beaucoup pour votre aide

  4. #4
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    Donc si j'ai bien compris :
    - tu n'as qu'une fois lat= dans ton fichier
    - tu veux concaténer toutes les valeurs dans un vecteur ligne
    - tu es sur que tu as 13 lignes (sinon il faut trouver un moyen pour savoir quand ça s'arrête)
    Tu peux t'inspirer de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    lat=[];%initialisation en dehors de la boucle
    %...
            for cmp=1:13         %cmp est un compteur de ligne
               latitude=fgetl(fid)   %lecture de la premiere ligne
               %enlever le "lat="
               idx=findstr(latitude,'=');
               if ~isempty(idx)
                   latitude(1:idx)='';
               end
               %Concaténation horizontale
               lat = [lat, str2num(latitude)];       
            end
    Et faire pareil pour les autres.
    Pour la taille maxi, la limitation se fait plus au niveau de la mémoire :
    voir : Out of memory. Type HELP MEMORY for your options.

    Et sinon un bon tuto pour la gestion des matrices : Gestion des matrices

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Merci encore Caro j'ai de bonnes pistes je pense m'en sortir tout seul maintenant
    et encore un petit bravo pour la rapidité

Discussions similaires

  1. [Débutant] Tri de données dans une matrice et sélection
    Par lFantasyz dans le forum MATLAB
    Réponses: 6
    Dernier message: 05/05/2014, 10h36
  2. Index d'une valeur donnée dans une matrice
    Par Gouasmi_moh dans le forum MATLAB
    Réponses: 1
    Dernier message: 21/03/2011, 13h38
  3. Réponses: 3
    Dernier message: 28/03/2010, 15h05
  4. Réponses: 8
    Dernier message: 09/07/2006, 14h42
  5. affichage de données dans une zone de texte
    Par Lamie dans le forum Access
    Réponses: 2
    Dernier message: 06/07/2006, 15h31

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