<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - Blogs - Netsoro</title>
		<link>https://www.developpez.net/forums/blogs/443574-netsoro/</link>
		<description>Developpez.com, le Club des Développeurs et IT Pro</description>
		<language>fr</language>
		<lastBuildDate>Sun, 19 Apr 2026 05:28:02 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.jpg</url>
			<title>Forum du club des développeurs et IT Pro - Blogs - Netsoro</title>
			<link>https://www.developpez.net/forums/blogs/443574-netsoro/</link>
		</image>
		<item>
			<title>Talend : Vérification de la validité de dates dans un flux de données</title>
			<link>https://www.developpez.net/forums/blogs/443574-netsoro/b6041/talend-verification-validite-dates-flux-donnees/</link>
			<pubDate>Mon, 27 Aug 2018 09:29:48 GMT</pubDate>
			<description>Voici un petit job Talend...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Voici un petit job Talend permettant de récupérer les lignes d'un flux de données dont les dates sont valides.  <br />
<br />
Supposons qu'on a un fichier contenant des données avec des dates saisies dans des formats différents, et que nous voulons récupérer toutes les lignes dont les dates sont dans un des formats suivants:<br />
<br />
<ul><li style="">yyyy-MM-dd HH:mm:ss</li><li style="">yy-MM-dd HH:mm:ss</li><li style="">dd/MM/yyyy</li></ul><br />
<br />
Exemple de données sources:<br />
<br />
1;2010-02-09 00:00:00<br />
2;2010-02-09 00:00:00<br />
3;2010-13-09 00:00:00<br />
4;10-02-09 00:00:00<br />
5;2010-13-09<br />
6;10-02-09 00:00:120<br />
7;11/07/2018<br />
<br />
Ainsi, on utilise un composant de lecture des donnes, si les données se trouvent <br />
<br />
<ul><li style="">Dans un fichier Excel =&gt; tFileInputExcel</li><li style="">Dans un fichier plat =&gt; tFileInputDelimited</li><li style="">Dans une base de données selon la BD =&gt; tOracleInput, tMySqlInput, etc..</li></ul><br />
<br />
Job permettant de faire ce traitement :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p406937d1535362058/environnements-developpement/delphi/langage/curseur-dragdrop/date_job_1.png/" border="0" alt="Nom : date_job_1.png
Affichages : 553
Taille : 38,4 Ko"  style="float: CONFIG" /><br />
<br />
Configuration du composant de transformation tMap:<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p406941d1535362084/environnements-developpement/delphi/langage/curseur-dragdrop/date_config_2.png/" border="0" alt="Nom : date_config_2.png
Affichages : 656
Taille : 86,9 Ko"  style="float: CONFIG" /><br />
<br />
Expression de date valide :<br />
Au niveau de la table cible valide_date, un click sur la petite flèche blanche permet d'afficher la zone de texte où on peut saisir notre expression de filtre permettant de définir ce qu'on considère comme étant une date valide.<br />
C'est dans cette zone où on dira, si ma date est dans ce format là ou dans cet autre format etc.. c'est qu'elle est valide.<br />
L'Opération nous permettant de faire cette vérification est une routine qui s'appelle isDate(String,String), elle est encapsulée dans la classe statique TalendDate.<br />
  <br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:84px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br /></div></td><td valign="top"><pre style="margin: 0">
