Extraction des données d’un fichier EDI dont le format ne correspond pas aux normes communes
Les normes EDI sont des formats pour les échanges de données informatisées qui spécifient l’emplacement des informations dans ces documents. Dans Talend, le module Data Mapper permet l’extraction de données pour ce type de fichier, mais uniquement pour les normes communes.
Dans ce tutoriel, vous apprendrez comment extraire les données d’un fichier EDI ayant une norme inconnue, en vous basant uniquement sur la spécification du fournisseur et en utilisant des fonctions Java de manipulation de chaînes de caractères.
Prérequis :
- Avoir des connaissances en Java.
- Avoir connaissance du composant tMap de Talend.
- Posséder un fichier EDI ainsi que sa spécification fournie par l’émetteur du fichier (fournisseur).
Dans ce tutoriel nous allons prendre un fichier EDI qui ressemble à la figure ci-dessous :

Notre émetteur du fichier nous a indiqué les positions et la longueur de chaque champ. Nous allons utiliser ces informations avec des fonctions Java pour extraire les valeurs de ces champs.
Procédure :
- Dans votre studio Talend, créez un nouveau job.
- Ajoutez le composant tFileInputDelimited permettant de lire votre fichier EDI.
- Configurez le schéma de votre fichier : Ajoutez une seule colonne de type string qui sert à lire chaque ligne du fichier.
- Ajoutez le composant tMap qui va servir à appliquer les fonctions Java et à créer vos champs de sortie.
- Reliez votre tFileInputDelimited avec votre tMap en utilisant un lien de type main.
- Configurez votre mapping dans le composant tMap : nous allons prendre l’exemple d’un seul champ qui a la position de départ 10 et une longueur de 10 caractères.
Dans la case correspondant à votre champ, veuillez ajouter le code Java suivant :
row2.EDI.length() < 10 ? null :
row2.EDI.length() <= (10 + 10) ? row2.EDI.substring(10, row2.EDI.length()).strip() :
row2.EDI.substring(10, 10 + 10).strip()
Explication du code Java :
row2.EDI.length() < 10 ? null : : Cette partie vérifie si la longueur de la chaîne row2.EDI est inférieure à 10. Si c’est le cas, alors la valeur retournée est null. Cela signifie que si la chaîne row2.EDI a moins de 10 caractères, la valeur retournée sera null.
row2.EDI.length() <= (10 + 10) ? row2.EDI.substring(10, row2.EDI.length()).strip() : : Si la longueur de la chaîne row2.EDI est supérieure ou égale à 10, mais inférieure ou égale à 20 (c’est-à-dire la plage de positions de 10 à 20), alors la partie suivante est exécutée. row2.EDI.substring(10, row2.EDI.length()).strip() extrait une sous-chaîne de row2.EDI à partir de la position 10 jusqu’à la fin de la chaîne, et la méthode strip() est utilisée pour supprimer les espaces blancs au début et à la fin de la sous-chaîne extraite. Cette valeur extraite est renvoyée.
row2.EDI.substring(10, 10 + 10).strip() : Si la longueur de la chaîne row2.EDI est supérieure à 20, alors cette partie est exécutée. row2.EDI.substring(10, 10 + 10) extrait une sous-chaîne de row2.EDI en utilisant la plage de positions de 10 à 20. Ensuite, la méthode strip() est utilisée pour supprimer les espaces blancs au début et à la fin de la sous-chaîne extraite. Cette valeur extraite est renvoyée.
7. Ajoutez le composant tLogRow qui permettra d’afficher le résultat de votre extraction.
Votre job devra ressembler à celui-ci :

Exécutez votre job et vérifiez vos résultats :

Comme le montre la figure ci-dessus, nous avons bien extrait le champ demandé avec 10 caractères.
Vous pouvez utiliser la même méthode pour extraire d’autres champs, il suffit juste de changer la position de départ et le nombre de caractères souhaités.
À la fin de ce tutoriel, vous savez désormais comment extraire les champs d’un fichier EDI sans utiliser les spécifications prédéfinies dans le module Data Mapper de Talend.
Laisser un commentaire
Il n'y a pas de commentaires pour le moment. Soyez le premier à participer !