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;
# Comme ca ca devrait marcher
Posté par Calim' Héros (site web personnel) . Évalué à 3.
[^] # Re: Comme ca ca devrait marcher
Posté par Calim' Héros (site web personnel) . Évalué à 3.
grep -e [SELECT].*[TRLOCALE] nomdufichierouonfouille
[^] # Re: Comme ca ca devrait marcher
Posté par Hardy Damien . Évalué à 3.
"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 . Évalué à 4.
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.
[^] # Re: Hum...
Posté par Hardy Damien . Évalué à 2.
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 . Évalué à 1.
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 (site web personnel) . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.