Pb de tableau [Résolu/Fermé]

Signaler
-
Messages postés
5578
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
15 juin 2021
-
Bonsoir, j'ai pb avec mon prog perl et je n'arrive pas a trouver la solution. Si vous pouvez m'aider c'est sympa :
J'ai 2 tableaux : tab1 et tab2
tab1 :
A
B
C
D

tab2 :
XxxxxByyyy;123
XxxxxCzzzz;456

Il faut que je recherche les occurrences de toutes les valeurs de tab1 dans tab2 et lorsque je les ai trouvé je rajoute dans tab1 la valeur qui se trouve après le caractère ; de tab2 précédé de ;.
Autrement dit il faut que tab1 soit égal a :
tab1 :
A
B;123
C;456
D

Je précise que les valeurs contenues dans tab1 sont unique

Merci d'avance pour votre aide.
JM



1 réponse

Messages postés
5578
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
15 juin 2021
937
Salut jml263,

Voilà une méthode.

1.

Tout d'abord, tu charges chaque ligne du premier fichier dans un hash, avec la valeur récupérée comme clef (en supprimant le \n avec chomp), et en valeur une chaîne vide.

2.

L'étape 2 suppose que l'on utilise une regexp sur chaque ligne du 2ème fichier.

Dans :

XxxxxByyyy;123  
XxxxxCzzzz;456 
il te faudra une regex pour matcher B dans "XxxxxByyyy;123" et C dans "XxxxxCzzzz;456" (et pour récupérer ce qui est à la suite du ; y compris le ;, c'est mieux dans ton cas)

Est-ce qu'on peut dire que le caractère à matcher est :

- dans une ligne commençant par 5 caractères quelconques
- se trouve en 6ème position
- qu'il est suivi de 4 caractères quelconques
- puis d'un ; et d'un nombre composé de chiffres terminant la ligne

Si oui, la regex suivante

^.{5}(.).{4}(;[0-9]+)$
matche ce caractère, d'une part, et le point virgule suivi du nombre, d'autre part.

Et donc, tu utilises chaque caractère matché comme clef de ton hash, pour mettre à jour le hash avec la valeur récupérée (y compris donc le ; qui est matché aussi).

3.

Tu as toutes tes données dans le hash désormais. Il te suffit de le parcourir, éventuellement en le triant par rapport aux clefs, et d'afficher pour chaque clef une ligne où tu concatènes la clef et la valeur contenue.


Dal
Merci DAL, c'est comme cela que j'ai résolu mon pb.

JM
Messages postés
5578
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
15 juin 2021
937
Cool :-)