Y aurait il une erreur du script de Jasmine80 ?
Bonjour aux gentils spécialistes de Perl (et de Python et...)
Voilà 4h30 que je triture la réponse de Jasmine80 à mon problème de tri.
Voilà 20 jours que je suis à potasser du Perl...je dois vraiment être le dernier des bouché côté méninges...
Sauf erreur stupide de ma part, le script de Jasmine80 ne fonctionne pas, même en modifiant le contenu du fichier vers du plus simple, et je parviens pas à trouver l'erreur.
J'ai fais un petit script basique qui m'a permis de constater que j'ai déjà +- 1900 noms !.
Un peu moins sans doute parcequ'il y a quelques doublons, mais n'en tenons pas compte pour l'instant; une chose à la fois.
Dans un but didactique je préférerais m'en tenir pour l'instant à un script se
rapprochant de celui de Jasmine80.
Je suis bien conscient que cela peut, peut être, prendre du temps de trier un tel gros fichier mais ce fichier ne servira pas à afficher les cours de la bourse, donc, même si cela doit prendre 10 heures à turbiner cela ne me dérange pas. Je ne crois pas avoir besoin de "Hors-Cache" ou de "Transformée Schwartzienne" pour aller plus vite.
Je précise que les "Datas" qui suivent les noms sont de toutes formes et aussi parfois deux mots en majuscules séparés par un espace.
Le Flag est un mot qui ne se retrouve jamais dans les Datas, il précède chaque nom.
Pour revenir au détail du script, je crois qu'il n'est pas nécessaire de reconnaître par regex la ligne des noms du fichier, il suffit de considérer que la ligne n°1 suivant le flag doit être la Key du Hash.
Ensuite il faudrait trier les Keys.
Puis afficher tout cela...tout un programme qui est clairement au dessus de mes humbles compétences pour le moment, malgré tous mes efforts.
A vous lire.
Merci d'avance.
Roland - Bruxelles.
Essai malheureux de tri de données...
Chère Jasmine80,
Voilà un piètre résultat de 3 heures de cogitations tardives...
Mon script ne fonctionne (évidemment...) pas.
Pas simple Perl...
use strict;
use warnings;
use diagnostics;
open FICHIER,"< data.txt" or die "Le fichier n'existe pas !";
my $i = 0;
my %data;
my $name;
while (my $line = <FICHIER>) {
# on vide la clé pour le bloc suivant (sécurité - pas nécessaire)
if ($line =~ m/FLAG_CONSTANT/){
$name = '';
}
# Compteur remis à zéro pour définir la ligne n° 0.
elsif ($line =~/FLAG_CONSTANT/){
$i = 0;
}
# nouvelle clé (nom-prénom) qui est le contenu de la ligne n°1.
elsif ($i ==1){
$name = $1;
}
elsif (defined $name) {
push @{$data{$name}}, $line;
}
++$i;
}
close FICHIER;
# tri
foreach my $name (sort keys %data){
print 'FLAG_CONSTANT'."\n";
print $name."\n";
map {print $_} @{$data{$name}};
}
Je crois avoir résolu ce problème de tri de données
Chère Jasmine80,
Grace à vous je crois avoir résolu mon problème.
Milles mercis.
En réalité la solution que j’ai trouvée est un peu différente de celle que vous proposiez.
J’ai préféré considérer que je voulais faire un tri sur la ligne suivant immédiatement une balise (ou un flag), et faire suivre, après le tri, les données qui dépendent de cette ligne.
Cette ligne peut avoir n’importe quel contenu en terme de caractères et pas uniquement un nom en majuscule puis un espace puis un prénom.
J’avoue que je n’ai pas tout compris de votre script mais maintenant que ça tourne, je vais pouvoir m’amuser un peu, relire les textes de base et progresser j’espère…
J'avais oublié de dire que je travaille en Windows XP.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| use strict;
use warnings;
use diagnostics;
open FICHIER,"< data.txt" or die "Le fichier n'existe pas !";
my %data;
my $name;
my $i = 0;
while (my $line =<FICHIER>) {
if ($line=~/FLAG_CONSTANT/){
$i=0;
$name=$1;
}
elsif ($i==1) {
$name=$line;
#print ("$name");
}
elsif (defined $name) {
push @{$data{$name}}, $line;
}
++$i;
}
close FICHIER;
foreach my $name (sort keys %data){
print 'FLAG_CONSTANT'."\n";
print $name."\n";
map {print $_} @{$data{$name}};
} |
Encore mercis à vous et aux autres intervenants.
A bientôt.
Portez vous bien.
Roland - Bruxelles.
Le $1 de ce script semble inutile.
Chère Jasmine80 -la-matinale..,
Quelle compétence !
Soyez pas trop dure avec les débutants...
Le $1 semble ne servir à rien, du moins à première vue. Il faudra que je prenne la peine de tester plus avant.
Ce qui s'est passé pour expliquer ma démarche c'est qu'il y a des emmerdeuses qui se prénomment LAURE ANNE ou encore FATIM ZAHRA. Des emm..qui s'appelent JEAN CHARLES ou encore des Portugais qui ont des noms de famille à tiroir du genre GRACA DE ALMEIDA BARRATA DE MAR...excusez du peu...
Sans compter les : "de la bourse plate de STEENOKKERZEEL JEAN STANISLAS dit HECTOR";
Ma ligne NOM PRENOM devenait donc très fantaisiste...
Je vais maintenant prendre quelques jours de repos avant de réattaquer Perl .
Portez vous bien et ..ne travaillez pas trop.
Merci encore.
Roland - Bruxelles