Retourner aux forums || Retourner au forum Programmation.shell

Programmation.shell : Extraire une sous chaîne de plusieurs lignes

Posté par Hardy Damien (page perso, ) le 03 mars 2005
0
Je souhaite extraire les requêtes SQL contenues dans un source Powerbuilder (qui est un binaire)

Donc j'ai fait un strings src.pbl > test.txt

mais ça me retourne 9000 lignes de texte ... et parmi elle des requêtes SQL.

Donc je souhaite filtrer tout ce texte pour ne récupérer que les sous chaînes comprises entre "SELECT" et "USING TRLOCALE;" mais qui sont sur plusieurs lignes et c'est là que j'ai un soucis :/ je n'arrive pas à récupérer un pattern qui correspond à plusieurs lignes ... (sed ou grep)

Dam

ex de requete :


SELECT SUM("INSEE"."Q_MEN2_INSEE"), SUM("INSEE"."M_POP2_INSEE")
INTO :LNBMENAGESINSEE, :LPOPULATIONINSEE
FROM "INSEE", "ZON_INSEE", "ZONE"
WHERE ( "INSEE"."C_COMM_INS" = "ZON_INSEE"."C_COMM_INS" ) AND
( "ZON_INSEE"."C_ZONE" = "ZONE"."C_ZONE" ) AND
( "ZON_INSEE"."C_VER" = "ZONE"."C_VER" ) AND
( ( "ZONE"."C_VER" = :LCODEVERSION ) AND
( "ZONE"."C_ZONE" = :STRZONE ) )
USING TRLOCALE;

> Lire le message (7 commentaires, moyenne: 2,4).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Comme ca ca devrait marcher

Posté par Calim' Héros (Jabber id, page perso, ) le 03/03/2005 à 13:27. (lien). Évalué à 3.

grep -e [SELECT][[:alnum:]][TRLOCALE] nomdufichierouonfouille

--
Ce commentaire est :
Génial, Nul, 42
  • [^]Re: Comme ca ca devrait marcher

    Posté par Calim' Héros (Jabber id, page perso, ) le 03/03/2005 à 13:30. (lien). Évalué à 3.

    On me dit que comme ca c'est plus court :

    grep -e [SELECT].*[TRLOCALE] nomdufichierouonfouille

    --
    Ce commentaire est :
    Génial, Nul, 42
    • [^]Re: Comme ca ca devrait marcher

      Posté par Hardy Damien (page perso, ) le 03/03/2005 à 14:00. (lien). Évalué à 3.

      nope ca n'a pas l'air d'etre ca :/ il me sort des un tas de chose qui n'on pas grand chose a voir (les requetes sont dedans aussi ... mais par exemple voici le tail du resultat :


      "DEPT_DOSS"."C_VER" =0 ) AND ( "DEPT_DOSS"."C_DEPT" =0 )
      BLICtransaction.RDRD
      SELECT "DEPT_DOSS"."M_SURF_DOSS" , "DEPT_DOSS"."M_CA_DOSS" , "VERSION"."M_SURDAT*
      F_VER" , "VERSION"."M_CA_VER" , "VERSION"."M_PAN_VER" , "DEPT_DOSS"."M_PART_DEPT" FROM "DEPT_DOSS" , "VERSION" WHERE ( "DEPT_DOSS"."C_VER" ="VERSION".
      "C_VER" ) and ( ( "DEPT_DOSS"."C_VER" =0 ) AND ( "DEPT_DOSS"."C_DEPT" =0 ) )
      BLLCtransaction.RLRDRLRDRDRD
      SELECT "REND_ENS"."M_SURFMOY_REND" , "REND_ENS"."M_CA_DEPT" , "REND_ENSDAT*
      "."M_REND_REND" FROM "REND_ENS" , "TR_SURF" WHERE ( "REND_ENS"."C_TR_SURF" ="TR_SURF"."C_TR_SURF" ) and ( ( "REND_ENS"."C_ENS" =' ' ) AND ( "REND_ENS"
      ."N_PER" =' ' ) AND ( "REND_ENS"."C_DEPT" =0 ) AND ( "TR_SURF"."M_DEB_SURF" <= 0 ) AND ( "TR_SURF"."M_FIN_SURF" >= 0 ) )
      BSSLLCtransaction.RLRDRD
      SELECT "CONC"."C_CONC" FROM "CONC" WHERE "CONC"."C_CONC" =' ' AND "CONC"."C_VER"DAT*
      BSLCtransaction.





      Dam

Hum...

Posté par Gyro Gearllose () le 03/03/2005 à 14:08. (lien). Évalué à 4.

Et en oubliant le strings ?
Genre :
grep -z -U "SELECT.*;" src.pbl
Le -z c'est pour dire que les chaînes de caractères finissent par \0, et non par CRLR, et -U pour dire que c'est un fichier binaire.
Pas testé, car je n'ai pas de fichiers de ce type, mais bon.
Si ça marche, ça ne devrait sortir que les chaînes de caractères ressemblant à SELECT.*;
A tester, donc, et désolé si c'est pas la solution.

--
All articles which are excluded shall be deemed included
Tous les articles exclus sont considérés inclus
--Brian de Palma in Phantom of the Paradize
  • [^]Re: Hum...

    Posté par Hardy Damien (page perso, ) le 03/03/2005 à 15:19. (lien). Évalué à 2.

    Pas mal, ca fait un peu de bruit autour mais on se rapproche du l'idéal

    grep -z -a -U "SELECT .*;" src.pbl | sed "/^$/d"


    Dam

    ex fin du resultat obtenu :

    DAT* ö☺
    Boolean bRetour
    Pointer ptPointerCourant
    Long lIndex
    String strTypeZone
    //**********************
    //* CORPS DE LA FONCTION
    //--- Met en place le sablier
    ptPointerCourant = SetPointer(HourGlass!)
    //--- Déclare un curseur
    DECLARE Cur_Zone CURSOR FOR
    SELECT DISTINCT "ZONE"."C_ZONE",
    "ZONE"."T_ZONE"
    FROM "ZONE"
    WHERE "ZONE"."C_VER" = :lCODEVERSION
    ORDER BY "ZONE"."T_ZONE" ASC,
    "ZONE"."C_ZONE" ASC
    USING TRLOCALE;
    //--- Ouvre le curseur
    OPEDAT*

Et avec Python

Posté par SamG () le 03/03/2005 à 16:18. (lien). Évalué à 1.

un truc de ce style là :

import re

reg_req = re.compile("(SELECT.*?USING TRLOCALE;)",re.S )
s = file("src.pbl","rb").read()

for x in reg_req.findall(s):
    print "="*70,"\n"
    print x

Sed le fait !

Posté par Jacques L'helgoualc'h (page perso, ) le 03/03/2005 à 16:50. (lien). Évalué à 1.

strings src.pbl | sed -n -e '/\<SELECT\>/,/\<USING *TRLOCALE/p'

--
Pas de signature

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell