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

Applications et environnements graphiques Discussion :

Extraction des données d'un fichier (output)


Sujet :

Applications et environnements graphiques

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Extraction des données d'un fichier (output)
    Salut a tous,
    je suis assez nouvelle sous linux. J'aimerai savoir comment extraires mes données d'un fichier tres long et volumineux.

    Dans le fichier, seule la partie ou mes données sont organisées tel que suit m'interesse.

    Summary of the potential surface scan:
    N oc oco SCF
    ---- --------- --------- -----------
    1 1.1275 100.0000 -185.77018
    2 1.1375 100.0000 -185.78088
    3 1.1475 100.0000 -185.79049
    4 1.1575 100.0000 -185.79907
    5 1.1675 100.0000 -185.80670
    6 1.1775 100.0000 -185.81342
    7 1.1875 100.0000 -185.81931
    ....
    ....
    ....
    957 1.3875 190.0000 -185.90317
    958 1.3975 190.0000 -185.90217
    959 1.4075 190.0000 -185.90104
    960 1.4175 190.0000 -185.89979
    961 1.4275 190.0000 -185.89844
    ---- --------- --------- -----------


    J'aimerai pouvoir extraire générer une matrice 3*Nt, dont les colonnes sont oc, oco et SCF, puis Nt est 961.

    Merci davance de votre aide precieux.
    Jessica

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 482
    Points
    19 482
    Par défaut
    Citation Envoyé par Jessy2
    J'aimerai pouvoir extraire générer une matrice 3*Nt, dont les colonnes sont oc, oco et SCF, puis Nt est 961.
    ...
    ?
    En terme simple, et avec un exemple du résultat escompté
    ...
    ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Extraction des données
    Je vous remercie de votre reponse, en terme simple,
    une partie de fichier output(volumineux) possede les données suivantes:

    Summary of the potential surface scan:
    N oc oco SCF
    ---- --------- --------- -----------
    1 1.1275 100.0000 -185.77018
    2 1.1375 100.0000 -185.78088
    3 1.1475 100.0000 -185.79049
    4 1.1575 100.0000 -185.79907
    5 1.1675 100.0000 -185.80670
    6 1.1775 100.0000 -185.81342
    7 1.1875 100.0000 -185.81931
    ....
    ....
    ....
    957 1.3875 190.0000 -185.90317
    958 1.3975 190.0000 -185.90217
    959 1.4075 190.0000 -185.90104
    960 1.4175 190.0000 -185.89979
    961 1.4275 190.0000 -185.89844
    ---- --------- --------- -----------


    J'aimerai optenir le resultat suivant:

    1 1.1275 100.0000 -185.77018
    2 1.1375 100.0000 -185.78088
    3 1.1475 100.0000 -185.79049
    4 1.1575 100.0000 -185.79907
    5 1.1675 100.0000 -185.80670
    6 1.1775 100.0000 -185.81342
    7 1.1875 100.0000 -185.81931
    ....
    ....
    ....
    957 1.3875 190.0000 -185.90317
    958 1.3975 190.0000 -185.90217
    959 1.4075 190.0000 -185.90104
    960 1.4175 190.0000 -185.89979
    961 1.4275 190.0000 -185.89844

    dans une matrice.
    Merci d'avance

  4. #4
    Invité
    Invité(e)
    Par défaut
    gni?

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 482
    Points
    19 482
    Par défaut
    pour extraire les données, j'utiliserai sed
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sed -n '/[0-9]\{1,\} [0-9]\.[0-9]\{4\} [0-9]\{3\}\.[0-9]\{4\} -[0-9]\{3\}\.[0-9]\{5\}/{
    /^1/,/^961/p
    }' fichier_ouput > fichier_filtrE
    Ce qui signifie que si une ligne, du fichier_output, correspond au motif :
    au moins un chiffre , un espace , un chiffre , un point , quatre chiffres , un espace , trois chiffres , un point , quatre chiffres , un espace , un tiret , trois chiffres , un point , cinq chiffres
    ET si la ligne commence par 1 jusqu'à 961
    , on la copie (>, en fait on redirige la sortie de la commande) vers fichier_filtrE.

    En espérant que d'autres lignes de ton fichier_output ne correspondent pas au motif.


    Par contre, je ne vois pas ce que tu appelles une matrice...

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 482
    Points
    19 482
    Par défaut
    pour être encore plus précis, on peut ajouter les "symboles" de début (^) et de fin ($) de ligne.

    Mais bon, ça ne fait que l'extraction...

    Pour une solution plus complète de cet exercice, selon ce que tu as déjà appris, il serait préférable d'utiliser perl (je penche plus pour lui), ou awk (saura-t-il tout faire ? y compris les éventuels calculs ?).

  7. #7
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Qu'entends-tu par "obtenir le resultat dans une matrice ? Quel traitement souhaites-tu faire apres ?

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 482
    Points
    19 482
    Par défaut
    Je crois que Jessy2 veut transposer les données, et rendre chaque occurrence "référençable"....
    ce que j'ai pu faire "facilement" avec perl et sa capacité à créer un tableau/hashage* de tableaux

    Le fait est, que des données organisées en ligne et colonnes, séparées par un _même_séparateur_..., constitue un tableau, et une matrice permet de référencer les "cases" du tableau...

    me trompé-je ?

    *je l'ai fait avec un hashage de tableaux, sans savoir quel bénéfice tirer des autrres méthodes... (TIMTOWTDI).. je dédute en perl !

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Extraction des données d'un fichier (output)
    Je vous remercie de votre reponse. En suivant le script ou en faisant simplement selection,copier et coller, matlab reussit a faire tout le reste.

    NOUVEAU

    Mais a present j'ai une nouvelle difficulté avec un truc similaire ou copier et coller ne peut pas arranger.
    J'ai une serie de résultats (j'appelerai cycle) dans le meme fichier. J'ai plusieurs cycles et chaque cycle a plusieurs iteractions, je m'interresse a la derniere valeur de E(CI) ou derniere iteraction de chaque cycle donc un exemple est le suivant:

    ............

    DE(CI)= -0.38565094D+00 E(CI)= -0.18528564055D+03
    NORM(A)= 0.10753052D+01
    Iteration Nr. 12
    **********************
    DE(CI)= -0.38565064D+00 E(CI)= -0.18528564025D+03
    NORM(A)= 0.10753056D+01
    Iteration Nr. 13
    **********************
    DE(CI)= -0.38565091D+00 E(CI)= -0.18528564052D+03
    NORM(A)= 0.10753062D+01
    Iteration Nr. 14
    **********************
    DE(CI)= -0.38565105D+00 E(CI)= -0.18528564066D+03 NORM(A)= 0.10753064D+01
    Iteration Nr. 15
    **********************
    DE(CI)= -0.38565110D+00 E(CI)= -0.18528564071D+03
    NORM(A)= 0.10753065D+01
    ***************************************************************
    .........


    DE(CI)= -0.38590453D+00 E(CI)= -0.18529487718D+03
    NORM(A)= 0.10773856D+01
    Iteration Nr. 14
    **********************
    DE(CI)= -0.38590471D+00 E(CI)= -0.18529487736D+03
    NORM(A)= 0.10773859D+01
    Iteration Nr. 15
    **********************
    DE(CI)= -0.38590478D+00 E(CI)= -0.18529487742D+03
    NORM(A)= 0.10773860D+01

    ***************************************************************
    ..........
    DE(CI)= -0.38573941D+00 E(CI)= -0.18530280532D+03
    NORM(A)= 0.10796065D+01
    Iteration Nr. 14
    **********************
    DE(CI)= -0.38573965D+00 E(CI)= -0.18530280556D+03
    NORM(A)= 0.10796067D+01
    Iteration Nr. 15
    **********************
    DE(CI)= -0.38573972D+00 E(CI)= -0.18530280563D+03
    NORM(A)= 0.10796069D+01

    ***************************************************************
    .........

    DE(CI)= -0.38516582D+00 E(CI)= -0.18530953418D+03
    NORM(A)= 0.10819325D+01
    Iteration Nr. 14
    **********************
    DE(CI)= -0.38516613D+00 E(CI)= -0.18530953449D+03
    NORM(A)= 0.10819328D+01
    Iteration Nr. 15
    **********************
    DE(CI)= -0.38516621D+00 E(CI)= -0.18530953458D+03
    NORM(A)= 0.10819330D+01

    ***************************************************************
    ....................

    Ici je m'interresse uniquement a extraire les dernier E(CI) ci dessus en gras.
    Pour chaque cycle, le nombre d'iterations n'est pas forcement 14 et a la fin chaque cycle, la ligne avec les astéris est présente.

    j'ai essayé grep ''E(CI)= '' monfichier, mais cela copie tous les E(CI) de chaque cycle, or je n'ai besoin que du dernier.

    Question: Comment puis je faire pour obtenir pour chaque cycle, rien que la derniere valeur de E(CI)?

    Je vous remercie davance

    Jessica, Mtl

  10. #10
    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 953
    Points
    52 953
    Par défaut
    Citation Envoyé par Jessy2 Voir le message
    En suivant le script ou en faisant simplement selection,copier et coller, matlab reussit a faire tout le reste.
    Il existe aussi un forum MATLAB sur deveoppez.com

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Je te remercie de ta suggestion.
    Je pense qu'avec un script grep, sed, awk ou tout autre, les choses seront plus faciles.
    Merci de continuer a m'aider.
    Jessica, mtl

  12. #12
    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 953
    Points
    52 953
    Par défaut
    Citation Envoyé par Jessy2 Voir le message
    Je pense qu'avec un script grep, sed, awk ou tout autre, les choses seront plus faciles.
    Pour importer directement le premier fichier dans MATLAB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fid = fopen('data2.txt','rt');
        %Saut de l'entête composée de 3 lignes
        fgetl(fid);
        fgetl(fid);
        fgetl(fid);
        %Lecture des données
        Nt  = fscanf(fid,'%*d%f%f%f', [3,961]); %  
    fclose(fid);
    Pour importer directement le second fichier dans MATLAB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    %Lecture du fichier ligne par ligne
    X = textread('data.txt','%s','delimiter','\n');
     
    % Recherche des lignes de séparation de blocs
    idx = strcmp(X,'***************************************************************');
    % Décalage des indices de -2 lignes vers le haut
    idx(1:2) = [];
    % Lecture des données utiles
    ECI = strread([X{idx}],'%*s%*f%*s%f')
    L'avantage c'est que tu n'as pas à passer par un second fichier text et à ne pas faire de copier/coller. Les variables Nt et ECI sont directement utilisables.

    Maintenant, MATLAB sait aussi exécuter des commandes UNIX et des scripts Perl... au cas où tu souhaites poursuivre dans cette direction. Cela t'éviterais au moins le copier/coller à la main

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Cher Dut,

    Merci de ton script. mes amies diraient que c'est magique et resoud mon probleme.
    Stp, peux expliquer plus en details comment tu l'as ecrit le script 2?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    % Décalage des indices de -2 lignes vers le haut
    idx(1:2) = [];
    % Lecture des données utiles
    ECI = strread([X{idx}],'%*s%*f%*s%f')
    Merci d'avance.
    Jessica, Mtl

  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 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 953
    Points
    52 953
    Par défaut
    J'ai utilisé l'indexage logique : Qu'est-ce que l'indexage logique ?

    Tu peux toujours utiliser l'indexage classique comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    %Lecture du fichier ligne par ligne
    X = textread('data.txt','%s','delimiter','\n');
     
    % Recherche des lignes de séparation de blocs
    idx = find(strcmp(X,'***************************************************************'));
    % Décalage des indices de -2 lignes vers le haut
    idx = idx-2;
    % Lecture des données utiles
    ECI = strread([X{idx}],'%*s%*f%*s%f');
    ...mais... on est pas sur le bon forum

Discussions similaires

  1. Extraction des données dans un fichier cdr
    Par mkachekh dans le forum Général Java
    Réponses: 1
    Dernier message: 26/03/2010, 14h11
  2. Extraction des données dans un fichier texte brut
    Par Patrice.peace dans le forum Langage
    Réponses: 10
    Dernier message: 16/03/2010, 10h40
  3. Extraction des données d'un fichier text en vb net
    Par sihammaster dans le forum VB.NET
    Réponses: 5
    Dernier message: 29/11/2009, 16h37
  4. Extraction des données vers un fichier EXCEL
    Par vanesa dans le forum SQL
    Réponses: 4
    Dernier message: 29/10/2008, 16h29
  5. [débutant]extraction des données d'un fichier xml simple
    Par ekram dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 14/03/2007, 13h24

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