[PERL]- traduire du shell en perl [Fermé]

Signaler
Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
-
Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
-
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!!!

90 réponses

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
essaie ça
#!/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";

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;
}
__END__
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
5
j'ai essayé cela mais sans succès:


local ($line); # déclaration locale d'une variable
foreach $line ($conf_file){
# On test $file.analyse pour savoir s'il ne contient pas les lignes $line
# et on met dans $file.tmp les éléments de $file.analyse différents de $line
if($file_analyse!=~ m/$line/i){
system("cat $file_analyse > $file_tmp");
}
system("cat $file_tmp > $file_analyse");
}
system("cat $file_analyse | sort >> $file_focal");
Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
5
personne qui saurait??
Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
5
au secours!!! lol
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
Salut,

vu aussi l'autre message je pense qu'on a un p'tit problème ;-))

ce n'est pas comme ça qu'on traduit un programme.

tu dois expliquer ce qu'il fait et ensuite on verrra
Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
5
je sais je suis mal en point
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
ce que t'as fait dans ton message ce n'est pas du perl
tu fait appel aux commandes système grâce à la fonction system()

si tu veux vraiment du pur Perl, explice ce que tu dois traiter et ce que tu veux obtenir et je vais t'aider

à toi
Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
5
merci.

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

Il faut que je lise chaque ligne du fichier.sort (qui est le fichier à traiter) et je le compare a toutes les lignes de mon fichier de conf qui est $conf_file.
Si mon fichier.sort ne ressemble a aucune lignes du fichier de conf je met cette ligne provisoirement dans un fichier .tmp
Je fais cela pour toutes les lignes de mon fichier.sort.

Puis je met le fichier.tmp dans le .sort du départ en concaténant et en écrasant ce qu'il y avait au debut.

Et finalement je concatène le fichier.sort après l'avoir trié par ordre alphabétique dans le fichier.focal

j'espere avoir été clair sinon demande moi
Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
5
qui aurait une solution en perl?
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
moi ;-)

mais pas ce soir
si jamais tu n'auras pas de réponse, je verrai ça demain ;-)
Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
5
d'accord je retiens!!! tu m'oubli pas!!!!
en tous cas merci !!
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
tu m'oubli pas!!!!
c'est vrai que j'ai la mémoire courte et en plus je suis paresseux
toutefois je ferai un effort pour ne pas oublié ;-))
Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
5
bonjour a tous!!!!
Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
5
Qui saurait faire cela en perl:
Il faut que je lise chaque ligne du fichier.sort (qui est le fichier à traiter) et je le compare a toutes les lignes de mon fichier de conf qui est $conf_file.
Si mon fichier.sort ne ressemble a aucune lignes du fichier de conf je met cette ligne provisoirement dans un fichier .tmp
Je fais cela pour toutes les lignes de mon fichier.sort.

Puis je met le fichier.tmp dans le .sort du départ en concaténant et en écrasant ce qu'il y avait au debut.

Et finalement je concatène le fichier.sort après l'avoir trié par ordre alphabétique dans le fichier.focal
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
Je ne comprends pas cette partie en concaténant et en écrasant ce qu'il y avait au debut.


que veut tu faire exactement?
montre un exemple.

Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
5
oui je veux dire par là faire une ecriture en ecrasant ce qu'il y avait au debut: > écriture (ecrasement)

Début:
file.tmp
aaa
ee
ff

file.sort
grrg
hhyj
zfe"
rg

Donc je veux faire:

file.tmp (on y touche pas)
aaa
ee
ff

file.sort
aaa
ee
ff
Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
5
pour l'instant je suis là:
Il faut que je lise chaque ligne du fichier.sort (qui est le fichier à traiter) et je le compare a toutes les lignes de mon fichier de conf qui est $conf_file:

open (FICANA, "+>$file_analyse");
pen (FICCONF, "$conf_file");
while($analyse=<FICANA>){

# On test $file.analyse pour savoir s'il ne contient pas les lignes $line
# et on met dans $file.tmp les éléments de $file.analyse différents de $line
while($ligne=<FICCONF>){
if($analyse!=~ m/\$ligne/){
Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
5
le perl est moi :(
Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
5
edit: et moi
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
patience ;-)

c'est promis pour ce soir ;-))
Messages postés
127
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
30 janvier 2009
5
hihi!!
d'accord merci