je me suis retrouvé avec un mauvais délimiteur lors d'une tentative d'import d'écriture.
En lisant le code, je me suis aperçu que le test ne porte que sur ',' et ';', alors que mon fichier à importer (provenant d'un cabinet comptable) utilisait la tabulation comme séparateur.
je propose donc ce patch pour palier à ce problème, en rajoutant beaucoup plus de contrôle dans le choix automatique du délimiteur
dans la fonction createModelFromCSV
Code : Tout sélectionner
char separator = ',';
int cCount = 0;
int scCount = 0;
int tabCount = 0;
int cCountCpt = 0;
int scCountCpt = 0;
int tabCountCpt = 0;
boolean separatorColon = false;
boolean separatorSemiColon = false;
boolean separatorTab = false;
for (int i = 0; i < l.length(); i++) {
int tempCCount = StringUtils.countMatches(l, ",");
int tempScCount = StringUtils.countMatches(l, ";");
int tempTabCount = StringUtils.countMatches(l, "\t");
System.out.println("TVS : recherche délimiteur : , :"+tempCCount+" / ; : "+tempScCount+" / tab : "+tempTabCount);
// test virgule
if (cCount == 0 && tempCCount> 0){
cCount = tempCCount;
separatorColon = true;
cCountCpt++;
}else if (separatorColon) {
if (cCount != tempCCount){
separatorColon = false;
}
cCountCpt++;
}
// test point virgule
if (scCount == 0 && tempScCount> 0){
scCount = tempScCount;
separatorSemiColon = true;
scCountCpt++;
}else if (separatorSemiColon) {
if (scCount != tempScCount){
separatorSemiColon = false;
}
scCountCpt++ ;
}
// test tabulation
if (tabCount == 0 && tempTabCount> 0){
tabCount = tempTabCount;
separatorTab = true;
tabCountCpt++;
}else if (separatorTab) {
if (tabCount != tempTabCount){
separatorTab = false;
}
tabCountCpt++;
}
}
r.close();
System.out.println("TVS : recherche délimiteur condition : , :"+separatorColon+" / ; : "+separatorSemiColon+" / tab : "+separatorTab+" / compteur : "+tabCountCpt+" / l : "+l.length());
// 1 seul doit être = true
boolean unique = false;
if (separatorColon){
if (!unique){
if (cCountCpt == l.length()){
separator = ',';
}
}
}
if (separatorSemiColon){
if (!unique){
if (scCountCpt == l.length()){
separator = ';';
unique = true;
}
} else {
JOptionPane.showMessageDialog(new JFrame(), "Erreur plusieurs possibilité de délimiteur");
}
}
if (separatorTab){
if (!unique){
if (tabCountCpt == l.length()){
separator = '\t';
unique = true;
}
} else {
JOptionPane.showMessageDialog(new JFrame(), "Erreur plusieurs possibilité de délimiteur");
}
}
System.out.println("TVS : délimiteur possibilité de délimiteur : "+separator);