TalendDate.isDate(row1.date,&quot;yyyy-MM-dd HH:mm:ss&quot;) || 
TalendDate.isDate(row1.date,&quot;yy-MM-dd HH:mm:ss&quot;) || 
TalendDate.isDate(row1.date,&quot;dd/MM/yyyy&quot;)</pre></td></tr></table></pre>
</div><br />
On pourra assez facilement récupérer toutes les lignes contenant des dates non valides, en ajoutant une table cible de capture des rejets et en mettant simplement à <font color="#008000">true</font>  la propriété Catch output reject :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p406942d1535362124/environnements-developpement/delphi/langage/curseur-dragdrop/date_reject3.png/" border="0" alt="Nom : date_reject3.png
Affichages : 502
Taille : 22,9 Ko"  style="float: CONFIG" /><br />
<br />
Résultats :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p406946d1535362146/environnements-developpement/delphi/langage/curseur-dragdrop/date_res_3.png/" border="0" alt="Nom : date_res_3.png
Affichages : 520
Taille : 12,4 Ko"  style="float: CONFIG" /><br />
<br />
On constate que les lignes 1,2,4,7 du tLogRow_1 sont les dates qui sont valides selon les expressions définis et qu'on récupère les lignes rejetées dans le tLogRow_2.<br />
<br />
Export éléments sources :<br />
<br />
<a href="https://www.developpez.net/forums/attachments/p406950d1535362165/environnements-developpement/delphi/langage/curseur-dragdrop/test_valide_date.zip/"  title="Nom : test_valide_date.zip
Affichages : 81
Taille : 79,3 Ko">test_valide_date.zip</a></blockquote>

]]></content:encoded>
			<dc:creator>Netsoro</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/443574-netsoro/b6041/talend-verification-validite-dates-flux-donnees/</guid>
		</item>
		<item>
			<title><![CDATA[Talend : Compter le nombre de répétition d'un élément dans un flux]]></title>
			<link>https://www.developpez.net/forums/blogs/443574-netsoro/b6033/talend-compter-nombre-repetition-d-element-flux/</link>
			<pubDate>Sun, 26 Aug 2018 12:40:23 GMT</pubDate>
			<description>Je partage ce billet suite a...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Je partage ce billet suite a une question posée dans le forum Talend.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_quote">
		<div class="quote_container">
			<div class="bbcode_quote_container"></div>
			
				Voici mon problème : j'aimerais compté le nombre de fois que mon élément X (compté le nombre de fois que ce répète chaque numéro de téléphone) ce répète à la sortie de mon tMap. Comment faire cela ? 
			
		</div>
	</div>
</div><ul><li style=""> Si les numéros de téléphones se trouvent dans une base de données, dans ce cas un composant de lecture de la BDD avec une requête telle que :<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code sql :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:72px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">SELECT</span> Phone,COUNT<span class="br0">&#40;</span>*<span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> NBF <span style="color: #0000ff;">from</span> Phone_client
<span style="color: #0000ff;">WHERE</span> conditions
<span style="color: #0000ff;">GROUP</span> <span style="color: #0000ff;">BY</span> Phone;</pre></td></tr></table></pre>
</div><br />
Peut être relier au composant tMap soit en relation lookup ou en flux principale.</li><li style=""> Si les données se trouvent dans un fichier Excel ou plat, on peut utiliser le composant tAggregateRow, par exemple :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p406726d1535287822/environnements-developpement/delphi/composants-vcl/scroll-label/ph_agg_row.png/" border="0" alt="Nom : ph_agg_row.png
Affichages : 220
Taille : 23,7 Ko"  style="float: CONFIG" /><br />
<br />
schema tAggregateRow :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p406733d1535288038/environnements-developpement/delphi/composants-vcl/scroll-label/schema.png/" border="0" alt="Nom : schema.png
Affichages : 246
Taille : 29,3 Ko"  style="float: CONFIG" /><br />
<br />
Config tAggregateRow :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p406729d1535287973/environnements-developpement/delphi/composants-vcl/scroll-label/config.png/" border="0" alt="Nom : config.png
Affichages : 253
Taille : 48,2 Ko"  style="float: CONFIG" /><br />
<br />
Tu arrivera au même résultat :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p406737d1535288138/environnements-developpement/delphi/composants-vcl/scroll-label/resultat.png/" border="0" alt="Nom : resultat.png
Affichages : 207
Taille : 9,0 Ko"  style="float: CONFIG" /><br />
<br /></li><li style=""> Une autre solution avec quelques lignes de codes serait d'utiliser une structure de données comme un hashMap, ainsi on déclare le hashMap dans un tJava ou dans un tSetGlobalVar comme ceci :<br />
<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p406738d1535288217/environnements-developpement/delphi/composants-vcl/scroll-label/ph_job.png/" border="0" alt="Nom : ph_job.PNG
Affichages : 254
Taille : 24,8 Ko"  style="float: CONFIG" /><br />
<br />
Config tSetGlobalVar  :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p406739d1535288239/environnements-developpement/delphi/composants-vcl/scroll-label/ph_tsetgvar.png/" border="0" alt="Nom : ph_tSetGVar.PNG
Affichages : 222
Taille : 8,3 Ko"  style="float: CONFIG" /><br />
<br />
Dans le tJavaRow on charge les données dans le hashMap :<br />
<br />
Dans le code ci-dessous, s'il trouve un numéro pour la première fois il compte 1, sinon il incrémente et met à jour.<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code java :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:144px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td valign="top"><pre style="margin: 0">Map&lt;String,Integer&gt; m = <span class="br0">&#40;</span>Map&lt;String,Integer&gt;<span class="br0">&#41;</span>globalMap.get<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;m&quot;</span><span class="br0">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">if</span><span class="br0">&#40;</span>m.get<span class="br0">&#40;</span>input_row.phone_number<span class="br0">&#41;</span>==<span style="color: #0000ff;">null</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp;
	m.put<span class="br0">&#40;</span>input_row.phone_number,<span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span><span style="color: #0000ff;">else</span><span class="br0">&#123;</span>
	<span style="color: #0000ff;">int</span> cpt = 	m.get<span class="br0">&#40;</span>input_row.phone_number<span class="br0">&#41;</span><span style="color: #cc66cc;">+1</span>;
	m.put<span class="br0">&#40;</span>input_row.phone_number,cpt<span class="br0">&#41;</span>;
<span class="br0">&#125;</span></pre></td></tr></table></pre>
</div><br />
Ensuite, dans le tJavaFlex on parcourt le map pour récupérer les numéros et le nombre de fois où il le trouve dans le fichier, en sortie on branche les composants qu'on veux.<br />
<br />
config tJavaFlex :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p406741d1535288284/environnements-developpement/delphi/composants-vcl/scroll-label/ph_tjavaflex.png/" border="0" alt="Nom : ph_tjavaflex.PNG
Affichages : 258
Taille : 15,6 Ko"  style="float: CONFIG" /><br />
<br />
résultat :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p406742d1535288310/environnements-developpement/delphi/composants-vcl/scroll-label/ph_res.png/" border="0" alt="Nom : ph_res.PNG
Affichages : 217
Taille : 3,6 Ko"  style="float: CONFIG" /><br />
<br />
<br />
</li></ul></blockquote>

]]></content:encoded>
			<dc:creator>Netsoro</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/443574-netsoro/b6033/talend-compter-nombre-repetition-d-element-flux/</guid>
		</item>
	</channel>
</rss>
