bon allez, je te donne ma procedure :
la voici :
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| sub decouper_fichier_ligne {
my ($fichier, $nbr_ligne, $nouveau_fichier) = @_;
if( scalar(@_) != 3) {
my $usage = "Vous devez donner 3 arguments au sous programme\n".
"Usage : decouper_fichier_ligne(\"gros_fichier.txt\",10000,\"petit_fichier.txt\")\n";
die($usage);
}
my ($nom_file, $extension) = $nouveau_fichier =~ /(.+)(\.\w+)$/gi;
if (not defined $extension) {
$extension = "";
$nom_file = $nouveau_fichier;
}
my $compteur_ligne = 0;
my $compteur_fichier = 1;
#creation d'un fichier coupe
my ($fh_temp) = ();
$nouveau_fichier = "$nom_file"."_"."$compteur_fichier$extension";
open ($fh_temp, ">$nouveau_fichier")
|| die "Impossible d'ouvrir le fichier $nouveau_fichier";
#Lecture du fichier original
open (my $fichier_fh, $fichier)
|| die "Impossible d'ouvrir le fichier $fichier";
while(my $ligne = <$fichier_fh>) {
chomp($ligne);
#on atteint le compte de lignes
if ($compteur_ligne == $nbr_ligne) {
#fermeture fichier temp
close($fh_temp);
#reinialise le compteur ligne
$compteur_ligne = 0;
#incremente compteur fichier
$compteur_fichier ++;
#ouverture nouveau fichier
$nouveau_fichier = "$nom_file"."_"."$compteur_fichier$extension";
open ($fh_temp, ">$nouveau_fichier")
|| die "Impossible d'ouvrir le fichier $nouveau_fichier";
}
print {$fh_temp} "$ligne\n";
$compteur_ligne ++;
}
close($fh_temp);
return;
} |
tu l'as met dans ton script.
Pour l'appeler, tu fais ceci par exemple :
decouper_fichier_ligne("gros_fichier.txt",10000,"Batch.txt");
Il te creera des fichiers de 10000 lignes de nom Batch_1.txt, Batch_2.txt etc.
voilà
Partager