#1 Tue 19 March 2013 11:35
- martin.baussier
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 22 Sep 2007
- Messages: 69
Une simple boucle ?
Bonjour,
Je cherche comment réaliser une boucle des plus simple :
J'ai une table A et une table B. Une fois positionné sur le premier enregistrement de la table A, je souhaiterais le comparer avec un TESTER a l'ensemble des enregistrements de la table B. Puis ainsi de suite pour les autres enregistrements de la table A...
Je viens de tenter de créer une liste dans chaque enregistrent de A (sur une jointure bidon avec FeatureMerger) et une boucle contenant:
=>un LISTEXTRACTOR, basé sur une valeur i qui s'incrémente jusqu'à ce que le stest soit bon
=>un TESTER, qui compare une valeur de A avec B (si test=ok on sort de la boucle sinon on incrémente i)
=>un EXPRESSIONEVALUATOR (pour incrémenter i)
Mais le traitement est beaucoup trop lourd, non optimisé et compliqué !
Peut être suis je obligé de réaliser ce projet en passant par un script TCL ?
Mes chers amis auriez vous une idée à me proposer qui révolutionnerait mon projet ???
Merci d'avance aux âmes qui voudront bien m’apporter pierres à mon édifice.
Martin Baussier
Institut national de l'origine et de la qualité (INAO)
Chargé de mission géomatique (Service Délimitation - BDDC)
Hors ligne
#2 Tue 19 March 2013 12:04
- pyjoubert
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Mar 2006
- Messages: 347
Re: Une simple boucle ?
Bonjour,
Réponse en live (sans trop réfléchir)
-Essayer de faire une liste avec les élement de B
-Ensuite de faire un LISTEXPLODER dans la branche des A
Hors ligne
#3 Tue 19 March 2013 22:56
- lefred
- Participant occasionnel
- Lieu: Sophia Antipolis
- Date d'inscription: 3 Jul 2008
- Messages: 42
Re: Une simple boucle ?
Bonjour,
Tenter d'appliquer dans FME un algorithme à base de boucle n'est effectivement pas simple, et aboutit souvent à un traitement peu efficace.
En fait, si vos tables proviennent d'une base de données, il serait surement préférable dans votre cas d'utiliser un transformer SQLEXECUTOR avec une requête "SELECT ... FROM ... WHERE ..." directement sur les tables d'origine, ou avec un transformer JOINER si seule l'une des tables provient d'une base de données.
Si aucune des 2 tables ne provient d'une base de données, il me semble que le transformer INLINEQUERIER devrait être bien adapté.
Sinon (et j'arrête là :-)), il devrait être possible de bidouiller directement un transformer FEATUREMERGER avec un attribut de jointure de valeur constante sur toutes les features en spécifiant "process duplicate supplier" à True (ce qui devrait créer toutes les combinaisons de features de A et B) puis de sélectionner les bonnes via un tester. Attention, cette dernière solution, pour le moins rustique, risque de donner des performances catastrophiques si le nombre de features dans les tables A et B est élevé.
Courage ! :-)
Frederic
--
Frédéric Eichelbrenner
Ellipso Facto - Sophia Antipolis
Hors ligne
#4 Wed 20 March 2013 09:50
- lefred
- Participant occasionnel
- Lieu: Sophia Antipolis
- Date d'inscription: 3 Jul 2008
- Messages: 42
Re: Une simple boucle ?
Bonjour,
Le transformer INLINEQUERIER n'étant pas d'un abord très intuitif, je me suis dit qu'un petit exemple serait plus parlant.
Je joins un ZIP contenant deux dataset excel en entrée (list-date devant être comparé à test-date), le workbench et un fichier excel de sortie.
Ça devrait être assez simple à adapter à votre contexte.
Cordialement,
Frédéric
--
Frédéric Eichelbrenner
Ellipso Facto - Sophia Antipolis
Hors ligne
#5 Wed 20 March 2013 11:24
- martin.baussier
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 22 Sep 2007
- Messages: 69
Re: Une simple boucle ?
Merci pour ces infos Frédéric. Je vais regarder cela ce week-end et je tiendrais informer du résultat.
Martin Baussier
Institut national de l'origine et de la qualité (INAO)
Chargé de mission géomatique (Service Délimitation - BDDC)
Hors ligne
#6 Wed 20 March 2013 14:19
Re: Une simple boucle ?
Sinon, il y a aussi l'option de créer un transformer personnalisé qui, je pense, peut effectuer un traitement par ligne en entrée.
Par ailleurs au sein de transformer personnalisé, il y a la possibilité de boucler le transformer sur lui-même.
Cordialement
Hors ligne
#7 Wed 27 March 2013 09:22
- martin.baussier
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 22 Sep 2007
- Messages: 69
Re: Une simple boucle ?
La solution qui m'a été proposée par lefred est une merveille ! Je la recommande vivement, je n'ai pas eu à utiliser ce transformer auparavant (INLINEQUERIER), et je découvre alors un outil très puissant qui permet du requetage SQL sur n'importe quel type d'entrée.
Pour vous donner une idée mon histoire de boucle fonctionnait correctement mais le temps de traitement était d'une bonne douzaine d'heure... avec les conseils de Fred je suis passé à un petit quart d'heure de traitement pour arriver au même résultat.
Merci encore et bonne journée
Martin Baussier
Institut national de l'origine et de la qualité (INAO)
Chargé de mission géomatique (Service Délimitation - BDDC)
Hors ligne
#8 Wed 27 March 2013 21:52
- lefred
- Participant occasionnel
- Lieu: Sophia Antipolis
- Date d'inscription: 3 Jul 2008
- Messages: 42
Re: Une simple boucle ?
Bonsoir,
Content de constater que les quelques minutes que j'ai consacrées à proposer une solution ont été utiles...
Merci et à charge de revanche :-)
Frederic
--
Frédéric Eichelbrenner
Ellipso Facto - Sophia Antipolis
Hors ligne