Bonjour,
Est ce que c'est possible de lire un fichier texte par lot, par exemple 20 lignes par 20 lignes.
Merci beaucoup.
Version imprimable
Bonjour,
Est ce que c'est possible de lire un fichier texte par lot, par exemple 20 lignes par 20 lignes.
Merci beaucoup.
Bonjour,
Je ne connais pas de composant qui fait cela, mais deux idées comme ça qui pourrait t'aider :
1/ tFileInputFullRow (lecture du fichier ligne par ligne) -> tjavaRow (pour sauvegarder les lignes, éventuellement un traitement)
La sauvegarde des lignes, dans un hashMap d'ArrayList par exemple. Avec une variable globale qui stocke un compteur de ligne tu peux savoir quand tu arrives à 20.
Donc mon idée : stocker les 20 premières lignes puis remettre à 0 et faire un nouvel ArrayList avec les 20 prochaines lignes. A la fin tu peux traiter les lignes 20 par 20. Mon idée à une limite si la taille du fichier est trop importante.
Edit : une idée à étudier 2/ -Première lecture du fichier pour avoir la taille.
- faire une boucle de lecture du fichier et mettre dans le head et dans le footer une petite formule qui calcul grâce à cette variable ((Integer)globalMap.get("tFileInputDelimited_1_NB_LINE")), l'intervalle à prendre dans le fichier.
Bonjour,
Apparemment ce n'est pas géré dans Talend alors je me suis débrouillé en code JAVA.
J'ai fait un lien iterate entre l'input 'le fichier' et un composant java, je compte jusqu'à 20 puis je stocke dans un ArrayList de String puis je remets le compteur a zéro et je refais la même chose.
Merci en tout cas.
Bonjour,
Excusez de rouvrir la discussion après tant d’année :D En fait j’ai un besoin similaire.
Voilà ce que j’ai fait :
Pièce jointe 344979
En sortie du composant tFlowToIterate, j’ai activé la case à cocher d’exécutions parallèles, et j’ai choisi un lot de 10
Pièce jointe 344984
Or lors de l’affichage dans le tJava par le code :
Code:
1
2 System.out.println( ((Integer)globalMap.get("tFlowToIterate_1_CURRENT_ITERATION")) );
Les lignes parcourus ne sont pas en ordre, et leur ordre diffère d’une exécution à l’autre, comme par exemple :
Pièce jointe 344987
Y a-t-il une manière plus simple à faire ?
Merci d’avance.
Cordialement.