OVH Cloud OVH Cloud

Trier dans un fichier

21 réponses
Avatar
Patrick
Bonjour
J'ai un soucis pour trier des enregistrement a l'interrieure d'un
fichier.

j'ai un fichier avec plusieurs enregistrements. je veux que les
enregistrement se trie dans l'ordre alphabetique par rapport =E0
l'enregistrement $toto[14]...

j'ai fait quelque chose du genre :

foreach $test01 (@PCVD)
{
chop $test01;
@xA01=3Dsplit /\|/,$test01;
@totoB2=3Dsort ({$xA01[14] } @xA01) ;

print "<font color=3Dred size=3D2 face=3Dtahoma>@totoB2<br>777\n";
print "</font>";=20
}

10 réponses

1 2 3
Avatar
Paul Gaborit
À (at) 26 Jun 2006 23:49:02 -0700,
"Patrick" écrivait (wrote):
J'ai une autre question, le résultat trié, je voudrais le mettre dans
un tableau pour pouvoir y effectué d'autre opérations.
Ma question, comment mettre le resultat trié dans un tableau du type
@TRIE_OK


Le résultat d'un 'sort' est une liste qu'on peut parcourir via un
'foreach' mais qu'on peut aussi affecter à un tableau. On peut même
l'affecter au tableau d'origine.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Patrick
Paul Gaborit wrote:
À (at) 26 Jun 2006 23:49:02 -0700,
"Patrick" écrivait (wrote):
J'ai une autre question, le résultat trié, je voudrais le mettre da ns
un tableau pour pouvoir y effectué d'autre opérations.
Ma question, comment mettre le resultat trié dans un tableau du type
@TRIE_OK


Le résultat d'un 'sort' est une liste qu'on peut parcourir via un
'foreach' mais qu'on peut aussi affecter à un tableau. On peut même
l'affecter au tableau d'origine.

Bonjour

dans mon code j'ai çà (grace à vous) :

foreach my $ligne (sort {$a->[12] cmp $b->[12]} @PCVD) {
# on affiche tous les champs (séparés par un |)
print join('|', @{$ligne}), "n<br><br>";
}

