Pb de tableau

Résolu/Fermé
jml263 - 27 févr. 2013 à 21:05
[Dal] Messages postés 6203 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 29 janvier 2025 - 1 mars 2013 à 09:18
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



A voir également:

1 réponse

[Dal] Messages postés 6203 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 29 janvier 2025 1 097
Modifié par [Dal] le 28/02/2013 à 10:28
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
0
Merci DAL, c'est comme cela que j'ai résolu mon pb.

JM
0
[Dal] Messages postés 6203 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 29 janvier 2025 1 097
1 mars 2013 à 09:18
Cool :-)
0