bonjour,

mon script doit permettre de choisir un fichier et de saisir
1 / le numéro de colonne
2 / le filtre à appliquer sur cette colonne.

je ne comprends pas pourquoi
1 / il m'est interdit de positionner la saisie (new_ttk__entry) avant la sélection de fichier (à cause du g_destroy ?)
et surtout
2 / après la sélection du fichier (Tkx::tk___getOpenFile), la saisie (new_ttk__entry) est impossible, les champs sont inaccessibles !

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
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";
 
}
toute aide serait la bienvenue
merci d'avance
x-lours

PS
j'ai déjà éssayé la combinaison Tkx::tk___chooseDirectory + une unique saisie dans new_ttk__entry.
cela permet bien la saisie dans new_ttk__entry.
je ne comprends pas la différence

re PS
je ne peux pas utiliser Tk, je suis restreint à Tkx.