OVH Cloud OVH Cloud

Substitution de chaine

2 réponses
Avatar
Gérald Niel
Bonjour/soir,

Je suis en train de tenter d'adapter ce script
<http://detebe.org/~news/software/rpostarticle-1.3.pl>
pour que les chaînes définies dans $filterpatterns ne soient pas
supprimées mais remplacées par Suffixe-chaine.
Je m'y prend probablement mal... Il faut dire que je ne suis pas
vraiment familié de Perl.

@+
--
EF: pour l'instant, ce sont des linuxiens qui mènent la danse...
ST: J'ai appris qu'il était question de mettre la gestion du système
ST: solaire sous Linux, c'est Dieu qui va etre content.
-+- ST in Guide du linuxien pervers : "Linux : les affres de la création"

2 réponses

Avatar
Jérémy JUST
On Thu, 25 Nov 2004 21:04:38 +0000 (UTC)
Gérald Niel wrote:

pour que les chaînes définies dans $filterpatterns ne soient pas
supprimées mais remplacées par Suffixe-chaine.
Je m'y prend probablement mal... Il faut dire que je ne suis pas
vraiment familié de Perl.


En fait, ton problème n'est pas vraiment un problème Perl, puisque ce
programme (si je l'ai bien compris) créé une ligne de commande qui
appelle grep. D'ailleurs, c'est un peu bizarre.
Au passage, j'ai l'impression que l'auteur de ce script n'avait pas
fait beaucoup de Perl avant. Beaucoup de constructions sont inutilement
laborieuses alors qu'elles auraient pu être écrites de façon bien plus
concise (mais, bon, il faudrait voir le contexte du développement,
aussi).


Pour rester dans l'esprit de ce script, j'imagine qu'il faudrait
utiliser sed au lieu de grep.

<<<<<
$filterpatterns = "!^NNTP-Posting.*: #!^Xref: ";







deviendrait (j'en profite pour le réécrire de façon plus jolie, en
espérant qu'il n'y avait pas de bonnes raisons pour procéder comme
c'était fait):
<<<<<
%filterpatterns = ( '^NNTP-Posting.*: ' => 'chaine1',
'^Xref: ' => 'chaine2' ) ;








Puis on aurait quelque chose comme ça:
<<<<<
$sed = '/bin/sed' ;

foreach $pattern (keys %filterpatterns)
{$string = $filterpatterns{$pattern} ;
$filterline .= "| $sed 's/$pattern/$string/' " ;
}








Je ne sais pas comment rendre sed insensible à la casse.

--
Jérémy JUST





Avatar
Gérald Niel
Le jeudi 25 novembre 2004 à 23:03 GMT, Jérémy JUST écrivait sur
fr.comp.lang.perl :

En fait, ton problème n'est pas vraiment un problème Perl,


En effet, je me suis posé la question, ful ou fclp ?
Finalement, comme le bidule est rédigé en Perl, j'ai posé ma question
ici.

puisque ce programme (si je l'ai bien compris) créé une ligne de
commande qui appelle grep. D'ailleurs, c'est un peu bizarre.


Je vous le concède, d'autant plus que rpost qui est ensuite invoqué
dispose d'une option pour appeler un script pour filtrer (faire ce que
je cherche). Mais je n'arrive pas à mes fins.

Au passage, j'ai l'impression que l'auteur de ce script n'avait pas
fait beaucoup de Perl avant. Beaucoup de constructions sont inutilement
laborieuses alors qu'elles auraient pu être écrites de façon bien plus
concise (mais, bon, il faudrait voir le contexte du développement,
aussi).


Je veux bien vous croire ;o)

Pour rester dans l'esprit de ce script, j'imagine qu'il faudrait
utiliser sed au lieu de grep.


Tout à fait.

%filterpatterns = ( '^NNTP-Posting.*: ' => 'chaine1',
'^Xref: ' => 'chaine2' ) ;








Puis on aurait quelque chose comme ça:
<<<<<
$sed = '/bin/sed' ;

foreach $pattern (keys %filterpatterns)
{$string = $filterpatterns{$pattern} ;
$filterline .= "| $sed 's/$pattern/$string/' " ;
}








Essayé, marche pô.
À priori ça filtre le premier pattern, pas les suivants.

Je ne sais pas comment rendre sed insensible à la casse.


Il faut utiliser 'i', je crois.

Merci pour cette réponse, je pense que je vais aller quérir de l'aide
de mes confrères sur ful.

@+
--
(Pas Adabase que j'ai en version démo sur la distribution Suze).
Et après ça, allez expliquer que les linuxiens sont pas alcolos... ;-)

à quand une distribution Kro v1.6.64 ou Pastis v5.1?
-+- Fantec In Guide du linuxien pervers - "C'est l'heure de l'apéro ?" -+-