Pouvez-vous m'aider ? je cherche à selectionner les mots d'un fichier
texte qui répondent à deux conditions :
doit contenir les caractères de cette variable : $carac_bon;
mais pas les caractères de cette variable : $carac_mauvais;
mon fichier texte "liste.txt"
exemple avec $carac_bon = 'eo'; et $carac_mauvais = 'hydngp';
mots selectionné : close, mouve, ... parce que 'o' et 'e' est inclue
dasn ces mots ET 'h', 'y', 'd', 'n', 'g', 'p' ne le sont pas.
contenu de liste.txt :
doing
close
sunny
drugs
mouve
...
le bout de code qui pose problème :
open (FILE,"liste.txt");
while ($ligne = <FILE>) {
chomp($ligne);
if (($ligne =~ \[$carac_bon]\) && ($ligne !~ \[$carac_mauvais]\) ) {
print $ligne." | "; }
}
close FILE;
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Rue des Prairies
Bonjour,
le bout de code qui pose problème : open (FILE,"liste.txt"); while ($ligne = <FILE>) { chomp($ligne); if (($ligne =~ [$carac_bon]) && ($ligne !~ [$carac_mauvais]) ) { print $ligne." | "; } } close FILE;
Je vous remercie d'avance ;)
Bonjour,
Remplace les par des /
Olivier.
Bonjour,
le bout de code qui pose problème :
open (FILE,"liste.txt");
while ($ligne = <FILE>) {
chomp($ligne);
if (($ligne =~ [$carac_bon]) && ($ligne !~ [$carac_mauvais]) ) {
print $ligne." | "; }
}
close FILE;
le bout de code qui pose problème : open (FILE,"liste.txt"); while ($ligne = <FILE>) { chomp($ligne); if (($ligne =~ [$carac_bon]) && ($ligne !~ [$carac_mauvais]) ) { print $ligne." | "; } } close FILE;
Je vous remercie d'avance ;)
Bonjour,
Remplace les par des /
Olivier.
Truty
Rue des Prairies a présenté l'énoncé suivant :
Bonjour,
le bout de code qui pose problème : open (FILE,"liste.txt"); while ($ligne = <FILE>) { chomp($ligne); if (($ligne =~ [$carac_bon]) && ($ligne !~ [$carac_mauvais]) ) { print $ligne." | "; } } close FILE;
Je vous remercie d'avance ;)
Bonjour,
Remplace les par des /
Olivier.
Merci,
ok j'ai mi dans l'autre sens mais le probleme c'ets que j'ai les mots contenant une des lettres de $carac_bon et pas toutes.
As tu une idée ?
Rue des Prairies a présenté l'énoncé suivant :
Bonjour,
le bout de code qui pose problème :
open (FILE,"liste.txt");
while ($ligne = <FILE>) {
chomp($ligne);
if (($ligne =~ [$carac_bon]) && ($ligne !~ [$carac_mauvais]) ) {
print $ligne." | "; }
}
close FILE;
Je vous remercie d'avance ;)
Bonjour,
Remplace les par des /
Olivier.
Merci,
ok j'ai mi dans l'autre sens mais le probleme c'ets que j'ai les mots
contenant une des lettres de $carac_bon et pas toutes.
le bout de code qui pose problème : open (FILE,"liste.txt"); while ($ligne = <FILE>) { chomp($ligne); if (($ligne =~ [$carac_bon]) && ($ligne !~ [$carac_mauvais]) ) { print $ligne." | "; } } close FILE;
Je vous remercie d'avance ;)
Bonjour,
Remplace les par des /
Olivier.
Merci,
ok j'ai mi dans l'autre sens mais le probleme c'ets que j'ai les mots contenant une des lettres de $carac_bon et pas toutes.
As tu une idée ?
Benoit Izac
Bonjour,
le 02/09/2006 à 18:40, Truty a écrit dans le message :
le bout de code qui pose problème : open (FILE,"liste.txt"); while ($ligne = <FILE>) { chomp($ligne); if (($ligne =~ [$carac_bon]) && ($ligne !~ [$carac_mauvais]) ) { print $ligne." | "; } } close FILE;
Je vous remercie d'avance ;)
Bonjour,
Remplace les par des /
Olivier.
Merci,
ok j'ai mi dans l'autre sens mais le probleme c'ets que j'ai les mots contenant une des lettres de $carac_bon et pas toutes.
Il y a peut-être plus simple mais cette solution fonctionne :
#!/usr/bin/perl use warnings; use strict;
my $carac_bon = 'eo'; my $carac_mauvais = 'hydngp';
my $l = length($carac_bon);
while (my $ligne = <DATA>) { chomp $ligne; next if ($ligne =~ m/[$carac_mauvais]/); my $i = 0; foreach my $c (split //, $carac_bon) { $i++ if ($ligne =~ m/$c/); } print "$ligne | " if ($i == $l); } print "n";
__DATA__ doing close sunny drugs mouve e oe o
-- Benoit Izac
Bonjour,
le 02/09/2006 à 18:40, Truty a écrit dans le message
<mn.14607d69c1cd9c1f.52132@nospam.com> :
le bout de code qui pose problème :
open (FILE,"liste.txt");
while ($ligne = <FILE>) {
chomp($ligne);
if (($ligne =~ [$carac_bon]) && ($ligne !~
[$carac_mauvais]) ) { print $ligne." | "; }
}
close FILE;
Je vous remercie d'avance ;)
Bonjour,
Remplace les par des /
Olivier.
Merci,
ok j'ai mi dans l'autre sens mais le probleme c'ets que j'ai les mots
contenant une des lettres de $carac_bon et pas toutes.
Il y a peut-être plus simple mais cette solution fonctionne :
#!/usr/bin/perl
use warnings;
use strict;
my $carac_bon = 'eo';
my $carac_mauvais = 'hydngp';
my $l = length($carac_bon);
while (my $ligne = <DATA>) {
chomp $ligne;
next if ($ligne =~ m/[$carac_mauvais]/);
my $i = 0;
foreach my $c (split //, $carac_bon) {
$i++ if ($ligne =~ m/$c/);
}
print "$ligne | " if ($i == $l);
}
print "n";
le 02/09/2006 à 18:40, Truty a écrit dans le message :
le bout de code qui pose problème : open (FILE,"liste.txt"); while ($ligne = <FILE>) { chomp($ligne); if (($ligne =~ [$carac_bon]) && ($ligne !~ [$carac_mauvais]) ) { print $ligne." | "; } } close FILE;
Je vous remercie d'avance ;)
Bonjour,
Remplace les par des /
Olivier.
Merci,
ok j'ai mi dans l'autre sens mais le probleme c'ets que j'ai les mots contenant une des lettres de $carac_bon et pas toutes.
Il y a peut-être plus simple mais cette solution fonctionne :
#!/usr/bin/perl use warnings; use strict;
my $carac_bon = 'eo'; my $carac_mauvais = 'hydngp';
my $l = length($carac_bon);
while (my $ligne = <DATA>) { chomp $ligne; next if ($ligne =~ m/[$carac_mauvais]/); my $i = 0; foreach my $c (split //, $carac_bon) { $i++ if ($ligne =~ m/$c/); } print "$ligne | " if ($i == $l); } print "n";
__DATA__ doing close sunny drugs mouve e oe o
-- Benoit Izac
Denis Dordoigne
Bonjour,
ok j'ai mi dans l'autre sens mais le probleme c'ets que j'ai les mots contenant une des lettres de $carac_bon et pas toutes. Normal, c'est exactement ce que signifie [$carac_bon]. Ce que tu veux, ce
sont des mots contenant toutes les lettres de $carac_bon ? Tu commences à décrire un langage non régulier, ça va être difficile de le traduire en regexp.
As-tu des contraintes de performance ?
-- Denis
Bonjour,
ok j'ai mi dans l'autre sens mais le probleme c'ets que j'ai les mots
contenant une des lettres de $carac_bon et pas toutes.
Normal, c'est exactement ce que signifie [$carac_bon]. Ce que tu veux, ce
sont des mots contenant toutes les lettres de $carac_bon ? Tu commences à
décrire un langage non régulier, ça va être difficile de le traduire en
regexp.
ok j'ai mi dans l'autre sens mais le probleme c'ets que j'ai les mots contenant une des lettres de $carac_bon et pas toutes. Normal, c'est exactement ce que signifie [$carac_bon]. Ce que tu veux, ce
sont des mots contenant toutes les lettres de $carac_bon ? Tu commences à décrire un langage non régulier, ça va être difficile de le traduire en regexp.
As-tu des contraintes de performance ?
-- Denis
Rue des Prairies
ok j'ai mi dans l'autre sens mais le probleme c'ets que j'ai les mots contenant une des lettres de $carac_bon et pas toutes.
As tu une idée ?
Dans la même veine que la solution de Benoît (à toi de faire un benchmark) :
#!/usr/bin/perl use strict; use warnings; my $carac_bon = 'eo'; my @bon = split(//,$carac_bon); my $carac_mauvais = 'hydngp'; LOOP1: while (my $ligne = <DATA>) { chomp($ligne); next if($ligne =~ /[$carac_mauvais]/); foreach(@bon){ next LOOP1 if(index($ligne,$_) == -1); } print $ligne," | "; } __DATA__ doing close sunny drugs mouve hydrogene eo bee go on
ok j'ai mi dans l'autre sens mais le probleme c'ets que j'ai les mots
contenant une des lettres de $carac_bon et pas toutes.
As tu une idée ?
Dans la même veine que la solution de Benoît (à toi de faire un benchmark) :
#!/usr/bin/perl
use strict;
use warnings;
my $carac_bon = 'eo';
my @bon = split(//,$carac_bon);
my $carac_mauvais = 'hydngp';
LOOP1:
while (my $ligne = <DATA>) {
chomp($ligne);
next if($ligne =~ /[$carac_mauvais]/);
foreach(@bon){
next LOOP1 if(index($ligne,$_) == -1);
}
print $ligne," | ";
}
__DATA__
doing
close
sunny
drugs
mouve
hydrogene
eo
bee
go on
ok j'ai mi dans l'autre sens mais le probleme c'ets que j'ai les mots contenant une des lettres de $carac_bon et pas toutes.
As tu une idée ?
Dans la même veine que la solution de Benoît (à toi de faire un benchmark) :
#!/usr/bin/perl use strict; use warnings; my $carac_bon = 'eo'; my @bon = split(//,$carac_bon); my $carac_mauvais = 'hydngp'; LOOP1: while (my $ligne = <DATA>) { chomp($ligne); next if($ligne =~ /[$carac_mauvais]/); foreach(@bon){ next LOOP1 if(index($ligne,$_) == -1); } print $ligne," | "; } __DATA__ doing close sunny drugs mouve hydrogene eo bee go on
Klaus
Truty wrote:
Bonjour,
Pouvez-vous m'aider ? je cherche à selectionner les mots d'un fichier texte qui répondent à deux conditions : doit contenir les caractères de cette variable : $carac_bon; mais pas les caractères de cette variable : $carac_mauvais;
mon fichier texte "liste.txt"
exemple avec $carac_bon = 'eo'; et $carac_mauvais = 'hydngp'; mots selectionné : close, mouve, ... parce que 'o' et 'e' est inclue dasn ces mots ET 'h', 'y', 'd', 'n', 'g', 'p' ne le sont pas.
contenu de liste.txt : doing close sunny drugs mouve ...
le bout de code qui pose problème : open (FILE,"liste.txt"); while ($ligne = <FILE>) { chomp($ligne); if (($ligne =~ [$carac_bon]) && ($ligne !~ [$carac_mauvais]) ) { print $ligne." | "; } } close FILE;
voici le programme: ========================= =========== use strict; use warnings;
my $carac_bon = 'eo'; my $carac_mauvais = 'hydngp';
open my $FILE, '<', 'liste.txt' or die "Erreur <liste.txt ($!)"; while (my $ligne = <$FILE>) { chomp($ligne); if ($ligne =~ /[Q$carac_bonE]/ and $ligne !~ /[Q$carac_mauvaisE]/) { print $ligne, ' | '; } } close $FILE; ========================= ===========
avec le contenu dans 'liste.txt': ========================= =========== doing close sunny drugs mouve ========================= ===========
voici le résultat: ========================= =========== close | mouve | ========================= ===========
Truty wrote:
Bonjour,
Pouvez-vous m'aider ? je cherche à selectionner les mots d'un fichier
texte qui répondent à deux conditions :
doit contenir les caractères de cette variable : $carac_bon;
mais pas les caractères de cette variable : $carac_mauvais;
mon fichier texte "liste.txt"
exemple avec $carac_bon = 'eo'; et $carac_mauvais = 'hydngp';
mots selectionné : close, mouve, ... parce que 'o' et 'e' est inclue
dasn ces mots ET 'h', 'y', 'd', 'n', 'g', 'p' ne le sont pas.
contenu de liste.txt :
doing
close
sunny
drugs
mouve
...
le bout de code qui pose problème :
open (FILE,"liste.txt");
while ($ligne = <FILE>) {
chomp($ligne);
if (($ligne =~ [$carac_bon]) && ($ligne !~ [$carac_mauvais]) ) {
print $ligne." | "; }
}
close FILE;
voici le programme:
========================= ===========
use strict;
use warnings;
my $carac_bon = 'eo';
my $carac_mauvais = 'hydngp';
open my $FILE, '<', 'liste.txt' or die "Erreur <liste.txt ($!)";
while (my $ligne = <$FILE>) {
chomp($ligne);
if ($ligne =~ /[Q$carac_bonE]/
and $ligne !~ /[Q$carac_mauvaisE]/) {
print $ligne, ' | ';
}
}
close $FILE;
========================= ===========
avec le contenu dans 'liste.txt':
========================= ===========
doing
close
sunny
drugs
mouve
========================= ===========
voici le résultat:
========================= ===========
close | mouve |
========================= ===========
Pouvez-vous m'aider ? je cherche à selectionner les mots d'un fichier texte qui répondent à deux conditions : doit contenir les caractères de cette variable : $carac_bon; mais pas les caractères de cette variable : $carac_mauvais;
mon fichier texte "liste.txt"
exemple avec $carac_bon = 'eo'; et $carac_mauvais = 'hydngp'; mots selectionné : close, mouve, ... parce que 'o' et 'e' est inclue dasn ces mots ET 'h', 'y', 'd', 'n', 'g', 'p' ne le sont pas.
contenu de liste.txt : doing close sunny drugs mouve ...
le bout de code qui pose problème : open (FILE,"liste.txt"); while ($ligne = <FILE>) { chomp($ligne); if (($ligne =~ [$carac_bon]) && ($ligne !~ [$carac_mauvais]) ) { print $ligne." | "; } } close FILE;
voici le programme: ========================= =========== use strict; use warnings;
my $carac_bon = 'eo'; my $carac_mauvais = 'hydngp';
open my $FILE, '<', 'liste.txt' or die "Erreur <liste.txt ($!)"; while (my $ligne = <$FILE>) { chomp($ligne); if ($ligne =~ /[Q$carac_bonE]/ and $ligne !~ /[Q$carac_mauvaisE]/) { print $ligne, ' | '; } } close $FILE; ========================= ===========
avec le contenu dans 'liste.txt': ========================= =========== doing close sunny drugs mouve ========================= ===========
voici le résultat: ========================= =========== close | mouve | ========================= ===========