Pour nettoyer vos données avec Talend, il est intéressant de créer des routines. Voici un exemple de routine qui permet de nettoyer un String d’accent ou d’autres caractères.
/*************************************************************/
public static String nettoyage(String mot)
{
if (mot!= null)
{
String chaineOK = « azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN0123456789 « ;
mot = mot.replaceAll(« [ÀÁÂÃÄÅ]« , « A »);
mot = mot.replace(« Ç », « C »);
mot = mot.replaceAll(« [ÈÉÊË]« , « E »);
mot = mot.replaceAll(« [ÌÍÎÏ]« , « I »);
mot = mot.replaceAll(« [ÒÓÔÕÖ]« , « O »);
mot = mot.replaceAll(« [ÙÚÛÜ]« , « U »);
mot = mot.replace(« Ý », « Y »);
mot = mot.replaceAll(« [àáâãäå]« , « a »);
mot = mot.replace(« ç », « c »);
mot = mot.replaceAll(« [èéêë]« , « e »);
mot = mot.replaceAll(« [ìíîï]« , « i »);
mot = mot.replaceAll(« [ðòóôõö]« , « o »);
mot = mot.replaceAll(« [ùúûü]« , « u »);
mot = mot.replaceAll(« [ýÿ]« , « y »);
//mot = mot.replaceAll(« [/_/'/-//]« , « KKKK »);
mot = mot.replaceAll(« [_'-/]« , » « );
for (int i=0; i<mot.length(); i++)
{
boolean trouve = true;
for (int j=0; j<chaineOK.length(); j++)
{
if (mot.charAt(i) == chaineOK.charAt(j))trouve = false;
}
if (trouve) mot = mot.replace(mot.charAt(i), ‘_’);
}
}
return mot;
}
/********************************************/
Après dans votre tMap ou encore dans les composants tels que tJava, tJavaFlex…vous pourrez appeler vos routines via :
(routines_nettoyage.nettoyage(row1.monchamp.trim())) ou (leFichierOuSeTrouveMesRoutines.leNomdeMaFonction(row1.monchamp.trim()))
J’espère que ça vous aidera!
3 décembre 2008 à 18 h 21 min
Pour nettoyer les accents je vous propose une autre implémentation très largement inspiré par un utilisateur de http://www.developpez.com (http://java.developpez.com/sources/?page=nombresDatesString#supprimmerAccents)
Voici les performances que j’obtient:
Nombre total d’opérations effectuées par test:1000000
sansAccent()=3039 ms
chaine origine : ÀÁÂÃÄÅàáâãäåèéêëÈÉÊËÒÓÔÕÖòóôõöÙÚÛÜùúûüìíîïÎÏñç
chaine sans accents : AAAAAAaaaaaaeeeeEEEEOOOOOoooooUUUUuuuuiiiiIInc
nettoyage()=45105 ms
chaine origine : ÀÁÂÃÄÅàáâãäåèéêëÈÉÊËÒÓÔÕÖòóôõöÙÚÛÜùúûüìíîïÎÏñç
chaine sans accents : AAAAAAaaaaaaeeeeEEEEOOOOOoooooUUUUuuuuiiiiII_c
Et le code très légèrement retouché:
/**************************************************************/
import java.util.ArrayList;
public abstract class StringOperation {
/** Index du 1er caractere accentué * */
private static final int MIN = 192;
/** Index du dernier caractere accentué * */
private static final int MAX = 255;
/** Vecteur de correspondance entre accent / sans accent * */
private static final String[] map = initMap();
/**
* Initialisation du tableau de correspondance entre les caractéres accentués et leur homologues non accentués
*/
@SuppressWarnings(« unchecked »)
private static String[] initMap() {
ArrayList list = new ArrayList();
java.lang.String car = null;
car = « A »;
list.add(car); /* ‘\u00C0′ À alt-0192 */
list.add(car); /* ‘\u00C1′ Á alt-0193 */
list.add(car); /* ‘\u00C2′ Â alt-0194 */
list.add(car); /* ‘\u00C3′ Ã alt-0195 */
list.add(car); /* ‘\u00C4′ Ä alt-0196 */
list.add(car); /* ‘\u00C5′ Å alt-0197 */
car = « AE »;
list.add(car); /* ‘\u00C6′ Æ alt-0198 */
car = « C »;
list.add(car); /* ‘\u00C7′ Ç alt-0199 */
car = « E »;
list.add(car); /* ‘\u00C8′ È alt-0200 */
list.add(car); /* ‘\u00C9′ É alt-0201 */
list.add(car); /* ‘\u00CA’ Ê alt-0202 */
list.add(car); /* ‘\u00CB’ Ë alt-0203 */
car = « I »;
list.add(car); /* ‘\u00CC’ Ì alt-0204 */
list.add(car); /* ‘\u00CD’ Í alt-0205 */
list.add(car); /* ‘\u00CE’ Î alt-0206 */
list.add(car); /* ‘\u00CF’ Ï alt-0207 */
car = « D »;
list.add(car); /* ‘\u00D0′ Ð alt-0208 */
car = « N »;
list.add(car); /* ‘\u00D1′ Ñ alt-0209 */
car = « O »;
list.add(car); /* ‘\u00D2′ Ò alt-0210 */
list.add(car); /* ‘\u00D3′ Ó alt-0211 */
list.add(car); /* ‘\u00D4′ Ô alt-0212 */
list.add(car); /* ‘\u00D5′ Õ alt-0213 */
list.add(car); /* ‘\u00D6′ Ö alt-0214 */
car = « * »;
list.add(car); /* ‘\u00D7′ × alt-0215 */
car = « 0″;
list.add(car); /* ‘\u00D8′ Ø alt-0216 */
car = « U »;
list.add(car); /* ‘\u00D9′ Ù alt-0217 */
list.add(car); /* ‘\u00DA’ Ú alt-0218 */
list.add(car); /* ‘\u00DB’ Û alt-0219 */
list.add(car); /* ‘\u00DC’ Ü alt-0220 */
car = « Y »;
list.add(car); /* ‘\u00DD’ Ý alt-0221 */
car = « Þ »;
list.add(car); /* ‘\u00DE’ Þ alt-0222 */
car = « B »;
list.add(car); /* ‘\u00DF’ ß alt-0223 */
car = « a »;
list.add(car); /* ‘\u00E0′ à alt-0224 */
list.add(car); /* ‘\u00E1′ á alt-0225 */
list.add(car); /* ‘\u00E2′ â alt-0226 */
list.add(car); /* ‘\u00E3′ ã alt-0227 */
list.add(car); /* ‘\u00E4′ ä alt-0228 */
list.add(car); /* ‘\u00E5′ å alt-0229 */
car = « ae »;
list.add(car); /* ‘\u00E6′ æ alt-0230 */
car = « c »;
list.add(car); /* ‘\u00E7′ ç alt-0231 */
car = « e »;
list.add(car); /* ‘\u00E8′ è alt-0232 */
list.add(car); /* ‘\u00E9′ é alt-0233 */
list.add(car); /* ‘\u00EA’ ê alt-0234 */
list.add(car); /* ‘\u00EB’ ë alt-0235 */
car = « i »;
list.add(car); /* ‘\u00EC’ ì alt-0236 */
list.add(car); /* ‘\u00ED’ í alt-0237 */
list.add(car); /* ‘\u00EE’ î alt-0238 */
list.add(car); /* ‘\u00EF’ ï alt-0239 */
car = « d »;
list.add(car); /* ‘\u00F0′ ð alt-0240 */
car = « n »;
list.add(car); /* ‘\u00F1′ ñ alt-0241 */
car = « o »;
list.add(car); /* ‘\u00F2′ ò alt-0242 */
list.add(car); /* ‘\u00F3′ ó alt-0243 */
list.add(car); /* ‘\u00F4′ ô alt-0244 */
list.add(car); /* ‘\u00F5′ õ alt-0245 */
list.add(car); /* ‘\u00F6′ ö alt-0246 */
car = « / »;
list.add(car); /* ‘\u00F7′ ÷ alt-0247 */
car = « 0″;
list.add(car); /* ‘\u00F8′ ø alt-0248 */
car = « u »;
list.add(car); /* ‘\u00F9′ ù alt-0249 */
list.add(car); /* ‘\u00FA’ ú alt-0250 */
list.add(car); /* ‘\u00FB’ û alt-0251 */
list.add(car); /* ‘\u00FC’ ü alt-0252 */
car = « y »;
list.add(car); /* ‘\u00FD’ ý alt-0253 */
car = « þ »;
list.add(car); /* ‘\u00FE’ þ alt-0254 */
car = « y »;
list.add(car); /* ‘\u00FF’ ÿ alt-0255 */
list.add(car); /* ‘\u00FF’ alt-0255 */
return (String[]) list.toArray(new String[0]);
}
/**
* Transforme une chaine pouvant contenir des accents dans une version sans accent
*
* @param chaine Chaine a convertir sans accent
* @return Chaine dont les accents ont été supprimé
*/
public static java.lang.String sansAccent(java.lang.String chaine) {
java.lang.StringBuilder sb = new StringBuilder(chaine);
for (int bcl = 0; bcl = MIN && carVal <= MAX) { // Remplacement
java.lang.String newVal = map[carVal - MIN];
sb.replace(bcl, bcl + 1, newVal);
}
}
return sb.toString();
}
public static void main(String[] args) {
String chaine = « ÀÁÂÃÄÅàáâãäåèéêëÈÉÊËÒÓÔÕÖòóôõöÙÚÛÜùúûüìíîïÎÏñç »;
int loop = 1000000;
System.out.println(« Nombre total d’opérations effectuées par test: » + loop);
long time1 = System.currentTimeMillis();
String chaine2 = « »;
for (int i = 0; i < loop; i++) {
chaine2 = StringOperation.sansAccent(chaine);
}
long time2 = System.currentTimeMillis();
System.out.println(« sansAccent()= » + (time2 – time1) + » ms »);
System.out.println(« chaine origine : » + chaine);
System.out.println(« chaine sans accents : » + chaine2);
time1 = System.currentTimeMillis();
for (int i = 0; i < loop; i++) {
chaine2 = StringOperation.nettoyage(chaine);
}
chaine2 = StringOperation.nettoyage(chaine);
time2 = System.currentTimeMillis();
System.out.println();
System.out.println(« nettoyage()= » + (time2 – time1) + » ms »);
System.out.println(« chaine origine : » + chaine);
System.out.println(« chaine sans accents : » + chaine2);
// System.out.println(« chaine origine : » + chaine);
// System.out.println(« chaine sans accents : » + chaine2);
}
public static String nettoyage(String mot) {
if (mot != null) {
String chaineOK = « azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN0123456789 « ;
mot = mot.replaceAll(« [ÀÁÂÃÄÅ]« , « A »);
mot = mot.replace(« Ç », « C »);
mot = mot.replaceAll(« [ÈÉÊË]« , « E »);
mot = mot.replaceAll(« [ÌÍÎÏ]« , « I »);
mot = mot.replaceAll(« [ÒÓÔÕÖ]« , « O »);
mot = mot.replaceAll(« [ÙÚÛÜ]« , « U »);
mot = mot.replace(« Ý », « Y »);
mot = mot.replaceAll(« [àáâãäå]« , « a »);
mot = mot.replace(« ç », « c »);
mot = mot.replaceAll(« [èéêë]« , « e »);
mot = mot.replaceAll(« [ìíîï]« , « i »);
mot = mot.replaceAll(« [ðòóôõö]« , « o »);
mot = mot.replaceAll(« [ùúûü]« , « u »);
mot = mot.replaceAll(« [ýÿ]« , « y »);
// mot = mot.replaceAll(« [/_/'/-//]« , « KKKK »);
mot = mot.replaceAll(« [_'-/]« , » « );
for (int i = 0; i < mot.length(); i++) {
boolean trouve = true;
for (int j = 0; j < chaineOK.length(); j++) {
if (mot.charAt(i) == chaineOK.charAt(j))
trouve = false;
}
if (trouve)
mot = mot.replace(mot.charAt(i), ‘_’);
}
}
return mot;
}
}
/******************************************************/
4 décembre 2008 à 10 h 06 min
Merci je pense que ça va réellement en aider plus d’un dans son processus decisionnel
11 mai 2010 à 9 h 17 min
Impeccable : Plug & play
Merci pour ce partage
yann
19 décembre 2014 à 11 h 56 min
Bonjour,
Désolé de réveiller un vieux post, mais ayant été confronté au même pb, j’ai cherché un peu et dans Talend Open Studio for Data Integration, il existe la routine TalendString.removeAccents(String s)
ex : TalendString.removeAccents(« ÀÁÂÃÄÅàáâãäåèéêëÈÉÊËÒÓÔÕÖòóôõöÙÚÛÜùúûüìíîïÎÏñç »);
Renvoi la chaîne : « AAAAAAaaaaaaeeeeEEEEOOOOOoooooUUUUuuuuiiiiIInc ».
19 décembre 2014 à 14 h 12 min
C’est avec plaisir que tu réveilles ce vieux post. Toute connaissance est bonne à partager.
Merci à toi!