[PERL]- traduire du shell en perl
tonixm
Messages postés
127
Date d'inscription
Statut
Membre
Dernière intervention
-
tonixm Messages postés 127 Date d'inscription Statut Membre Dernière intervention -
tonixm Messages postés 127 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Avis aux habitués!!
je suis en train de me mordre les doigts sur une traduction d'un programme en perl:
cat $Conf_file | while read line
do
cat $File.sort | grep -v -w "$line" > $File.tmp
cat $File.tmp > $File.sort
done
cat $File.sort | sort >> $File.focal
Merci de tout coeur!!!
Avis aux habitués!!
je suis en train de me mordre les doigts sur une traduction d'un programme en perl:
cat $Conf_file | while read line
do
cat $File.sort | grep -v -w "$line" > $File.tmp
cat $File.tmp > $File.sort
done
cat $File.sort | sort >> $File.focal
Merci de tout coeur!!!
A voir également:
- [PERL]- traduire du shell en perl
- Classic shell - Télécharger - Personnalisation
- Comment traduire un site en français - Guide
- Traduire image - Guide
- Comment traduire sur whatsapp - Accueil - Messagerie instantanée
- Denon perl pro test - Accueil - Audio
90 réponses
tu compare la ligne de .analyse en question (puis tu fait pareil pour tte les autres: simple boucle) avec TOUTES celles de .conf et tu test.
bref je crois que je ne vais pas réussir a t expliquer mon probleme :(
bref je crois que je ne vais pas réussir a t expliquer mon probleme :(
tu compare la ligne de .analyse en question (puis tu fait pareil pour tte les autres: simple boucle) avec TOUTES celles de .conf et tu test.
c'est exactement ce que fait le script que je t'ai donnée
c'est exactement ce que fait le script que je t'ai donnée
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
merci sa a l air de très bien fonctionner d'après ce que tu m'a envoyer!!!
merci beaucoup!
je vais tester tout sa demain
merci beaucoup!
je vais tester tout sa demain
salut,
cette ligne me bloque le script a l execution:
$e=~/${x}.*$y/;
est tu sur de la syntaxe?
le code:
cette ligne me bloque le script a l execution:
$e=~/${x}.*$y/;
est tu sur de la syntaxe?
le code:
open CONF,"$conf_file" or die "E/S : $!\n"; open ANALYSE,"$file_analyse" or die "E/S : $!\n"; open TMP,">$file_tmp" or die "E/S : $!\n"; my @conf=<CONF>; chomp @conf; while(my $e=<ANALYSE>){ print TMP $e unless grep { if($_=~/\|/){ my ($x,$y)=split /\|/,$_; $y=~ s/^\s*(.*)/$1/; $e=~ /${x}.*$y/; }else{ $e=~/$_/; } } @conf; } close(CONF); close(ANALYSE); close(TMP);
Salut,
en fait cette ligne je l'ai mis puisque tu avais d'espaces après |
donc c'était juste une sécurité en plus
chez ça marche -> je te l'ai dit qu'on ne teste pas les même fichiers, mais tu ne veux pas me croire
quand je teste tes soit disant fichier je dois faire un copier/coller
en ce cas c'est possible de copier aussi des caractères non imprimables qui n'existent pas
mais bon, tant mieux que ça marche
j'espère que t'es content ;-)
en fait cette ligne je l'ai mis puisque tu avais d'espaces après |
donc c'était juste une sécurité en plus
chez ça marche -> je te l'ai dit qu'on ne teste pas les même fichiers, mais tu ne veux pas me croire
quand je teste tes soit disant fichier je dois faire un copier/coller
en ce cas c'est possible de copier aussi des caractères non imprimables qui n'existent pas
mais bon, tant mieux que ça marche
j'espère que t'es content ;-)
je vais faire des tests complémentaires mais pour l'instant sa marche!
En tous cas merci pour tout lami20j!!
En tous cas merci pour tout lami20j!!
petite question:
my ($x,$y)=split /\|/,$_;
a quoi correspond le $_?
my ($x,$y)=split /\|/,$_;
a quoi correspond le $_?
Salut,
C'est la variable fourre-tout de Perl...
Si tu fais print pour afficher quelque chose sans mettre de variable, Perl affichera le contenu de $_
La plupart des opérations en Perl utilisent cette variable en usage interne, mais elle est aussi accessible en externe (pour l'utilisateur). Il ne faut cependant pas trop compter dessus, car elle est susceptible d'être modifiée à tout moment...
C'est la variable fourre-tout de Perl...
Si tu fais print pour afficher quelque chose sans mettre de variable, Perl affichera le contenu de $_
La plupart des opérations en Perl utilisent cette variable en usage interne, mais elle est aussi accessible en externe (pour l'utilisateur). Il ne faut cependant pas trop compter dessus, car elle est susceptible d'être modifiée à tout moment...
mais ici que vaut elle?
my @conf=<CONF>; chomp @conf; while(my $e=<ANALYSE>){ print TMP $e unless grep { if($_=~/\|/){ my ($x,$y)=split /\|/,$_; $y=~ s/^\s*(.*)/$1/; $e=~ /${x}.*$y/; }else{ $e=~/$_/; } } @conf; }
Salut,
cette partie
j'aurais pu l'écrire (mais pour des raions de visibilité j'ai préféré le 1ère version ;-)
et si tu consulte la doc de la fonction grep http://perl.mines-albi.fr/DocFr/perlfunc.html#item_grep tu comprendras mieux
Dans ce cas $_ , représente les éléments de @conf
Il ne faut cependant pas trop compter dessus, car elle est susceptible d'être modifiée à tout moment
On peut toujours compter sur $_ , mais il faut être rigureaux en écrivant le code
C'est la raison pour laquelle dans la boucle while(my $e=<ANALYSE>){ j'utilise $e
A savoir que $_ est utilisé aussi pour des raisons de paresse ;-))
cette partie
print TMP $e unless grep { if($_=~/\|/){ my ($x,$y)=split /\|/,$_; $y=~ s/^\s*(.*)/$1/; $e=~ /${x}.*$y/; }else{ $e=~/$_/; } } @conf;
j'aurais pu l'écrire (mais pour des raions de visibilité j'ai préféré le 1ère version ;-)
print TMP $e unless grep {if($_=~/\|/){my ($x,$y)=split /\|/,$_;$y=~ s/^\s*(.*)/$1/;$e=~ /${x}.*$y/;}else{$e=~/$_/;}} @conf;
et si tu consulte la doc de la fonction grep http://perl.mines-albi.fr/DocFr/perlfunc.html#item_grep tu comprendras mieux
Dans ce cas $_ , représente les éléments de @conf
Il ne faut cependant pas trop compter dessus, car elle est susceptible d'être modifiée à tout moment
On peut toujours compter sur $_ , mais il faut être rigureaux en écrivant le code
C'est la raison pour laquelle dans la boucle while(my $e=<ANALYSE>){ j'utilise $e
A savoir que $_ est utilisé aussi pour des raisons de paresse ;-))
est il possible dans ce sccript de rajouter dans un fichier .debug la ligne qui a permis d'enlever la ligne de .analyse. Par là je veux dire par exemple que si on a :
.conf
ntpd: listening
ntpd: complete installation
.analyse
ntpd: listening on interface
allo: bonjour
lami20j: mr perl
.tmp
allo: bonjour
lami20j: mr perl
et de mettre par exemple dans un .debug ici:
ntpd: listening on interface retirée par ntpd: listening du fichier .conf
qui aurait un epetite idée. moi jaa i essayer:
.conf
ntpd: listening
ntpd: complete installation
.analyse
ntpd: listening on interface
allo: bonjour
lami20j: mr perl
.tmp
allo: bonjour
lami20j: mr perl
et de mettre par exemple dans un .debug ici:
ntpd: listening on interface retirée par ntpd: listening du fichier .conf
qui aurait un epetite idée. moi jaa i essayer:
my $d; open CONF,"$confFile" or die "E/S : $!\n"; open ANALYSE,"$fileAnalyse" or die "E/S : $!\n"; open TMP,">$fileTmp" or die "E/S : $!\n"; open DEBUG,">>$fileDebug" or die "E/S : $!\n"; while (my $c=<CONF>){ while(my $e=<ANALYSE>){ if($c=~/\|/){ my ($x,$y)=split /\|/,$c; if($e=~ /$x.*$y/){ print TMP $e; }else{ $d="$e enlevé par $c"; print DEBUG $d; } } elsif($e=~/$c/){ print TMP $e; } else{ $d="$e enlevé par $c"; print DEBUG $d; } } }
autre idée a la manière de lami20j:
mais cela ne marche pas tout le temps!!
open CONF,"$confFile" or die "E/S : $!\n"; open ANALYSE,"$fileAnalyse" or die "E/S : $!\n"; open TMP,">$fileTmp" or die "E/S : $!\n"; open DEBUG,">>$fileDebug" or die "E/S : $!\n"; my @conf=<CONF>; chomp @conf; while(my $e=<ANALYSE>){ print TMP $e unless grep { if($_=~/\|/){ my ($x,$y)=split /\|/,$_; $e=~ /$x.*$y/; if($e=~ /$x.*$y/){ print DEBUG "$e:$_\n"; } }else{ $e=~/$_/; if($e=~/$_/){ print DEBUG "$e:$_\n"; } } } @conf; }
mais cela ne marche pas tout le temps!!
#!/usr/bin/perl use strict;use warnings; open CONF,"fichier.conf" or die "E/S : $!\n"; open ANALYSE,"fichier.analyse" or die "E/S : $!\n"; open TMP,">fichier.tmp" or die "E/S : $!\n"; open DEBUG,">debug.log" or die "E/S : $!\n"; my @conf=<CONF>; chomp @conf; while(my $e=<ANALYSE>){ if( grep { if($_=~/\|/){ my ($x,$y)=split /\|/,$_; $y=~s/^\s*(.*)/$1/; $e=~/${x}.*$y/; }else{ $e=~/$_/; } } @conf){ print DEBUG $e; }else{ print TMP $e; } } __END__