2017-04-17 5 views
0

J'utilise Camel Bindy pour traiter les fichiers CSV que je reçois d'une société tierce. Dans leur csv, ils utilisent un séparateur qui se trouve dans la table ascii étendue: "\ u00a4" (code 164 en décimal).Séparateur Camel Bindy en code ASCII étendu

J'ai essayé de mettre Bindy comme ceci:

@CsvRecord(separator = "\u00a4") 

Mais il ne parvient pas à séparer les colonnes

Quand je change le séparateur csv par quelque chose de plus standard comme « ; » Tout fonctionne bien. Comme ce csv est envoyé par une société externe, je ne peux pas le changer moi-même.

Y a-t-il un moyen de configurer Bindy pour cela?

@CsvRecord(separator = "§") 
public class Employee { 

@DataField(pos = 1) 
private String employeeId; 
@DataField(pos = 2, pattern = "dd/MM/yyyy") 
private Date startDate; 
@DataField(pos = 3, pattern = "dd/MM/yyyy") 
private Date endDate; 
@DataField(pos = 4) 
private Character code; 

// Getters and Setters 

}

contenu CSV: "aC1aoC3" § "04/12/2017" § "04/12/2017" § "A" "aC1aoC3" § "13/04/2017 "§" 13/04/2017 "§" A " " aC1aoC3 "§" 14/04/2017 "§" 14/04/2017 "§" A " " aC1aoC3 "§" 15/04/2017 "§ "15/04/2017" § "A" 0C1AO3 "§" 16/04/2017 "§" U " " aC1aoC3 "§" 17/04/2017 "§" 17/04/2017 "§" U " " aC1aoC3 "§" 18/04/2017 "§" 18/04/2017 "§" U "

Un grand merci pour votre aide

Gilles

+0

Pourriez-vous s'il vous plaît inclure un échantillon csv (qui ne peut être analysé par bindy) dans votre question? – mgyongyosi

+0

Je l'ai ajouté à la description du problème. Merci – Gilles

Répondre

1

pouvez-vous essayer cas 3 et le cas 4 qui sont répertoriés dans Camel Bindy

http://camel.apache.org/bindy.html

different case's

+0

Merci. J'ai essayé ceci: @CsvRecord (separator = "\" ¤ \ "") et ceci @CsvRecord (separator = "\" \ u00a4 \ ""). Sans succès Bindy prend toute la ligne avec le premier champ – Gilles

+0

pouvez-vous poster l'enregistrement réel (du fichier) et la classe POJO? –

+0

Ajouté Merci pour votre aide – Gilles

0

Le section sign (§) est 167 en décimal non 164.

Modifier le séparateur en \u00A7 comme ceci:

@CsvRecord(separator = "\u00A7") 
public class Employee { ... } 
+0

Je pense que j'ai un problème d'encodage parce que dans la chaîne reçue de Bindy j'ai la séquence de remplacement 65533 au lieu du séparateur. – Gilles

0

Got it. C'était un problème d'encodage. Le caractère n'a pas pu être lu et a été remplacé par le caractère de remplacement 65533 (unicode). J'ai résolu le problème en réglant charset = ISO-8859-1 sur la connexion ftp en lisant le fichier csv.