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

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";
et ci-après ce qu'il y a dans mon fichier :


/ * 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 . * /
alors que dans mon fichier SQL de départ le formatage est correct :
/* 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.*/
Je ne pense pas que mes ennuis soient dus à l'Unicode et je suis coincé là-dessus depuis ce matin

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.