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 :

Lecture fichier texte complexe


Sujet :

MATLAB

  1. #1
    Membre confirmé
    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
    Points : 476
    Points
    476
    Par défaut Lecture fichier texte complexe
    Bonjour,

    J'ai un fichier data.txt de données assez complexe à lire :

    Model:
    LAYER H(km) Vp(km/s) Vs(km/s) Density QA(inv) QB(inv)
    1 0.00200 1.00000 0.50000 1.80000 0.00000 0.00000
    2 0.00200 2.00000 0.70000 1.80000 0.00000 0.00000
    3 0.00200 2.00000 0.70000 1.80000 0.00000 0.00000
    4 0.00200 2.00000 1.30000 1.80000 0.00000 0.00000
    [...]
    25 0.00200 3.00000 1.10000 1.80000 0.00000 0.00000


    RAYLEIGH WAVE MODE # 0
    T = 0.5000E-01 C = 0.1021E+01 U = 0.1053E+01
    AR= 0.5353E+01 GAMMA= 0.0000E+00 ZREF= 0.0000E+00
    M UR TR UZ TZ DC/DH DC/DA DC/DB DC/DR
    1 0.142E+01 0.000E+00 0.100E+01 0.000E+00 -0.161E+02 0.000E+00 0.519E-01 -0.179E-01
    2 0.112E+01 -0.166E+02 0.112E+01 -0.632E+02 -0.186E+01 0.000E+00 0.685E-01 -0.883E-02
    3 0.843E+00 0.373E+02 0.128E+01 -0.129E+03 -0.186E+01 0.000E+00 0.424E-01 -0.125E-01
    4 0.664E+00 0.946E+02 0.137E+01 -0.189E+03 0.355E+01 0.000E+00 -0.897E-02 -0.633E-02
    [...]
    25 -0.109E+00 0.911E+02 0.302E+00 -0.598E+02 0.000E+00 0.000E+00 0.396E-01 0.561E-02


    RAYLEIGH WAVE MODE # 0
    T = 0.5556E-01 C = 0.1017E+01 U = 0.1053E+01
    AR= 0.5072E+01 GAMMA= 0.0000E+00 ZREF= 0.0000E+00
    M UR TR UZ TZ DC/DH DC/DA DC/DB DC/DR
    1 0.136E+01 0.000E+00 0.100E+01 0.000E+00 -0.145E+02 0.000E+00 0.467E-01 -0.163E-01
    2 0.110E+01 -0.129E+02 0.111E+01 -0.505E+02 -0.188E+01 0.000E+00 0.650E-01 -0.785E-02
    3 0.851E+00 0.295E+02 0.125E+01 -0.103E+03 -0.188E+01 0.000E+00 0.405E-01 -0.114E-01
    4 0.679E+00 0.741E+02 0.134E+01 -0.152E+03 0.357E+01 0.000E+00 -0.765E-02 -0.537E-02
    [...]
    25 -0.131E+00 0.981E+02 0.361E+00 -0.655E+02 0.000E+00 0.000E+00 0.591E-01 0.846E-02
    Il est composé d'une première partie qui est le modèle (ici des paramètres de sol en fonction de la profondeur): il a 25 lignes (25 couches de sol) dans ce cas mais peut varier suivant les modèles qu'on utilise.
    Et ensuite le fichier se compose de plusieurs tableaux de données à la suite qui commencent par la ligne RAYLEIGH WAVE MODE # 0 (en faite chaque tableau correspond à une solution pour une période T donnée)

    Je pense pouvoir récupérer les valeurs du modèle comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    fid = fopen('data.txt');
    C = textscan(fid,'%f%f%f%f%f%f%f','headerlines',2);
    fclose(fid);
    layer = C{1} ;
    epaisseur = C{2} ;
    [...]
    mais ensuite je ne sais pas trop. Dans l'idée j'aimerais qu'il s'arrête à chaque

    qu'il note cette valeur (c'est la période). Ensuite qu'il saut 2 lignes et lise tout le tableau jusqu'à un nouveau tableau de données.

    Merci d'avance.
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  2. #2
    Membre confirmé
    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
    Points : 476
    Points
    476
    Par défaut
    J'essaye de m'en sortir avec textscan mais j'aurais une question plus précise:

    j'isole une ligne du fichier, c'est une chaine de caractère (noté a) avec des paramètres (M, UR, TR etc...) espacés de plusieurs espaces :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a =
     
    M       UR         TR        UZ         TZ        DC/DH      DC/DA      DC/DB      DC/DR
    J'aimerais isolé ces paramètres de manière simple et générique.

    Car pour l'instant je n'ai qu'une solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a(1) = M
    a(9:10) = UR
    [...]
    mais cela n'est ni généralisable ni pratique puisqu'il faut compter les espaces entre chaque paramètres.

    Merci
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Pour lire ce genre de fichier, je préconise de faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fid = fopen('data.txt');
    C = textscan(fid, '%s', 'delimiter', '\n');
    fclose(fid);
    Tu obtiens un tableau de cellules avec le contenu de chaque ligne du fichier dans chaque cellule (sous forme de chaines de caractères).

    Tu peux ensuite utiliser les fonctions strcmp/strncmp pour délimiter les indices de début et de fin des blocs de données à extraire.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. Lecture fichier texte
    Par vince-60 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/04/2006, 14h15
  2. [VB]Probleme lecture fichier text et affichage
    Par clochardevobsy dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/03/2006, 08h46
  3. lecture fichier texte et ...
    Par Nils30 dans le forum Langage
    Réponses: 5
    Dernier message: 12/01/2006, 11h55
  4. lecture fichier text et renvoi du contenu en byte *
    Par JulienT dans le forum Réseau
    Réponses: 3
    Dernier message: 02/01/2006, 13h21
  5. Lecture fichier text
    Par krfa1 dans le forum ASP
    Réponses: 13
    Dernier message: 25/11/2005, 08h00

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