Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1247 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Comparer valeurs de 3 fichiers et en afficher le resultat

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comparer valeurs de 3 fichiers et en afficher le resultat

n°1900331
Odissine
Posté le 29-06-2009 à 19:03:28  profilanswer
 

Bonjour à tous,
Voilà j'ai fait en PHP un script qui importe dans trois tables SQL le contenu de trois fichier assez volumineux (entre 1 et 30Mo).
Ces fichiers sont au format XML pour le premier, et texte pour les deux autrse.
 
Le but est de récupérer les infos nommées Corresp1 et Corresp2 du fichier XML ainsi que le statut (voir format du fichier xml ci-dessous). Correspondant sur 8 caractères seulement. (parfois il y en a 11 mais je ne veut que les 8 premiers)

Code :
  1. <XML>
  2. <INFO>
  3. <REC>
  4.   <Corresp1>AAAAAAAA</Corresp1>
  5.   <Corresp2>BBBBBBBB</Corresp2>
  6.   <Statut>enable</Statut>
  7.   <Balise4>xxx</Balise4>
  8. </REC>
  9. <REC>
  10.   <Corresp1>CCCCCCCC</Corresp1>
  11.   <Corresp2>BBBBBBBB</Corresp2>
  12.   <Statut>enable</Statut>
  13.   <Balise4>xxx</Balise4>
  14. </REC>
  15. <REC>
  16.   <Corresp1>DDDDDDDDC</Corresp1>
  17.   <Corresp2>BBBBBBBB</Corresp2>
  18.   <Statut>disable</Statut>
  19.   <Balise4>xxx</Balise4>
  20. </REC>
  21. ...
  22. </INFO>
  23. </XML>


Ne garder que les valeurs Corresp1 et Corresp2 unique et pour lesquelles le statut est a enable. Donc ici je ne devrais récupérer que AAAAAAAA, CCCCCCCC et BBBBBBBB (une seule fois BBBBBBBB) et pas DDDDDDDD car statut = disable.
A partir de ces informations, je réduit cette liste en ne gardant que les infos qui ne figurent pas dans le 2eme et le 3eme fichier texte.
 
2eme fichier Texte (formaté comme suit) :

Correspondant : AAAAAAAA
Department :  
Last Name :  
First Name :  
Correspondant : EEEEEEEE
Department :  
Last Name :  
First Name :
[...]


3eme fichier texte (simple liste) :

AAAAAAAA
FFFFFFFF
[...]


J'affiche ensuite mon résultat ou je l'exporte directement dans un 4eme fichier texte en liste.
 
Merci pour votre aide je n'y connais pas grand chose en Batch ...


Message édité par Odissine le 30-06-2009 à 15:36:03
mood
Publicité
Posté le 29-06-2009 à 19:03:28  profilanswer
 

n°1900556
produvba
Posté le 30-06-2009 à 13:54:28  profilanswer
 

Je suis pas sûr d'avoir compris, mais si c'est pour manipuler des bases avec SQL, pourquoi tu ne fais pas simplement une requête suppression du type  
DELETE * FROM Table1 WHERE champ1 NOT IN (SELECT Champ1 FROM TABLE2 UNION SELECT CHamp1 FROM TABLE3)  
ou quelque chose d'équivalent?

n°1900615
Odissine
Posté le 30-06-2009 à 15:37:53  profilanswer
 

J'ai édité mon poste pour une meilleure compréhension de mon problème ... et surtout pour le re-qualifier dans la section Shell/Batch ;)
 
En esperant que vous allez trouver une solution à mon problème :)

n°1900619
pataluc
Posté le 30-06-2009 à 15:48:18  profilanswer
 

pour le premier fichier, tu peux le faire avec un gros grep | sed:

 
Code :
  1. grep -B2 "<Statut>enable</Statut>" fichier.xml | grep Corresp | sed "s#.*<Corresp.>\(.*\)</Corresp.>.*#\1#" | sort | uniq
 

pour le reste j'ai pas compris ce que tu voulais.


Message édité par pataluc le 30-06-2009 à 15:48:49
n°1900623
Odissine
Posté le 30-06-2009 à 16:05:22  profilanswer
 

En clair, j'ai 3 fichiers...
Je dois extraire du premier la liste des infos contenu dans Corresp avec Statut enable (ca nous donne par ex 3700 resultats ...)
Ensuite je compare cette liste avec le 2e fichier en extrayant aussi les infos relatif à Correspondant (ca donne un total de pres de 12 000 correspondants par ex) et je n'affiche que les corresp qui ne figurent pas dans cette liste.
Je fais la meme chose avec le 3e fichier (qui contient que 42 correspondants).
 
Fichier 1 :
AAAAAAAA
BBBBBBBB
CCCCCCCC
DDDDDDDD
 
Fichier 2 :
AAAAAAAA
BBBBBBBB
EEEEEEEE
FFFFFFFF
GGGGGGGG
 
Fichier 3:
DDDDDDDD
GGGGGGGG
 
Résultat :
CCCCCCCC car il n'est ni dans le fichier 2 ni dans le fichier 3 ... (ce qui devrait donné un total de pres de 80 correspondants que je voudrais exporter dans un fichier 4.txt.

n°1900634
pataluc
Posté le 30-06-2009 à 16:17:27  profilanswer
 

Code :
  1. grep -B2 "<Statut>enable</Statut>" fichier1 | grep Corresp | sed "s#.*<Corresp.>\(.*\)</Corresp.>.*#\1#" | sort | uniq > out
  2. for l in `cat out` ; do grep -q $l fichier2 fichier3; if [ $? -ne 0 ] ; then echo $l; fi; done
 

ca doit pas être loin de ressembler à ce que tu as besoin.

 

par contre je garantie rien niveau perf


Message édité par pataluc le 30-06-2009 à 16:19:46
n°1900643
Odissine
Posté le 30-06-2009 à 16:29:22  profilanswer
 

Oups ... je dois pas etre dans le bon sujet ... car grep n'est pas une commande windows mais Unix ... :( ...  
En fait j'ai besoin de trouver un système (autre que PHP car temps d'exécution trop long) pour faire la requête ci-dessus ... je pensais le faire avec un .bat ... mais je vais m'orienter vers Java ou pire C... Mais bon la j'ai du boulot ;)

n°1900652
pataluc
Posté le 30-06-2009 à 16:37:58  profilanswer
 

et alors, les portages des commandes unix vers windows c'est pas pour les chiens!  :p  
 
moi j'utilise UnxUtils http://unxutils.sourceforge.net/ ;)
 
par contre faudra juste adapter la syntaxe du for qui n'es pas la même en dos et en unix, le reste devrait marcher comme sur des roulettes...


Message édité par pataluc le 30-06-2009 à 16:38:35

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Comparer valeurs de 3 fichiers et en afficher le resultat

 

Sujets relatifs
Recuperer le resultat d'un SQL dans javascriptPHP : Comparer valeur d'un tableau
Fichiers requis LibUSB"Fusionner" deux Itératorss dans une Jsp
[Résolu]Récupérer les valeurs d'un formulaire dans $_POST[ VBA ] Afficher sous excel la date & Heure de la derniere sauvegarde
Filtrer les K plus grandes valeurs d'un vecteurprobléme de numerotation des fichiers lors du download
[VBS][RESOLU][SCRIPT]Script de suppression de fichiers temporaires[Résolu] MySQL : LEFT JOIN et GROUP BY - récupérer la dernière valeur
Plus de sujets relatifs à : Comparer valeurs de 3 fichiers et en afficher le resultat


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR