Variable multilignes pour une insertion sql

Variable multilignes pour une insertion sql - Perl - Programmation

Marsh Posté le 21-06-2005 à 15:42:02    

Bonjour à tous.
J'essaie d'utiliser perl afin de créer un fichier d'insertion de tuples mysql.
Je pars pour cela d'un fichier qui est formaté de la sorte:
 

Code :
  1. >Variable1_Variable2\n
  2. BLABLABLABLABLABALABLABLA\n
  3. BALABLABLABLABALBALABALAB\n
  4. BLABBLBA..
  5. >Variable1_Varibale2\n
  6. SLEIZLZLDJZLJDKSLFKSLFPOA\n
  7. AZODU...


 
Après ouverture de ce fichier, j'arrive par des regex à recupérer les variables présentes sur la ligne commençant par >,  par contre se qui suit cette ligne est elle même une variable:

Code :
  1. BLABLABLABLABLABALABLABLA\n
  2. BALABLABLABLABALBALABALAB\n
  3. BLABBLBA..

=variable3
 
Au final, une fois avec recolté ces 3 variables, je veux les ecrire dans un autre fichier tuples.sql qui pourra  par la suite être utilisé avec ma base.

Code :
  1. Insert into base values ($variable1,$variable2, varibale3^);


 
voila mon code:
 

Code :
  1. #/usr/bin/perl -w
  2. use strict;
  3. my $var1 = undef;
  4. my $var2 = undef;
  5. my $var3 = undef;
  6. #ouverture du fichier source
  7. open(fsource,"$ARGV[0]" ) || die "Problème pour ouvrir $ARGV[0] !";
  8. open(fresult, ">tuples.sql" ) || die "ouverture du fichier impossible !";
  9. foreach my $ligne (<fsource> ){
  10.  if ($ligne =~ /^>(.*)_(.*_.*)_(.*)_(.*)/){
  11.   $var1 = $1.'_'.$2;
  12.  $var2 = $1;
  13.  print  $var1.",".$var2."\n";
  14. }
  15.  
  16.  if ($ligne =~ /^(\w+)/is){
  17.   $var3 = $1;
  18.      print $var3;}
  19.   }
  20. #  print fresult "INSERT INTO Table VALUES ('".$var1."','".$var2."','".$var3."');\n";
  21. close fsource;


 
Pour var3 j'utilise les options "traiter la chaine comme une ligne simple" afin de  récupérer toute les lignes entre les  > , ceci pour asigner le resultat global à var3 mais ça ne marche pas.
 
Un peu d'aide please  :jap:


Message édité par suomi le 21-06-2005 à 15:44:56
Reply

Marsh Posté le 21-06-2005 à 15:42:02   

Reply

Marsh Posté le 21-06-2005 à 17:16:00    

Quelque chose comme cela cela ne marcherai pas par hazard...
 
use strict;
 
my $var1 = undef;
my $var2 = undef;
my $var3 = undef;
 
#ouverture du fichier source
open(FSOURCE,"< $ARGV[0]" ) || die "Problème pour ouvrir $ARGV[0] !";
open(FRESULT, "> tuples.sql" ) || die "ouverture du fichier impossible !";
 
foreach my $ligne (<FSOURCE> ){
    if ($ligne =~ /^>(.*)_(.*_.*)_(.*)_(.*)/){
         if(defined($var3)){
           print FRESULT "INSERT INTO Table VALUES ('".$var1."','".$var2."','".$var3."');\n";
         }
        $var3 = undef;
        $var1 = $1.'_'.$2;
        $var2 = $1;
#        print  "var1: $var1, var2: $var2\n";
    }
 
 
    if ($ligne =~ /^(\w+)/is){
        $var3 .= $1;
 
#        print "var3:$var3\n";
   }
}
 
   if(defined($var3)){
           print FRESULT "INSERT INTO Table VALUES ('".$var1."','".$var2."','".$var3."');\n";
   }
   
close FSOURCE;
close FRESULT;

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed