Ca marche mieux sans le s...
while ( $txt =~ /((?:[.\n]*))(EXEC SQL(?:[^;]*):db_(?:[^;]*):ind_(?:[^;]*);)/igm)
mais bon ça fait pas encore tout à fait ce que je veux...
Je voudrai matcher toutes mes requetes tout en recopiant le reste du code dans mon resultat...
J'ai pensé à faire d'une magnière différante : je copie $txt (le fichier non modifié) dans le résultat $res puis je matche mes requetes sur $txt. Je recupère ces requetes, je les traite, et je remplace dans $res la requete d'origine par la requete traitée :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| while ( $txt =~ /(EXEC SQL(?:[^;]*):db_(?:[^;]*):ind_(?:[^;]*);)/igm)
{
# $res = $res.$1 ;
# $tmp = $2 ;
$tmp = $1 ;
if ($tmp)
{
print ("\n\t¤¤¤ requete ¤¤¤ = \n\n$tmp\n\n") ;
if (($tmp =~ /(FETCH.*INTO)/sm) || ($tmp =~ /(SELECT.*INTO)/sm))
{
$resTMP = "\n".&traiterIndicateur ($tmp, @pointH) ;
print "\tresTMP 1 = \n$resTMP" ;
# $res =~ s/$tmp/$resTMP/gm ;
}
else
{
$resTMP = "\n".&initIndicateur ($tmp, @pointH) ;
print "\tresTMP 2 = \n$resTMP" ;
# $res =~ s/$tmp/$resTMP/gm ;
}
}
} |
mais si je décomante les deux lignes ou je ramplace la requete ça pete à la première itération...
Ca me fait un message de 10000 lignes qui se termine par ça :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| AND pm.EQP_RCP_NOM = m.EQP_RCP_NOM
AND se1.LOG_SUPP_NAME = m.SUPP_NOM
AND se1.LOGICAL_EQP_NAME = m.EQP_EMT_NOM
AND se1.SA = m.SS_ADR_EMT
AND se1.WAY = 'T'
AND NVL(se1.WORD_COUNT, 0) = NVL(m.WORD_COUNT, 0)
AND NVL(m.INFO_REF, 0) = 0
AND se1.INFO_DBLK_REF =
DECODE(NVL(m.INFO_REF, 0), 0, -1)
AND se2.LOG_SUPP_NAME = m.SUPP_NOM
AND se2.LOGICAL_EQP_NAME = m.EQP_RCP_NOM
AND se2.SA = m.SS_ADR_RCP
AND se2.WAY = 'R'
AND NVL(se2.WORD_COUNT, 0) = NVL(m.WORD_COUNT, 0)
AND se2.INFO_DBLK_REF =
DECODE(NVL(m.INFO_REF, 0), 0, -1);/ at gestionDesIndicateurs.pl line 237, <IN> line 75701. |
Partager