Donc j'ai bien en affichage le tableau trié ;-) qui s'affiche.
Mais je ne sais pas (je n'arrive pas ) à l'affecter à un tableau
celui d'origine ou un autre...

Pouvez vous m'aider ?
Merci


--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>



Avatar
Paul Gaborit
À (at) 27 Jun 2006 01:05:59 -0700,
"Patrick" écrivait (wrote):
Paul Gaborit wrote:
À (at) 26 Jun 2006 23:49:02 -0700,
"Patrick" écrivait (wrote):
J'ai une autre question, le résultat trié, je voudrais le mettre dans
un tableau pour pouvoir y effectué d'autre opérations.
Ma question, comment mettre le resultat trié dans un tableau du type
@TRIE_OK


Le résultat d'un 'sort' est une liste qu'on peut parcourir via un
'foreach' mais qu'on peut aussi affecter à un tableau. On peut même
l'affecter au tableau d'origine.

Bonjour

dans mon code j'ai çà (grace à vous) :

foreach my $ligne (sort {$a->[12] cmp $b->[12]} @PCVD) {
# on affiche tous les champs (séparés par un |)
print join('|', @{$ligne}), "n<br><br>";
}

Donc j'ai bien en affichage le tableau trié ;-) qui s'affiche.
Mais je ne sais pas (je n'arrive pas ) à l'affecter à un tableau
celui d'origine ou un autre...


@PCVD = sort {$a->[12] cmp $b->[12]} @PCVD;

ou

my @PCVD_trie = sort {$a->[12] cmp $b->[12]} @PCVD;

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>



Avatar
Patrick
Paul Gaborit wrote:
À (at) 27 Jun 2006 01:05:59 -0700,
"Patrick" écrivait (wrote):
Paul Gaborit wrote:
À (at) 26 Jun 2006 23:49:02 -0700,
"Patrick" écrivait (wrote):
J'ai une autre question, le résultat trié, je voudrais le mettre dans
un tableau pour pouvoir y effectué d'autre opérations.
Ma question, comment mettre le resultat trié dans un tableau du ty pe
@TRIE_OK


Le résultat d'un 'sort' est une liste qu'on peut parcourir via un
'foreach' mais qu'on peut aussi affecter à un tableau. On peut même
l'affecter au tableau d'origine.

Bonjour

dans mon code j'ai çà (grace à vous) :

foreach my $ligne (sort {$a->[12] cmp $b->[12]} @PCVD) {
# on affiche tous les champs (séparés par un |)
print join('|', @{$ligne}), "n<br><br>";
}

Donc j'ai bien en affichage le tableau trié ;-) qui s'affiche.
Mais je ne sais pas (je n'arrive pas ) à l'affecter à un tableau
celui d'origine ou un autre...


@PCVD = sort {$a->[12] cmp $b->[12]} @PCVD;

ou

my @PCVD_trie = sort {$a->[12] cmp $b->[12]} @PCVD;

--


################################################################
############### ICI TOUT MARCHE PAS DE SOUCIS ################
my @PCVD = ();
my $filename = "./dir/donnees.dat";
open my $hdl, "<", $filename or die "Can't read file '$filename':$!n";

while (<$hdl>) {
chomp;
#en supposant que les champs soit séparés par un pipe
push @PCVD, [split /|/, $_];
}
close $hdl;

# on trie sur le 12 champ
foreach my $ligne (sort {$a->[12] cmp $b->[12]} @PCVD) {
# on affiche tous les champs (séparés par un |)
print join('|', @{$ligne}), "n<br><br>";
}
##############################################################
############### ICI NE MARCHE PAS ############################
my @PCVD = ();
my $filename = "./dir/donnees.dat";
open my $hdl, "<", $filename or die "Can't read file '$filename':$!n";

while (<$hdl>) {
chomp;
#en supposant que les champs soit séparés par un pipe
push @PCVD, [split /|/, $_];
}
close $hdl;

# on trie sur le 12 champ
foreach my $ligne (sort {$a->[12] cmp $b->[12]} @PCVD) {
# on affiche tous les champs (séparés par un |)
print join('|', @{$ligne}), "n<br><br>";
}

je n'arrive pas a remplacer le code et inserer :

@PCVD = sort {$a->[12] cmp $b->[12]} @PCVD;

Car j'obtient :
ARRAY(0x86cccdc) ARRAY(0x868d21c) ARRAY(0x86a27e8)
############### ICI NE MARCHE PAS ############################
##############################################################
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>





Avatar
Paul Gaborit
À (at) 27 Jun 2006 01:54:56 -0700,
"Patrick" écrivait (wrote):
je n'arrive pas a remplacer le code et inserer :

@PCVD = sort {$a->[12] cmp $b->[12]} @PCVD;

Car j'obtient :
ARRAY(0x86cccdc) ARRAY(0x868d21c) ARRAY(0x86a27e8)


Donnez-nous le code qui vous permet d'obtenir le résultat
ci-dessus...

Ma boule de cristal me dit qu'en fait le tri se fait bien mais que
vous ne savez pas utiliser un tableau de tableau. Si elle a raison,
une lecture de perllol s'impose :

<http://perl.enstimac.fr/DocFr/perllol.html>

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Patrick
Le code est le suivant :

foreach my $ligne (sort {$a->[12] cmp $b->[12]} @PCVD) {
# on affiche tous les champs (séparés par un |)
@PCVD = sort {$a->[12] cmp $b->[12]} @PCVD;
}
et j'obtient :
ARRAY(0x86cccdc) ARRAY(0x868d21c) ARRAY(0x86a27e8)...
A++
Patrick


Paul Gaborit wrote:
À (at) 27 Jun 2006 01:54:56 -0700,
"Patrick" écrivait (wrote):
je n'arrive pas a remplacer le code et inserer :

@PCVD = sort {$a->[12] cmp $b->[12]} @PCVD;

Car j'obtient :
ARRAY(0x86cccdc) ARRAY(0x868d21c) ARRAY(0x86a27e8)


Donnez-nous le code qui vous permet d'obtenir le résultat
ci-dessus...

Ma boule de cristal me dit qu'en fait le tri se fait bien mais que
vous ne savez pas utiliser un tableau de tableau. Si elle a raison,
une lecture de perllol s'impose :

<http://perl.enstimac.fr/DocFr/perllol.html>

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>



Avatar
Paul Gaborit
À (at) 27 Jun 2006 02:16:06 -0700,
"Patrick" écrivait (wrote):
Le code est le suivant :

foreach my $ligne (sort {$a->[12] cmp $b->[12]} @PCVD) {
# on affiche tous les champs (séparés par un |)
@PCVD = sort {$a->[12] cmp $b->[12]} @PCVD;
}
et j'obtient :
ARRAY(0x86cccdc) ARRAY(0x868d21c) ARRAY(0x86a27e8)...


Ce n'est pas le code qui vous permet d'obtenir cet affichage ! La
preuve ? Il n'y aucun 'print' dans votre code !

En tous cas, vous avez une manière tout à fait particulière de
programmer : on a l'impression que vous prenez des lignes de code et
que vous les mélangez au hasard jusqu'à obtenir (peut-être) un
programme qui marche ! Vous me faites penser à J.L.Borges...

Une dernière suggestion :

# on trie le tableau des enregistrements
@PCVD = sort {$a->[12] cmp $b->[12]} @PCVD;

# on affiche tous les enregistrements (qui sont déjà triés)
foreach my $ligne (@PCVD) {
# $ligne est une référence vers un tableau de champs
# de l'enregistrement courant...
# on affiche tous les champs (séparés par un |)
print join('|', @{$ligne}), "n";
}

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Jean-Charles Gibier
À (at) 27 Jun 2006 02:16:06 -0700,
"Patrick" écrivait (wrote):
Le code est le suivant :

foreach my $ligne (sort {$a->[12] cmp $b->[12]} @PCVD) {
# on affiche tous les champs (séparés par un |)
@PCVD = sort {$a->[12] cmp $b->[12]} @PCVD;
}
et j'obtient :
ARRAY(0x86cccdc) ARRAY(0x868d21c) ARRAY(0x86a27e8)...


Ce n'est pas le code qui vous permet d'obtenir cet affichage ! La
preuve ? Il n'y aucun 'print' dans votre code !

En tous cas, vous avez une manière tout à fait particulière de
programmer : on a l'impression que vous prenez des lignes de code et
que vous les mélangez au hasard jusqu'à obtenir (peut-être) un
programme qui marche ! Vous me faites penser à J.L.Borges...

Une dernière suggestion :

# on trie le tableau des enregistrements
@PCVD = sort {$a->[12] cmp $b->[12]} @PCVD;

# on affiche tous les enregistrements (qui sont déjà triés)
foreach my $ligne (@PCVD) {
# $ligne est une référence vers un tableau de champs
# de l'enregistrement courant...
# on affiche tous les champs (séparés par un |)
print join('|', @{$ligne}), "n";
}



Allez hop une autre ;-)

@PCVD =`sort ./dossier/admin.ann.dat -t'|' -k8`;


Avatar
Patrick
Re Bonjour
Je vous confirme que je ne suis pas tres fort en perl et que je test et
que grace à vous et vos infos sur votre site et les livres sur perl
j'avance tout doucement.

Pour l'heure voici ou j'en suis :

ceci marche sur le code que je suis entrain de faire :
################################################################
my @PCVD = ();
my $filename = "./dir/admin.777.dat";
open my $hdl, "<", $filename or die "Can't read file '$filename':$!n";

while (<$hdl>) {
chomp;
#en supposant que les champs soit séparés par un pipe
push @PCVD, [split /|/, $_];
}
close $hdl;

# on trie sur le 12 champ
foreach my $ligne =(sort {$a->[12] cmp $b->[12]} @PCVD) {
# on affiche tous les champs (séparés par un |)
print join('|', @{$ligne}), "n";
}

Ce que je voudrai c'est mettre le resultat du trie dans un tableau
@PCVD_OK

Mais je ne sais pas comment mettre le resultat de dans ce tableau, j'ai
essayer tout ce que j'ai pu trouver sur le net ou sur les livres...
Pouvez vous encore aider le débutant que je suis...

Merci
################################################################
Paul Gaborit wrote:
À (at) 27 Jun 2006 02:16:06 -0700,
"Patrick" écrivait (wrote):
Le code est le suivant :

foreach my $ligne (sort {$a->[12] cmp $b->[12]} @PCVD) {
# on affiche tous les champs (séparés par un |)
@PCVD = sort {$a->[12] cmp $b->[12]} @PCVD;
}
et j'obtient :
ARRAY(0x86cccdc) ARRAY(0x868d21c) ARRAY(0x86a27e8)...


Ce n'est pas le code qui vous permet d'obtenir cet affichage ! La
preuve ? Il n'y aucun 'print' dans votre code !

En tous cas, vous avez une manière tout à fait particulière de
programmer : on a l'impression que vous prenez des lignes de code et
que vous les mélangez au hasard jusqu'à obtenir (peut-être) un
programme qui marche ! Vous me faites penser à J.L.Borges...

Une dernière suggestion :

# on trie le tableau des enregistrements
@PCVD = sort {$a->[12] cmp $b->[12]} @PCVD;

# on affiche tous les enregistrements (qui sont déjà triés)
foreach my $ligne (@PCVD) {
# $ligne est une référence vers un tableau de champs
# de l'enregistrement courant...
# on affiche tous les champs (séparés par un |)
print join('|', @{$ligne}), "n";
}

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>



Avatar
Paul Gaborit
À (at) 27 Jun 2006 08:19:24 -0700,
"Patrick" écrivait (wrote):
Pouvez vous encore aider le débutant que je suis...


Il vous suffit de *lire* et de *comprendre* ma réponse précédente...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

1 2 3