Page 1 sur 1

[R] Recherche multiple dans de multiple fichiers

Posté : mer. 14 janv. 2009 20:42
par pins38
Bonjour,

Je viens à nouveau vers vous car je n'arrive pas à mes fins. Voici mon problème, à partir d'une valeur (ADL), il me faut retrouver un destinataire, un lot et une référence et ce dans plusieurs fichiers distincts. Le nombre de fichiers peut être 1, 5, 8, 13 ou 102.Exemple (sur un fichier):

ADL ==> YRAWB900 qui me donne 16 destinataires et qui devraient me donner 76 lots et donc 76 références.

Pour l'instant je suis arrivé à récupérer les 16 destinataires dans un fichier Dest.txt qui contient le nom du fichier sans l'extension(.wri) suivi de la valeur du destinataire ==> 171 DEST=AG CLIENT; pour les lots je lis le fichier 171.wri ligne par ligne pour rechercher le destinataire et ramener la ligne contenant ce destinataire mais je ne ramène rien ! Fichier à traiter ==> 171.wri, fichier destinataires ==> Dest.txt, fichier lots ==> Lot.txt
► Afficher le texte
Dest.txt
(348 Octets) Téléchargé 62 fois
Lot.txt
(3.97 Kio) Téléchargé 59 fois
171.txt
(159.52 Kio) Téléchargé 62 fois
Pour les tests bien penser à remettre l'extension .wri au fichier 171.txt
Merci pour votre aide précieuse. :)

Re: [..] Recherche multiple dans de multiple fichiers

Posté : mer. 14 janv. 2009 21:36
par Tlem
Hummm pas évident de tout comprendre.
Pouvez vous expliquer le cheminement complet de ce que vous voudriez faire.

Re: [..] Recherche multiple dans de multiple fichiers

Posté : jeu. 15 janv. 2009 19:15
par pins38
Il me semblait que cela n'était pas très clair.
Je recherche ligne par ligne dans 1 à n fichiers la chaîne YRAWB900 et si je la trouve j'écris le nom du fichier sans l'extension et le destinataire dans Dest.txt
Chaîne Ligne où la chaîne est présente Résultat Dest.txt
YRAWB900 LOT=;DEST=AG CLIENT;ADLR=YRAWB900; 171 DEST=AG CLIENT; 1ere ligne où la chaîne à été trouvée.
...
YRAWB900 LOT=;DEST=171 QE 25;ADLR=YRAWB900; 171 DEST=171 QE 25;
...
YRAWB900 LOT=;DEST=171 RH 59;ADLR=YRAWB900; 171 DEST=171 RH 59; Dernière ligne où la chaîne à été trouvée.
Pour cette recherche pas de problèmes !
A partir du fichier Dest.txt, j'extrais les 3 premiers caractères qui vont me donner la variable $Centre qui va me servir à sélectionner le fichier dans lequel je vais effectuer la recherche des lots (ici 171.wri), j'extrais le reste de la ligne à partir du 4eme caractère qui va me donner la variable $Dest.
Je recherche ligne par ligne dans le(s) fichier(s) $Centre.wri la chaîne $Dest et si je la trouve j'écris le nom du fichier sans l'extension, le N° de ligne et le lot dans Lot.txt
Chaîne Ligne où la chaîne est présente Résultat Lot.txt
DEST=AG CLIENT; LOT=SUB;DEST=AG CLIENT;ENVOI=B;NB=00; 171 2677 LOT=SUB;DEST=AG CLIENT;ENVOI=B;NB=00;
...
DEST=AG CLIENT; LOT=;DEST=AG CLIENT;ENVOI=B;NB=00; 171 3741 LOT=;DEST=AG CLIENT;ENVOI=B;NB=00;
...
DEST=171 QE 25; LOT=17125;DEST=171 QE 25;ENVOI=B;NB=00; 171 2771 LOT=17125;DEST=171 QE 25;ENVOI=B;NB=00;
...
DEST=171 QE 25; LOT=17125;DEST=171 QE 25;ENVOI=B;NB=00; 171 3309 LOT=17125;DEST=171 QE 25;ENVOI=B;NB=00;
C'est cette recherche qui me pose problème.

