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 :

Récupérer uniquement des données particulières dans un fichier texte


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Récupérer uniquement des données particulières dans un fichier texte
    Bonjour a tous(tes)

    C'est la première fois que je me connecte sur ce site je l'ai trouvé par hasard
    Il est tres bien et je tiens sincerement à remercier l'équipe developpez.com

    Je dois lire ce fichier et ce qui m'intéresse, ce sont les numeros de bus tels que
    • 124 ,135
    • 125 ,1140
    • 126 ,1141
    • ...
    En fait, il y a un saut de lignes entre chaque couple de bus ; ce qu'il y a entre les bus ne m'intérresse pas

    Le fichier mat.raw :
    0 / END OF BRANCH DATA, BEGIN TRANSFORMER DATA
    124, 1135, 0,'1 ',1,1,1, 0.00000, 0.00000,2,' ',1, 1,1.0000
    0.00000, 0.03910, 100.00
    1.00000, 0.000, 0.000, 320.00, 0.00, 0.00, 1, 1135, 1.10000, 0.90000, 0.99068, 0.95421, 17, 0, 0.00000, 0.00000
    1.00000, 0.000
    125, 1140, 0,'1 ',1,1,1, 0.00000, 0.00000,2,' ',1, 1,1.0000
    0.00000, 0.10420, 100.00
    1.00000, 0.000, 0.000, 120.00, 0.00, 0.00, 1, 1140, 1.10000, 0.90000, 0.98581, 0.94952, 17, 0, 0.00000, 0.00000
    1.00000, 0.000
    126, 1141, 0,'1 ',1,1,1, 0.00000, 0.00000,2,' ',1, 1,1.0000
    0.00000, 0.03910, 100.00
    1.00000, 0.000, 0.000, 320.00, 0.00, 0.00, 1, 1141, 1.10000, 0.90000, 0.99110, 0.95462, 17, 0, 0.00000, 0.00000
    1.00000, 0.000
    J'ai fait ce petit test :
    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
    function kaki
    raww =  input('please enter RAW Common Data Format file name --- ', 's');
    mat = input('please enter MATLAB file name                --- ', 's');
    fid = fopen(raww, 'r');
    while 1	
        	line = fgetl(fid);
        	if line(5:16) == 'END OF BRANC',
                break, 
            end
    end
    ibus = 0;
    while 1
    	line = fgetl(fid);
     
    	if line(1:4) == '-999', 
            break,
        end
    ibus = ibus + 1;
    	bus(ibus, 1) = str2num(line(3:6)); 				% bus number
     
    end
    merci d'avance pour votre précieuse aide

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 165
    Points : 137
    Points
    137
    Par défaut
    Je ne saisie pas tes boucles

    je vois un truc comme:
    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
     
     
    fid = fopen(filename);
     
    % skip first line
    linein = fgetl(fid);
     
    row = 1;
    while S == 'END OF BRANC'
        S= sscanf(linein,'%d');
        BusNum(row,:) 
        linein = fgetl(fid);
        row = row + 1;
    end
     
    fclose(fid);
    A tester, la condition à revoir...
    Bonne nuit
    je suis

  3. #3
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    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
    % etape 1 lire tout le fichier dans un tableau de cellules, 
    % une ligne du fichier dans une ligne de la matrice
    A=textread(filename, '%s', 'delimiter', '\n', 'whitespace', '') ;
     
    % etape 2 parcourir la matrice et aller a la pêche aux donnee
    M=[] ; % matrice vide
    L = length(A) ; % nombre de lignes lues dans le fichier
    line = 1 ; % la première ligne que je vais traiter
    while line<L
        Ax = A{line} ; % noter les acolades ouvrantes et fermantes
        if Ax(1:5) == 'blabla', continue, end % saute les lignes que tu veux pas
        [a,b] = strread(Ax, '%f, %f') ;
        if a>1 && b>1 % si les deux nombres sont >1 c'est bon je suis sur la bonne ligne
           M = [M ; a b] ; % stock dans le tableau final
           line = line + 4 ; % je sais que apres il y a 3 lignes ki servent a rien
        end % de if
    end % de while
    A adapter et a debugger selon tes besoins.
    C'est le canevas général que j'utilise pour toutes les lectures E/S ASCII
    Regarde quand meme dans le forum avec un search. Ce n'est pas la seule methode. Il y en a des mieux aussi. Disons que celle la s'adapte a la plupart de mes besoins donc j'ai pas été chercher dans la beauté.
    Bonne chance, OL

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 955
    Points
    52 955
    Par défaut
    Dans le genre, méthode brutale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    X=textread('data.txt','%s','headerlines',1,'delimiter',',');
     
    str2num(char(X{1:35:end}))
    str2num(char(X{2:35:end}))
    Sinon la méthode plus propre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fid=fopen('data.txt','rt');
     
    fgetl(fid);
     
    M=fscanf(fid,['%d,%d,%*d,%*s %*c,%*d,%*d,%*d,%*f,%*f,%*d,%*s %*c,%*d,%*d,%*f\n'...
            '%*f,%*f,%*f\n'...
            '%*f,%*f,%*f,%*f,%*f,%*f,%*d,%*d,%*f,%*f,%*f,%*f,%*d,%*d,%*f,%*f\n'...
            '%*f,%*f\n'],[2,inf]);
     
    fclose(fid);
    M
    Remarque : il y a une petite bidouille () pour lire les champs '1 ' <=> %*s %*c
    il doit y avoir moyen de résoudre ce petit problème mais rien ne me vient à l'esprit pour l'instant

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/02/2009, 09h46
  2. Réponses: 3
    Dernier message: 04/01/2007, 18h42
  3. Transposer des données sql dans un fichier texte
    Par Anakior dans le forum Outils
    Réponses: 3
    Dernier message: 11/12/2005, 11h01
  4. récupérer des données saisies dans un fichier
    Par natie_49 dans le forum C++
    Réponses: 6
    Dernier message: 24/11/2005, 12h29
  5. [JList] Lecture des données sauvegardées dans un fichier
    Par Myogtha dans le forum Composants
    Réponses: 7
    Dernier message: 10/06/2004, 22h05

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