Erreur 3441 avec separateur virgule de fichier csv

Résolu
soupiste Messages postés 79 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 22 juin 2011 - 21 juin 2010 à 19:45
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 22 juin 2010 à 18:52
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

soupiste Messages postés 79 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 22 juin 2011
22 juin 2010 à 11:02
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();
}
3
soupiste Messages postés 79 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 22 juin 2011
21 juin 2010 à 20:24
Je continue de chercher mais, toujours rien !

Une aide ....
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
22 juin 2010 à 09:57
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é. -
0
soupiste Messages postés 79 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 22 juin 2011
22 juin 2010 à 11:04
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
soupiste Messages postés 79 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 22 juin 2011
22 juin 2010 à 11:05
J'espère que ca pourra aider bien de personne sur le forum

Cordialement
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
22 juin 2010 à 12:01
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é. -
0
soupiste Messages postés 79 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 22 juin 2011
22 juin 2010 à 17:35
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"
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
22 juin 2010 à 18:52
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é. -
0
Rejoignez-nous