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 :

Extraction de données texte


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 16
    Points
    16
    Par défaut Extraction de données texte
    Bonjour j'aimerais extraire des données d'un fichier.out et les importer dans Matlab.
    Par exemple soit le fichier suivant:
    THERMODYNAMIC EQUILIBRIUM PROPERTIES AT ASSIGNED

    TEMPERATURE AND PRESSURE

    CASE =

    REACTANT MOLES ENERGY TEMP
    CAL/MOL K
    FUEL H2 1.0000000 0.000 0.000
    OXIDANT Air 1.0000000 0.000 0.000

    O/F= 34.29623 %FUEL= 2.833164 R,EQ.RATIO= 1.000000 PHI,EQ.RATIO= 1.000000

    THERMODYNAMIC PROPERTIES

    P, ATM 1.0000 1.0000 0.10000 0.10000 0.01000 0.01000
    T, K 3000.00 2000.00 3000.00 2000.00 3000.00 2000.00
    RHO, G/CC 9.1781-5 1.4989-4 8.0851-6 1.4955-5 6.6136-7 1.4875-6
    H, CAL/G 663.71 -203.57 1369.55 -191.83 2647.10 -164.35
    U, CAL/G 399.86 -365.13 1070.02 -353.76 2280.92 -327.16
    G, CAL/G -7974.53 -5290.41 -8616.70 -5662.79 -9380.96 -6036.51
    S, CAL/(G)(K) 2.8794 2.5434 3.3287 2.7355 4.0094 2.9361

    M, (1/n) 22.594 24.600 19.903 24.544 16.281 24.412
    (dLV/dLP)t -1.03442 -1.00064 -1.07867 -1.00146 -1.07479 -1.00358
    (dLV/dLT)p 1.6957 1.0205 2.5333 1.0463 2.4133 1.1111
    Cp, CAL/(G)(K) 1.6816 0.4552 3.4398 0.5215 3.7168 0.6858
    GAMMAs 1.1312 1.2258 1.1206 1.2026 1.1318 1.1668
    SON VEL,M/SEC 1117.5 910.3 1185.1 902.7 1316.8 891.5

    MOLE FRACTIONS

    *Ar 0.00710 0.00773 0.00625 0.00771 0.00511 0.00767
    *CO 0.00017 0.00001 0.00018 0.00002 0.00017 0.00004
    *CO2 0.00007 0.00025 0.00003 0.00024 0.00001 0.00022
    *H 0.04075 0.00009 0.14289 0.00041 0.31894 0.00186
    HO2 0.00001 0.00000 0.00001 0.00000 0.00000 0.00000
    *H2 0.06728 0.00306 0.08272 0.00638 0.04121 0.01319
    H2O 0.20730 0.34207 0.09579 0.33714 0.01176 0.32637
    *N 0.00001 0.00000 0.00003 0.00000 0.00009 0.00000
    *NO 0.01230 0.00048 0.01371 0.00072 0.00967 0.00107
    *N2 0.58568 0.64414 0.51448 0.64255 0.42158 0.63891
    *O 0.01540 0.00002 0.05787 0.00010 0.14261 0.00047
    *OH 0.04517 0.00113 0.05953 0.00244 0.03275 0.00519
    *O2 0.01876 0.00102 0.02650 0.00228 0.01610 0.00502
    Comment faire pour extraire seulement les données de la rubrique 'THERMODYNAMIC PROPERTIES' et pour les importer dans matlab?
    Merci de me repondre

  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 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 : 53 160
    Points
    53 160
    Par défaut
    Est-ce que la partie suivante est toujours la même (même nombre de lignes, même ordre,...) dans les fichiers

    THERMODYNAMIC PROPERTIES

    P, ATM 1.0000 1.0000 0.10000 0.10000 0.01000 0.01000
    T, K 3000.00 2000.00 3000.00 2000.00 3000.00 2000.00
    RHO, G/CC 9.1781-5 1.4989-4 8.0851-6 1.4955-5 6.6136-7 1.4875-6
    H, CAL/G 663.71 -203.57 1369.55 -191.83 2647.10 -164.35
    U, CAL/G 399.86 -365.13 1070.02 -353.76 2280.92 -327.16
    G, CAL/G -7974.53 -5290.41 -8616.70 -5662.79 -9380.96 -6036.51
    S, CAL/(G)(K) 2.8794 2.5434 3.3287 2.7355 4.0094 2.9361

    M, (1/n) 22.594 24.600 19.903 24.544 16.281 24.412
    (dLV/dLP)t -1.03442 -1.00064 -1.07867 -1.00146 -1.07479 -1.00358
    (dLV/dLT)p 1.6957 1.0205 2.5333 1.0463 2.4133 1.1111
    Cp, CAL/(G)(K) 1.6816 0.4552 3.4398 0.5215 3.7168 0.6858
    GAMMAs 1.1312 1.2258 1.1206 1.2026 1.1318 1.1668
    SON VEL,M/SEC 1117.5 910.3 1185.1 902.7 1316.8 891.5
    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)

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    Non le seul critere de recherche est le nom du paragraphe et le nom du paragraphe suivant.
    Par exemple ici je veux extraire les données entre 'THERMODYNAMIC PROPERTIES' et 'MOLE FRACTIONS'
    Le nombre de lignes entre ces deux titres peut varier

  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 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 : 53 160
    Points
    53 160
    Par défaut
    Il faut déjà séparer le bloc de données comprises entre' THERMODYNAMIC PROPERTIES' et 'MOLE FRACTIONS' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    X=textread('data.txt','%s','delimiter','\n');
     
    idxTHERMO=find(strcmp(X,'THERMODYNAMIC PROPERTIES'));
    idxMOLE=find(strcmp(X,'MOLE FRACTIONS'));
     
    X=X(idxTHERMO+2:idxMOLE-2)
    Et maintenant, il faut utiliser STRREAD pour lire chaque ligne de X
    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)

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup pour ta reponse.
    Bonne journée

  6. #6
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    Encore une question:
    Comme precedement, j'ai besoin d'extraire les données comprises entre ' PERFORMANCE PARAMETERS' et ' MOLE FRACTIONS'
    SON VEL,M/SEC 1591.5 1537.9 1381.0 1165.2 944.5 1581.9 1071.8 984.0
    MACH NUMBER 0.000 1.000 2.149 3.332 4.638 0.413 3.848 4.379

    PERFORMANCE PARAMETERS

    Ae/At 1.0000 2.3503 12.238 68.753 1.5800 25.000 50.000
    CSTAR, M/SEC 2332.3 2332.3 2332.3 2332.3 2332.3 2332.3 2332.3
    CF 0.6594 1.2723 1.6645 1.8783 0.2802 1.7684 1.8476
    Ivac, M/SEC 2878.9 3515.5 4167.6 4541.2 3997.6 4348.5 4487.3
    Isp, M/SEC 1537.9 2967.4 3882.1 4380.8 653.6 4124.4 4309.1


    MOLE FRACTIONS

    *H 0.03350 0.02652 0.00793 0.00019 0.00000 0.03226 0.00001 0.00000
    HO2 0.00001 0.00001 0.00000 0.00000 0.00000 0.00001 0.00000 0.00000
    *H2 0.29479 0.29432 0.29711 0.30040 0.30052 0.29466 0.30051 0.30052
    H2O 0.63456 0
    J'utilise comme tu m'as dit:
    X=textread('input.out','%s','delimiter','\n');

    idxPP=find(strcmp(X,' PERFORMANCE PARAMETERS'));
    idxMOLE=find(strcmp(X,' MOLE FRACTIONS'));

    X=X(idxPP+2:idxMOLE-2)
    Mais cette fois ci Matlab me renvoie ce message:
    X =

    Empty cell array: 0-by-1
    Que signifie ce message?
    Je ne vois pourtant pas de difference de format (ou autre) entre cet exemple et le precedent.
    Merci de me repondre

  7. #7
    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 : 53 160
    Points
    53 160
    Par défaut
    Tu as un espace en trop devant PERFORMANCE PARAMETERS et MOLE FRACTIONS dans STRCMP
    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)

  8. #8
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    Ok jpensais pas que c'était important les espaces.
    Matlab maintenant me renvoie
    X =

    [1x87 char]
    [1x87 char]
    [1x87 char]
    [1x87 char]
    [1x87 char]
    Comment faire pour qu'il me renvoie les valeurs demandées?

  9. #9
    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 : 53 160
    Points
    53 160
    Par défaut
    Citation Envoyé par bg56 Voir le message
    Comment faire pour qu'il me renvoie les valeurs demandées?
    Citation Envoyé par Dut Voir le message
    Et maintenant, il faut utiliser STRREAD pour lire chaque ligne de X
    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)

  10. #10
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    jte remercie pour le temps passé pour mon probleme.

    Une derniere petite question. Maintenant j'ai besoin d'extraire des données comme precedement mais cette fois ci le titre du paragraphe a extraire a deja été ecrit avant. Donc y aurait il une option de Matlab qui permetterait de demander d'extraire le paragraphe compris entre le deuxieme 'titre1' et le deuxieme 'titre 2'

    par exemple:
    PERFORMANCE PARAMETERS

    Ae/At 1.0000 75.000
    CSTAR, M/SEC 2332.3 2332.3
    CF 0.6594 1.8861
    Ivac, M/SEC 2878.9 4554.9
    Isp, M/SEC 1537.9 4399.1

    MOLE FRACTIONS

    REACTANT WT FRACTION ENERGY TEMP
    (SEE NOTE) KJ/KG-MOL K
    FUEL H2(L) 1.0000000 -9012.000 20.270
    OXIDANT O2(L) 1.0000000 -12979.000 90.170

    PERFORMANCE PARAMETERS

    Ae/At 1.0000 2.3503 12.238 68.753 1.5800 25.000 50.000
    CSTAR, M/SEC 2332.3 2332.3 2332.3 2332.3 2332.3 2332.3 2332.3
    CF 0.6594 1.2723 1.6645 1.8783 0.2802 1.7684 1.8476
    Ivac, M/SEC 2878.9 3515.5 4167.6 4541.2 3997.6 4348.5 4487.3
    Isp, M/SEC 1537.9 2967.4 3882.1 4380.8 653.6 4124.4 4309.1


    MOLE FRACTIONS
    J'aimerais extraire dans ce cas le dernier paragraphe compris entre 'PERFORMANCE PARAMETERS' et 'MOLE FRACTIONS' sachant que le nombres de lignes entre tous les differents titres de la page peuvent varier.
    Merci encore de m'aider.

  11. #11
    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 : 53 160
    Points
    53 160
    Par défaut
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    X=textread('input.out','%s','delimiter','\n');
    
    idxPP=find(strcmp(X,' PERFORMANCE PARAMETERS'));
    idxMOLE=find(strcmp(X,' MOLE FRACTIONS'));
    
    X=X(idxPP(1)+2:idxMOLE(end)-2)
    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)

  12. #12
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    merci pour ton aide

  13. #13
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    Depuis ce matin j'essaye de trouver un moyen d'extraire des données avec juste le debut de la ligne connu.
    par exemple:
    Pin = 773.3 PSIA
    CASE =

    REACTANT WT FRACTION ENERGY TEMP
    (SEE NOTE) KJ/KG-MOL K
    FUEL H2(L) 1.0000000 -9012.000 20.270
    OXIDANT O2(L) 1.0000000 -12979.000 90.170

    O/F= 5.55157 %FUEL= 15.263517 R,EQ.RATIO= 1.429629 PHI,EQ.RATIO= 1.429629

    CHAMBER THROAT EXIT EXIT EXIT EXIT EXIT EXIT
    Pinf/P 1.0000 1.7392 10.000 100.00 1000.00 1500.00 1.1020 260.19
    P, BAR 53.317 30.655 5.3317 0.53317 0.05332 0.03554 48.382 0.20491
    T, K 3383.84 3185.67 2567.34 1759.89 1115.87 1022.65 3348.69 1468.16
    RHO, KG/CU M 2.4097 0 1.4864 0 3.2778-1 4.8118-2 7.5898-3 5.5210-3 2.2137 0 2.2170-2
    H, KJ/KG -1026.05 -2208.65 -5428.75 -8561.51 -10621.8 -10894.6 -1239.65 -9531.45
    U, KJ/KG -3238.68 -4271.01 -7055.36 -9669.56 -11324.3 -11538.4 -3425.26 -10455.7
    G, KJ/KG -64163.7 -61648.7 -53331.6 -41398.6 -31442.3 -29975.9 -63721.3 -36925.1
    S, KJ/(KG)(K) 18.6586 18.6586 18.6586 18.6586 18.6586 18.6586 18.6586 18.6586

    M, (1/n) 12.716 12.843 13.123 13.206 13.207 13.207 12.739 13.207
    (dLV/dLP)t -1.02010 -1.01475 -1.00325 -1.00006 -1.00000 -1.00000 -1.01912 -1.00000
    (dLV/dLT)p 1.3658 1.2844 1.0761 1.0018 1.0000 1.0000 1.3515 1.0001
    Cp, KJ/(KG)(K) 8.3253 7.4796 4.8799 3.4348 2.9626 2.8912 8.1823 3.2234
    GAMMAs 1.1447 1.1468 1.1725 1.2253 1.2698 1.2784 1.1449 1.2428
    SON VEL,M/SEC 1591.5 1537.9 1381.0 1165.2 944.5 907.2 1581.9 1071.8
    MACH NUMBER 0.000 1.000 2.149 3.332 4.638 4.897 0.413 3.848

    PERFORMANCE PARAMETERS

    Ae/At 1.0000 2.3503 12.238 68.753 93.200 1.5800 25.000
    CSTAR, M/SEC 2332.3 2332.3 2332.3 2332.3 2332.3 2332.3 2332.3
    CF 0.6594 1.2723 1.6645 1.8783 1.9048 0.2802 1.7684
    J'aimerais cette fois ci extraire les données comprises entre la ligne commencant par 'Pinf/P' et celle commencant par 'MACH NUMBER'.
    Je ne sais pas si c'est possible mais en tout cas ca m'arrangerait bien.
    Merci de m'aider.

  14. #14
    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 : 53 160
    Points
    53 160
    Par défaut
    Utilise la fonction STRNCMP à la place de STRCMP
    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. Extraction de données d'un fichier texte
    Par boobz dans le forum Langage
    Réponses: 1
    Dernier message: 30/03/2008, 12h40
  2. Réponses: 4
    Dernier message: 05/02/2008, 12h08
  3. extraction de données à partir d'un fichier text ou xml
    Par bigplayer dans le forum Langage
    Réponses: 3
    Dernier message: 28/03/2007, 18h13
  4. Extraction de données dans un fichier texte en VB6 !
    Par rockroa dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/06/2006, 17h00
  5. Perl: Extraction de données d'un fichier texte ?
    Par fifto dans le forum Langage
    Réponses: 1
    Dernier message: 27/03/2006, 17h01

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