Split [PERL] - Perl - Programmation
Marsh Posté le 21-06-2005 à 11:34:36
Pourquoi ne pas faire quelque chose du genre :
Code :
|
Marsh Posté le 21-06-2005 à 11:52:19
Ok ça a l'air pas mal mais j'aimerai si possible rester à une instruction par tour de boucle (sans compter "chomp $l" et "$li++;" ).
Ceci dit je n'ai pas préciser que je voulais que le code soit optimiser en postant donc merci pour ta proposition
Si vous avez d'autre proposition plz ???
Marsh Posté le 21-06-2005 à 12:12:37
Gouki19 a écrit : Y-a t'il une façon plus propre d'ecrire la ligne d'argument récupérant le retour du split sachant que je ne réutilise pas les variables bidons "$r1", "$r2", "$r3", "$r4" et "$r5". |
Si tu ne fais rien du contenu récupéré par tes variables $r..., tu peux faire ceci :
Code :
|
Ainsi, pas besoin de récupérer les valeurs qui ne te servent pas
Marsh Posté le 21-06-2005 à 12:18:38
Aricoh a écrit : Si tu ne fais rien du contenu récupéré par tes variables $r..., tu peux faire ceci :
|
Excellent c'est exactement ce qu'il me faut, j'ai testé et ça fonctionne
Merci Aricoh
Marsh Posté le 21-06-2005 à 12:24:01
Gouki19 a écrit : |
Mon bon coeur me perdra
Marsh Posté le 21-06-2005 à 12:24:55
Mais ça reste une ligne d'un million de caractères, c'est ignoble à lire.
Même le forum il en veut pas.
Si tu utilises la solution d'Aricoh, essaie au moins d'espacer :
Code :
|
Marsh Posté le 21-06-2005 à 12:40:19
Elmoricq a écrit : Mais ça reste une ligne d'un million de caractères, c'est ignoble à lire.
|
Hmmm
J'ai pas bien capté ton "my" vu que le split se retrouve dans une boucle "while". Mais pour l'espacement pas de souci
En fait pour le moment j'ai fais comme ceci:
Code :
|
Ca fonctionne très bien
Sinon je m'égare un peu mais le but c'est de récupérer les adresses MAC d'un fichier ancien et de comparer avec un nouveau fichier pour déterminer quels sont les nouvelles adresses MAC par rapport à l'ancien fichier.
Je sais pas si il existe des modules Perl qui font une comparaison entre 2 tableaux et renvoient tous les éléments qui apparaissent en plus...???
Si vous avez des idées ???
Marsh Posté le 21-06-2005 à 12:42:06
Argh, j'ai retiré le "my" à l'instant, 1s avant que tu ne postes.
Une erreur de ma part.
Sinon la solution avec undef est bonne, mais le but de ma réponse était la mise en page. La lisibilité apporte une meilleure maintenabilité, ça permet de débusquer les erreurs plus facilement, et ça ne part pas en vrille dans un éditeur de texte plus limité.
Marsh Posté le 21-06-2005 à 12:45:29
Gouki19 a écrit : Sinon je m'égare un peu mais le but c'est de récupérer les adresses MAC d'un fichier ancien et de comparer avec un nouveau fichier pour déterminer quels sont les nouvelles adresses MAC par rapport à l'ancien fichier. |
Le problème en chargeant tes adresses MAC dans 2 tableaux, c'est que si la même adresse existe dans les deux tableaux MAIS pas au même emplacement du tableau, elles vont te ressortir toutes 2 comme des nouveautés
Le must serait dans ce cas d'utiliser les hash (ou tableaux de hachage)
Marsh Posté le 21-06-2005 à 12:49:46
LOL
Ah je vois pas de souci
Mais sinon t'aurai pas une idée pour mon deuxieme pb lol ??
Car j'ai pas envi de programmer une recherche dans un tableau pour controler si chaque élément d'un tableau est bien dans l'autre tableau !!! C'est lourd en temps de traitement je pense...
Marsh Posté le 21-06-2005 à 12:53:00
Aricoh a écrit : Le problème en chargeant tes adresses MAC dans 2 tableaux, c'est que si la même adresse existe dans les deux tableaux MAIS pas au même emplacement du tableau, elles vont te ressortir toutes 2 comme des nouveautés |
En effet j'avais pensé à ça mais comme je maîtrise pas trop les table de hash jme suis pas lancé directement.
Jvais voir de ce coté là
Merci à vous mais si ya d'autres idées n'hesitez pas
Marsh Posté le 21-06-2005 à 12:55:03
Gouki19 a écrit : Mais sinon t'aurai pas une idée pour mon deuxieme pb lol ?? |
Comme je dis plus haut, utilise des hash au lieu de tableaux simples
En analysant rapidos ton truc, tu récupères 4 valeurs de chaque ligne sous la forme :
Code :
|
Avec un hash (déclaré %tablemac et non plus @tablemac), tu pourrais formuler ton truc sous cette forme là :
Code :
|
Bien entendu, il te faut 2 hash bien distincts pour pouvoir comparer tes adresses MAC. Ensuite, il te suffit de faire une petite fonction pas bien méchante à lancer 2 fois :
- 1ère fois, elle compare les valeurs de l'ancien fichier avec le nouveau
- 2ème fois, elle fait la même chose mais entre le nouveau et l'ancien fichier
Marsh Posté le 21-06-2005 à 14:19:00
Ok j'y vois plus clair grace à ton explication, jme suis lancé avec les table de hash et ça a l'air bien plus approprié pour ce que je veux faire
Encore merci ^^
Marsh Posté le 21-06-2005 à 14:49:00
Aricoh a écrit : Comme je dis plus haut, utilise des hash au lieu de tableaux simples
|
Arf par contre il faut que les mac adress soient mes clés au lieu d'un entier comptant le nombre de ligne...
J'ai fais ceci mais j'ai des doutes car j'arrive pas à afficher les bonnes valeurs...
Code :
|
Je sais pas comment gérer les tables de hash à plusieurs dimensions...
Marsh Posté le 21-06-2005 à 15:34:00
Gouki19 a écrit : Arf par contre il faut que les mac adress soient mes clés au lieu d'un entier comptant le nombre de ligne... |
Je n'ai pas bien compris ce que tu cherchais à faire exactement, mais j'ai le sentiment qu'un hash de tableaux devrait te convenir (en admettant que je ne me trompe pas sur tes intentions).
Exemple :
Code :
|
On peut évidemment adapter ce principe pour créer des hash de hash, si jamais c'est ça qu'il te faut.
Marsh Posté le 21-06-2005 à 16:56:05
Ok je vais étudier ça pour voir si ça peut me convenir sinon j'essaierai d'etre plus clair sur mes intentions lors de mon prochain post
Marsh Posté le 22-06-2005 à 15:54:47
Re finalement c'est bon j'ai pu m'en sortir et faire ce que je voulais
Jvous remercie à tous pour votre aide
Marsh Posté le 21-06-2005 à 11:11:27
Salut voilà j'écris script Perl assez gros et j'aimerai limiter les déclarations de variables avec "my $mavariable1;". J'ai une ligne de code avec un split tel que:
Y-a t'il une façon plus propre d'ecrire la ligne d'argument récupérant le retour du split sachant que je ne réutilise pas les variables bidons "$r1", "$r2", "$r3", "$r4" et "$r5".
Comme je n'utilise pas ces dernieres dans la suite du programme, l'editeur de code me mentionne : "Name main::$r1 used only once ..."
Qu'est-ce que vous proposez ???