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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| #!/usr/bin/perl -w
use warnings;
use strict;
use Data::Dumper;
use Tkx;
my ($lacolonne, @lefiltre);
my $types = [ ['CSV Files', ['.csv']],
['Text Files', ['.txt', '.text']],
['All Files', '*'],];
my $fichier = Tkx::tk___getOpenFile( -title => "Sélection du fichier à filtrer",
-filetypes => $types);
unless (-f $fichier) {
print "Fichier '$fichier' non trouvé.\n";
exit 2;
}
unless (@lefiltre) {
my $parametre;
saisir_2valeurs(\$lacolonne, \$parametre);
@lefiltre = qw/$parametre/;
}
exit 3 unless ($#lefiltre);
open IN, $fichier or die "Problème à l'ouverture de $fichier E/S: $!\n";
while ( <IN> ) {
# chomp $_;
my @enreg = split( /;/, $_ );
for my $filtrage (@lefiltre) {
if ($enreg[$lacolonne] =~ /$filtrage/) {
open OUT, ">> filtrer_fichier_$filtrage.txt" or die "filtrer_fichier_$filtrage.txt E/S: $!\n";
print OUT $_ ;
close OUT;
}
}
}
close IN;
=head1 NAME
filtre_fichierCSV.pl
=head1 SYNOPSIS
Interactive mode:
perl filtre_fichierCSV.pl <numéro> <filtre>
=head1 DESCRIPTION
il s'agit de filtrer un fichier sur la colonne <numéro> avec le filtre <filtre>.
le fichier sur lequel appliquer ce filtre est choisi par une fenêtre de sélection (Tkx).
le fichier généré s'appelle 'filtrer_fichier.txt'
=cut
sub saisir_2valeurs {
use Tkx;
my ($saisie1, $saisie2) = @_;
my $mw = Tkx::widget->new(".");
$mw->g_wm_title("Saisir le type");
my $frm = $mw->new_ttk__frame(-padding => "2 3 12 12");
$frm->g_grid(-column => 0, -row => 0, -sticky => "nwes");
my $e_colonn = $frm->new_ttk__entry(-width => 9, -textvariable => $saisie1);
$e_colonn->g_grid(-column => 2, -row => 1, -sticky => "we");
my $e_filtre = $frm->new_ttk__entry(-width => 9, -textvariable => $saisie2);
$e_filtre->g_grid(-column => 2, -row => 2, -sticky => "we");
my $cb = $frm->new_ttk__button(-text => "Valider la saisie", -command => sub { $mw->g_destroy; });
$cb->g_grid(-column => 3, -row => 3, -sticky => "w");
$frm->new_ttk__label(-text => "Le numéro de colonne du filtre :")->g_grid(-column => 1, -row => 1, -sticky => "e");
$frm->new_ttk__label(-text => "Le filtre à extraire (qw) :")->g_grid(-column => 1, -row => 2, -sticky => "e");
foreach (Tkx::SplitList($frm->g_winfo_children)) {
Tkx::grid_configure($_, -padx => 5, -pady => 5);
}
$e_colonn->g_focus;
$mw->g_bind("<Return>", sub { $mw->g_destroy; });
$mw->g_tkwait_window;
Tkx::MainLoop();
print "dans la fenetre $saisie1,$$saisie1; $saisie2,$$saisie2.\n";
} |
Partager