1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| public static String getCSVSepChar(File fichierCSV, String[] separateurs) throws Exception {
String reponse = null;
BufferedReader lecteur = new BufferedReader(new FileReader(fichierCSV));
String ligne;
if (separateurs != null) {
// Le fichier CSV n'encadre pas le texte des colonnes du caractère double-quote.
// separateurs contient alors la liste des séparateurs supportés, et le code ne détectera correctement le caractère de séparation que s'il n'est pas utilisé dans le texte des colonnes.
int[] comptage1 = null;
int[] comptage2 = null;
if (lecteur.ready()) {
comptage1 = new int[separateurs.length];
ligne = lecteur.readLine();
for (int i = 0 ; i < separateurs.length ; i++) comptage1[i] = ligne.split(separateurs[i]).length-1;
}
if (lecteur.ready()) {
comptage2 = new int[separateurs.length];
ligne = lecteur.readLine();
for (int i = 0 ; i < separateurs.length ; i++) comptage2[i] = ligne.split(separateurs[i]).length-1;
}
if (comptage1 != null & comptage2 != null) {
for (int i = 0 ; i < separateurs.length ; i++) {
if ((comptage1[i] == comptage2[i]) && (comptage1[i] > 0)) {
reponse = separateurs[i];
break;
}
}
}
}
else {
// Ici, separateurs est null, cela signifie que le texte des colonnes est encadré du caractère double-quote.
// Nous n'avons plus besoin d'une liste de séparateurs supportés.
// Et nous n'avons besoin que de lire la premières ligne, qu'elle représente les intitulés de colonnes ou pas n'a aucune importance.
ligne = lecteur.readLine();
String[] parser = ligne.split("[\\\".*\\\"]");
if (parser.length > 2) reponse = parser[2];
if (" ".equals(reponse)) reponse = "espace"; //Optionnel
}
if (lecteur.ready()) lecteur.close();
return reponse;
} |
Partager