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);
