Fusionner des fichiers texte et les envoyer dans une base SQL

Fusionner des fichiers texte et les envoyer dans une base SQL - Perl - Programmation

Marsh Posté le 16-05-2006 à 19:19:04    

Bonjour,
 
bon, y'a une 2 heure, je ne connaissais pas Perl, donc un pt'tit peu d'indulgence...  :)  
 
j'ai environ 7000 fichiers de type texte dans un repertoire PANEL\ESS où se trouve egalement mon maggggnifique fichier de commande appelé fusion.pl. Enfin, quand il sera écrit....
 
Les nom de fichier sont du type : debit-date.pnn
 
Je voudrais :
1/ inscrire sur chaque ligne de chaque fichier le debit (extrait du nom du fichier)
2/ virer la premier ligne
3/ fusionner les 7000 fichiers ainsi modifiés (qq millions de lignes !)
4/ balancer le résultat dans un fichier fictemp sous SQL
 
bon, je commence comme ça :
 

#!\PANEL\ESS\
      }  
use strict;
my $file;
my $deb;
my $date;
my @res;
my @liste = glob('/PANEL/ESS/*.pnn');
foreach $file (@liste)
($deb,$date) = split(/-/,$_)
open(myfile,$file) or die "$file: $!" ;
while(<myfile> ){
push "$deb;$_;
      }


 
après le push je sais pas trop...
 
qqun pour m'aiguiller ?
 
merci
 
a+


Message édité par Gilgamesh d'Uruk le 16-05-2006 à 19:20:35
Reply

Marsh Posté le 16-05-2006 à 19:19:04   

Reply

Marsh Posté le 16-05-2006 à 22:47:11    

t'es obligé de le faire en perl ?
en shell je trouve ça plus rapide à faire :

Code :
  1. for i in `ls *pnn`
  2. do
  3.   $FICHIER=$i
  4.   $DEBIT=`echo $FICHIER | awk -F\\- '{ print $1 }'`
  5.   echo $DEBIT
  6.   tail +2 $FICHIER
  7. done >> fictemp


 
Bon c'est faisable en Perl mais je ne pense pas que ce sera plus simple


Message édité par couak le 16-05-2006 à 23:01:38
Reply

Marsh Posté le 16-05-2006 à 22:51:01    

ah merde j'avais compris le débit uniquement sur la 1ère ligne du fichier :o

Reply

Marsh Posté le 16-05-2006 à 22:59:18    

Code :
  1. for i in `ls *pnn`
  2. do
  3.   $FICHIER=$i
  4.   $DEBIT=`echo $FICHIER | awk -F\\- '{ print $1 }'`
  5.   tail +2 $FICHIER | while read LINE
  6.   do
  7.      echo "$DEBIT $LINE"
  8.   done
  9. done >> fictemp


Message édité par couak le 16-05-2006 à 23:01:31
Reply

Marsh Posté le 17-05-2006 à 12:35:17    

Code :
  1. for i in `ls *pnn`
  2. do
  3.   $FICHIER=$i
  4.   $DEBIT=`echo $FICHIER | awk -F\\- '{ print $1 }'`
  5.   tail +2 $FICHIER | while read LINE
  6.   do
  7.      echo "$DEBIT $LINE"
  8.   done
  9. done >> fictemp


 
figure toi que j'ai essayé en shell DOS et que c'était interminable : >5 h pour 7000 fichier. Quand le fictemp dépasse que dizaine de Mo, ça devient dur :(  
 
en Perl on m'a promis que ça passerais à qq dizaine de minute. J'en salive d'avance.
 
mais bon, j'essaierais le tiens quand même :) C'est quoi comme langage ?
 
merci
 

Reply

Sujets relatifs:

Leave a Replay

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