Re: [..] Recherche multiple dans de multiple fichiers

Posté : ven. 16 janv. 2009 00:18
par Tlem
J'ai vraiment eu du mal à comprendre la totalité de la demande, tant les choses sont complexes.
Mais je crois y être arrivé.

Je n'ai pas mis de commentaire pour expliquer le code, mais si c'est nécessaire, je le ferais plus tard.

Voici mon code :
► Afficher le texteCode

Re: [..] Recherche multiple dans de multiple fichiers

Posté : dim. 18 janv. 2009 17:54
par pins38
Merci Thierry pour cette aide précieuse, il me reste une dernière boucle à faire et là il faut que le lise le fichier à l'envers pour retrouver une autre valeur et ce à partir d'une certaine ligne !
Un exemple étant plus parlant qu'un grand discours voici donc cet exemple :
La première boucle nous a donné un destinataire précédé du nom de fichier ou il a été trouvé ==> 171#DEST=AG CLIENT;
La deuxième boucle nous a donné un lot précédé du nom de fichier et de la ligne ou il a été trouvé ==>171#2677#LOT=SUB;DEST=AG CLIENT;ENVOI=B;NB=00;
La troisième boucle devrait nous donner la référence située quelque(s) ligne(s) au dessus du lot pour l'exemple ci dessus le résultat est : REF=49E0010; situé à la ligne 2675 (le nombre de ligne entre le destinataire et la référence n'est bien entendu jamais identique) ! Cela aurait été trop simple !
Cela se présente comme ça dans le fichier à lire :
2675 REF=49E0010;
2676 LOT=SUB;DEST=SUB;ENVOI=P;NB=00;
2677 LOT=SUB;DEST=AG CLIENT;ENVOI=B;NB=00;

2713 REF=49E0221;
2714 LOT=SUB;DEST=SUB;ENVOI=P;NB=00;
2715 LOT=SUB;DEST=REGROUP COMP;ENVOI=B;NB=00;
2716 LOT=SUB;DEST=AG CLIENT;ENVOI=B;NB=00;

Le résultat devrait se présenter comme ceci ==>
171#REF=49E0010;#LOT=SUB;DEST=AG CLIENT;ENVOI=B;NB=00;
171#REF=49E0221;#LOT=SUB;DEST=AG CLIENT;ENVOI=B;NB=00;

Re: [..] Recherche multiple dans de multiple fichiers

Posté : dim. 18 janv. 2009 20:43
par Tlem
Vous avez dans votre fichier Lot.txt, les différents lots pour lesquels vous voulez la référence ainsi que la ligne du lot et le nom du fichier .wri.

Donc vous allez devoir faire une boucle de lecture du fichier Lot.txt ligne à ligne, puis pour chaque ligne de ce fichier, relever le numéro de ligne indiqué ainsi que le nom du fichier concerné puis avec ces deux informations, vous pourrez lire le fichier .wri concerné en commençant par la ligne X-1 puis X-2 puis X-3 ...
Jusqu'à ce que vous trouviez dans la ligne la chaine : 'REF=' et là bingo vous aurez votre information. ;)

Aller, courage, vous y êtes presque. :lol:

Re: [..] Recherche multiple dans de multiple fichiers

Posté : lun. 19 janv. 2009 20:38
par pins38
J'ai réussi à trouver la première référence qui est à la ligne 2675 mais je reste coincé sur cette ligne et je ne vois pas ce qui cloche :?:
► Afficher le texte
Petit Bingo ! :)

Re: [..] Recherche multiple dans de multiple fichiers

Posté : lun. 19 janv. 2009 22:43
par Tlem
Ajoutez un ExitLoop après la ligne

Code : Tout sélectionner

FileWriteLine ($File2, $Line1)
pour sortir de votre 2ieme boucle et poursuivre la première. ;)

Re: [R] Recherche multiple dans de multiple fichiers

Posté : mar. 20 janv. 2009 19:40
par pins38
Merci, tout fonctionne parfaitement bien ! :lol: