Rechercher : dans
Par :

PERL _ Recuperer valeur maxi dune colonne

Dernière réponse le 17 nov 2007 à 11:51:21 rikki, le 16 nov 2007 à 13:35:19 
 Signaler ce message aux modérateurs

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 ^^

Configuration: Windows 2003
Firefox 1.5.0.12

Meilleures réponses pour « PERL _ Recuperer valeur maxi dune colonne » dans :
Les variables avec Perl VoirConcept de variable avec Perl Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Perl peuvent être de trois...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...

1

lami20j, le 16 nov 2007 à 13:55:38
  • +1

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:~#

lami20j

Répondre à lami20j

2

rikki, le 16 nov 2007 à 14:06:32

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.

Répondre à rikki

3

lami20j, le 16 nov 2007 à 14:10:26

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

lami20j

Répondre à lami20j

4

lami20j, le 16 nov 2007 à 14:16:40

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
lami20j

Répondre à lami20j

5

rikki, le 16 nov 2007 à 21:54:17

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

Répondre à rikki

6

lami20j, le 16 nov 2007 à 22:36:13

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

lami20j

Répondre à lami20j

7

lami20j, le 16 nov 2007 à 22:41:45

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

lami20j

Répondre à lami20j

8

rikki, le 17 nov 2007 à 11:15:13

Bonjour,
Merci ..

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

bon week end..
tu m'as fait avancer a grand pas !
:-)

Répondre à rikki

9

 lami20j, le 17 nov 2007 à 11:51:21

De rien ;-)
A la prochaine ;-))
lami20j

Répondre à lami20j
Collection CommentÇaMarche.net