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

soupiste 79 Messages postés samedi 12 avril 2008Date d'inscription 22 juin 2011 Dernière intervention - 21 juin 2010 à 19:45 - Dernière réponse : krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
soupiste 79 Messages postés samedi 12 avril 2008Date d'inscription 22 juin 2011 Dernière intervention - 22 juin 2010 à 11:02
3
Merci
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();
}

Merci soupiste 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de soupiste
soupiste 79 Messages postés samedi 12 avril 2008Date d'inscription 22 juin 2011 Dernière intervention - 21 juin 2010 à 20:24
0
Merci
Je continue de chercher mais, toujours rien !

Une aide ....
Commenter la réponse de soupiste
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 22 juin 2010 à 09:57
0
Merci
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é. -
Commenter la réponse de krimog
soupiste 79 Messages postés samedi 12 avril 2008Date d'inscription 22 juin 2011 Dernière intervention - 22 juin 2010 à 11:04
0
Merci
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.
Commenter la réponse de soupiste
soupiste 79 Messages postés samedi 12 avril 2008Date d'inscription 22 juin 2011 Dernière intervention - 22 juin 2010 à 11:05
0
Merci
J'espère que ca pourra aider bien de personne sur le forum

Cordialement
Commenter la réponse de soupiste
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 22 juin 2010 à 12:01
0
Merci
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é. -
Commenter la réponse de krimog
soupiste 79 Messages postés samedi 12 avril 2008Date d'inscription 22 juin 2011 Dernière intervention - 22 juin 2010 à 17:35
0
Merci
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"
Commenter la réponse de soupiste
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 22 juin 2010 à 18:52
0
Merci
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é. -
Commenter la réponse de krimog

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.