Bonjour, je cherche à récupérer les noms des tables utilisées dans des requêtes SQL.
J'ai commencé à tester la faisabilité en prenant un fichier dans lequel je cherche "INTO".
J'ai deux problèmes :
- d'abord mon code ne trouve pas cette chaîne de caractères alors qu'elle y est bien.
- ensuite (et je me dis qu'il y a peut-être un lien entre les deux), quand j'écris toutes les lignes de mon fichier sql dans un autre fichier, j'ai l'impression que "Perl a rajouté" un espace entre chaque lettre. Du coup s'il fait ça AVANT d'évaluer l'expr. régulière, il semble logique qu'il ne trouve pas ce que je lui demande. Mais en lui passant "I N T O" il ne trouve rien non plus...
ci-dessous le code
et ci-après ce qu'il y a dans mon fichier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #!/usr/bin/perl -w # nx.pl use warnings; use strict; open FILE, "Traceur.sql" or die $!; open OUT, ">liste.lst" or die; my $lineno = 1; my @lignes = <FILE>; my $lignes; $lignes = @lignes; my $motif = "INTO"; while ($lineno < $lignes) { print OUT "$lignes[$lineno]"; print "$lineno \n"; if( $lignes[$lineno] =~ /"INTO"/g ) { print "$lignes[$lineno]\n"; print "$lineno\n"; } else {print "non \n";} $lineno++; } print "fini \n";
alors que dans mon fichier SQL de départ le formatage est correct :/ * P o u r Ú v i t e r l e s p r o b l Þ m e s Ú v e n t u e l s d
e p e r t e d e d o n n Ú e s , p a s s e z a t t e n t i v e m e n t
c e s c r i p t e n r e v u e a v a n t d e l ' e x Ú c u t e r
e n d e h o r s d u c o n t e x t e d u C o n c e p t e u r d e b
a s e s d e d o n n Ú e s . * /
Je ne pense pas que mes ennuis soient dus à l'Unicode et je suis coincé là-dessus depuis ce matin/* Pour éviter les problèmes éventuels de perte de données, passez attentivement
ce script en revue avant de l'exécuter en dehors du contexte du Concepteur de b
ases de données.*/
Quelqu'un a t-il déjà rencontré ce problème?
PS je suis sous Windows, je lance mon script perl depuis l'invite de commandes MS-DOS.
Merci d'avance.
Partager