PERL _ Recuperer valeur maxi dune colonne [Résolu/Fermé]

Signaler
-
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
-
Bonjour,

Voila, j'ai tlechargé PERl, aussi je debute .J'ai regardé des tutos , mais je ne m'en sors pas...merci pour votre aide.
Auparavant je faisais un calcul via excel, mais vu le nrbre de lignes + de 100 000 lignes , c'est bp trop lent.

J'ai un fichier texte qui a cette forme nomme toto.txt

EUR 1.2315
EUR 1.2318
EUR 1.2356

Je cherche a recuperer la valeur maxi de la deuxieme colonne
soit ici la valeur 1.2356. Mon fichier de sortie sortie.txt ne devra donc contenir qu'une seule ligne , celle de la valeur max

EUR 1.2356

Cetait mon premier probleme.car je nage un peu pour y arriver..



Deuxieme probleme
J'ai un fichier toto2.txt valeur qui a cette forme

EUR 1.2350 1.2310
EUR 1.2370 1.2320

et je cherche a recuperer la valeur moyenne de la colonne 2 + colonne 3
Soit ici 1,2330 pour la 1ere ligne ...etc.. avec donc un fichier texte de sortie sortie2.txt

EUR 1.2330
EUR 1.2345



Merci pour votre aide, car c'est un peu trop dur pour mes competences ^^

9 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
Salut,

1ère partie
root@debian:~# cat max.pl
#!/usr/bin/perl
#
open LIRE,"a.txt" or die "E/S : $!\n";
open ECRIRE,">sortie.txt" or die "E/S : $!\n";

$max = 0;
while (<LIRE>){
        /(.*)\s+(\d.*)/;
        $max = $2 if $2 > $max;
}
print ECRIRE "EUR $max\n";
__END__
root@debian:~# cat a.txt
EUR 1.2315
EUR 1.2318
EUR 1.2356
root@debian:~# perl max.pl
root@debian:~# cat sortie.txt
EUR 1.2356
root@debian:~#
1
Merci

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

CCM 65492 internautes nous ont dit merci ce mois-ci

Merci bp pour ton aide lami20..
Effectivement c'est bien au dessus de mes competences.. ! hihi..
cela faisait deux jours que je galerais dessus.
^^

Je vais tester ca ce soir , sur mon pc, des que je rentre !
et pouvoir me debarasser de ce maudit excel qui met des heures a ouvrir des importations de grands fichiers..
merci :-)

si tu as une idee pour le deuxieme je suis preneur de ton aide.
eric.
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
Re,

la 2ème partie
root@debian:~# cat moyenne.pl
#!/usr/bin/perl
#
open LIRE,"b.txt" or die "E/S : $!\n";
open ECRIRE,">sortie2.txt" or die "E/S : $!\n";

while (<LIRE>){
  @t = $_ =~ /(\S+)/g;
  shift @t;
  printf ECRIRE "EUR %.4f\n",(eval (join "+",@t) / scalar @t);
}
__END__
root@debian:~# cat b.txt
EUR 1.2350 1.2310
EUR 1.2370 1.2320
root@debian:~# perl moyenne.pl
root@debian:~# cat sortie2.txt
EUR 1.2330
EUR 1.2345
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
et pouvoir me debarasser de ce maudit excel

Alors sache qu'il y a des modules Perl qui te permettent de travailler sur des fichier Excel et d'écrire des fichiers Excel sans avoir besoin de Microsoft.

Pour écrire
Spreadsheet::WriteExcel

Pour lire
Spreadsheet::ParseExcel

A ne pas oublié Openoffice.org
Merci,
Chapeau !

ca marche comme sur des roulettes, chez moi ..

je vais essayer maintenant de comprendre ton script..car j'etais vraiment parti dans une mauvaise direction..



now, je vais essayer d'ajouter quelques elements pour finaliser l'ensemble..

car en fait mon fichier a cette tete

EUR 10.23 10.13
AUD 1.32 1.12
CSZ 12.32 10.14
EUR 18.12 17.50
VOL 14.23 14.10

il faut donc que j'arrive deja a extraire les lignes par exemple toutes les EUR puis ensuite j'applique ton script (moyenne puis max)..
ca je pense y a ariver ..eventuellement , si je n'arrive pas en perl, en passant par script windows ..

cetait mon premier post sur comment ca marche ..
thx lami ..
Pour excel je te remercie pour les liens..
Pour oppenoffice , jai des fichiers excel avec tout plein de macro et d'autres part des addin propres a excel donc open office je laisse un peu de coté..Mon probleme avec excel etait surtout la limitation a 65000 lignes.
Avec le nouveau excel , ils ont fait sauter cette barrriere..
La faire sauter c'est bien ..mais il faut assurer derriere..ce qui n'est pas le cas
Car si tu importes un fichier de 200 000 lignes puis tu as des calculs sur 10 colonnes, l'importation de ce fichier prend au bas mot pres de 5 mn.. Je ne sais pas ce qu'il fait..
eric
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,

moyenne
lami20j@debian:~/trash$ cat moyenne.pl
#!/usr/bin/perl
#
open LIRE,"b.txt" or die "E/S : $!\n";
open ECRIRE,">sortie2.txt" or die "E/S : $!\n";

while (<LIRE>){
  next unless /^EUR/;
  @t = $_ =~ /(\S+)/g;
  shift @t;
  printf ECRIRE "EUR %.4f\n",(eval (join "+",@t) / scalar @t);
}
__END__
lami20j@debian:~/trash$ cat b.txt
EUR 10.23 10.13
AUD 1.32 1.12
CSZ 12.32 10.14
EUR 18.12 17.50
VOL 14.23 14.10
lami20j@debian:~/trash$ perl moyenne.pl
lami20j@debian:~/trash$ cat sortie2.txt
EUR 10.1800
EUR 17.8100
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
max
lami20j@debian:~/trash$ cat max.pl
#!/usr/bin/perl
#
open LIRE,"a.txt" or die "E/S : $!\n";
open ECRIRE,">sortie.txt" or die "E/S : $!\n";

$max = 0;
while (<LIRE>){
        next unless /^EUR/;
        /(.*)\s+(\d.*)\s+\d.*/;
        $max = $2 if $2 > $max;
}
print ECRIRE "EUR $max\n";
__END__
lami20j@debian:~/trash$ cat a.txt
EUR 10.23 10.13
AUD 1.32 1.12
CSZ 12.32 10.14
EUR 18.12 17.50
VOL 14.23 14.10
lami20j@debian:~/trash$ perl max.pl
lami20j@debian:~/trash$ cat sortie.txt
EUR 18.12
Bonjour,
Merci ..

ca marche! Moi j'etais reparti de travers sur un grep

bon week end..
tu m'as fait avancer a grand pas !
:-)
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
De rien ;-)
A la prochaine ;-))