Bonjour,
Quelques conseils après avoir jeté un oeil à ton programme:
Tu gardes beaucoup d'informations en mémoire qui ne sont pas indispensables. Par exemple, tu devrais écrire tes logs de suite et ne pas les mettre dans des tableaux.
Tu utilises beaucoup de tableaux et ce n'est pas la structure la plus adaptée pour trouver des informations. des tables de hash vont être plus efficaces par exemple pour identifier les doublons.
Ton algorithme pour trouver les 10 premières chaines est trop coûteux (stocker dans un tableau et trier à la fin). Tu ne cherches que les 10 premiers, tu n'as pas besoin de trier tout le fichier. Pour cela tu dois utiliser un tableau trié avec les 10 premiers qui sera vide au départ et à chaque ligne tu regardes si la nouvelle ligne rentre dans les 10 premiers.
Je n'ai pas regardé en détail mais j'ai l'impression que la totalité de tes analyses peuvent se faire sans avoir le fichier global, en ligne par ligne, sauf bien entendu la détection de doublons. Pour cela, utilise une table de hash et si elle devient trop grosse, il est possible de la stocker dans un fichier au lieu de la mettre en mémoire (reviens vers le groupe si tu es dans ce cas)
Un petit truc pour finir: le code
$count = ($line=~ tr/*/*/);
permet de compter le nombre de charactères dans une chaîne.
$count = ($line=~ tr/\t/\t/);
Permet de compter le nombre de tabs.
Ton code est agréable à lire avec des commentaires. Merci! Par contre, commencer par
est indispensable pour un programme de cette taille!
Bon courage et reviens vers le groupe si tu bloques quelque part.
Partager