Erreur 3441 avec separateur virgule de fichier csv [Résolu]

Signaler
Messages postés
79
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
22 juin 2011
-
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
-
J'ai un liste de fichiers csv dont je dois importer le contenu dans une table sql server. j'utilise OleDb connection.
Mes fiichiers possèdent la virgule "," comme delimiter.
Alors, juste apres mon OleDbdatAdapter.Fill(dataset, "TACCI");
j'ai l'erreur suivante:
e = {"Le séparateur du champ de spécification du fichier texte est identique au séparateur décimal ou au délimiteur de texte."}

comment le contourner s'il vous plait.

j'ai beau cherché, mais sans résultat.

8 réponses

Messages postés
79
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
22 juin 2011

Bonjour !

Merci pour ta reponse; effectivement j'ai du remplacer mes "," par des ";" dans des List<String> comme ceci.
Ca marche mais, je voudrais m'assurer que c'est la bonne methode:

Voici mon code:
private static void LireFichier(string fichier, List<String> lignes)
{
StreamReader streader;
string ligne;
streader = File.OpenText(fichier);
ligne = streader.ReadLine().Replace(",", ";");
while (ligne != null)
{
lignes.Add(ligne.Replace(",", ";"));
ligne = streader.ReadLine();
}
sReader.Close();
}
Messages postés
79
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
22 juin 2011

Je continue de chercher mais, toujours rien !

Une aide ....
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
44
Alors tout d'abord, tu as le droit de dire "Bonjour" et "S'il vous plaît/merci".

Bon, l'erreur est très claire : "," sert à la fois à séparer tes champs et à séparer la partie entière de la partie décimale.

2 solutions :
- soit tu changes les paramètres de langue à cet endroit (puisqu'un anglais, la partie entière et la partie décimale sont séparées par un point)
- soit tu remplaces tes virgules par un autre signe, comme par exemple ";", utilisé dans 95% des CSV.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Messages postés
79
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
22 juin 2011

En fait, pour m'expliquer:
Je concatene le contenu de tous mes fichiers .csv dans un List<Sting> pour en former qu'un seule fichier que je dois ensuite attaquer pour import dans un datatable, puis vers sql serevr.
Messages postés
79
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
22 juin 2011

J'espère que ca pourra aider bien de personne sur le forum

Cordialement
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
44
Il y a plus simple :
ligne = streader.ReadLine().Replace(",", ";");
while (ligne != null)
{
lignes.Add(ligne.Replace(",", ";"));
ligne = streader.ReadLine();
} 


Tu remplaces le tout par
while((ligne = streader.ReadLine()) != null)
{
    lignes.Add(ligne.Replace(",", ";"));
}


C'est plus simple, et en plus, ça ne plante pas si ton fichier est vide.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Messages postés
79
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
22 juin 2011

Salut,

J'ai un autre soucis.
je fais un foreach datarow sur un datatable, et on me ramène une erreur qui vraisemblablement m'empêche de passer au second datarow du foreach (Pas d'incrémentation, comme si le contenu du datatable avait été supprimé)

Exception: La collection a été modifiée ; l'opération d'énumération risque de ne pas s'exécuter.

if (DataTb != null && DataTb.Rows.Count > 0)
{
foreach (DataRow monfsb in
DataTb.Rows)
{
/// code qui s'execute
}

L'exception se produisant sur mon "in"
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
44
Tu ne dois modifier ni DataTb ni monfsb à l'intérieur de ton foreach. Si tu veux pouvoir faire des modifications, il faudra passer par un for (ou garder une liste des modifications que tu veux faire et faire la modification après ton foreach)

PS : inutile de mettre && DataTb.Rows.Count > 0 dans ta condition.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -