Votre programme ne semble pas avoir écrit les données dont vous avez besoin. Vous vous attendez probablement la sortie suivante
_Dum,_Vo,_Bi,_Da<NewLine>
<ValueOf_Dum>,<ValueOf_Vo>,<ValueOf_Bi>,<ValueOf_Da><NewLine>
Notez que j'ai ajouté spécifiquement <NewLine>
à la sortie. <NewLine>
représente le (s) caractère (s) de retour à la ligne qui, selon votre système d'exploitation, est "\n"
(sur les systèmes Unix) ou "\r\n"
(sur les systèmes Windows). Dans .NET, il y a également Environment.NewLine
, qui renvoie les caractères de nouvelle ligne spécifiques à la plate-forme. Notez qu'il n'y a pas de "standard" CSV, c'est donc votre choix avec les nouveaux caractères que vous voulez utiliser. Il semble que vous ne soyez pas clair à ce sujet, alors vous devez d'abord prendre cette décision. La prochaine chose que vous devez prendre en compte est la différence entre StringBuilder.Append
et StringBuilder.AppendLine
. Append
ajoute simplement le texte spécifié à la fin de la chaîne, tandis que AppendLine
ajoute le texte, suivi par les caractères retournés par Environment.NewLine
.
Dans votre code, vous utilisez uniformément AppendLine
qui ne peut pas être ce que vous voulez, puisque vous voulez évidemment construire des lignes et les ajouter dans leur ensemble. La façon dont vous le faites, vous ajoutez régulièrement de nouveaux caractères de ligne entre certaines de vos valeurs, ce qui en CSV signifie le début d'un nouvel enregistrement.
Vous ajoutez non seulement par inadvertance de nouveaux caractères de ligne à votre fichier, vous n'êtes également pas cohérent dans les caractères de nouvelle ligne que vous ajoutez manuellement. Dans la ligne de titre, vous utilisez "\r"
(ce qui n'est pas OK dans Unix et dans Windows). Plus tard vous utilisez "\r\n\n"
(même suivi par la nouvelle ligne ajoutée par AppendLine
), qui ne fonctionne pas bien dans Unix (à cause du "\r"
au début) ou dans Windows (à cause du "\n"
sans un précédent "\r"
à la fin).
Votre problème suivant est cette partie de votre code:
if (data._Stu == "B" || data._Stu == "E")
{
builder.AppendLine(data._Vo + "," + data._Bi + "," + data._Dau);
};
Vous ajoutez les valeurs _Vo
, _Bi
et _Dau
quand _Stu
est "B"
ou "E"
. Et que faites-vous quand _Stu
a une autre valeur? Rien! Cela signifie que vous générez un enregistrement incomplet, ce qui est la raison la plus probable du problème que vous décrivez. Vous devez décider ce qui doit se passer dans le cas contraire et l'intégrer dans votre programme.
En général, vous semblez ne pas être totalement clair sur le flux prévu de votre programme, le format CSV et ce que les instructions que vous utilisez font dans votre code. Pour résoudre votre problème, vous devez effectuer les étapes suivantes:
- Obtenez une compréhension claire de la sortie désirée et de la manière dont un programme doit générer cette sortie.
- Comprendre le format CSV et l'importance d'un saut de ligne. Décidez du nouveau format de ligne que vous voulez utiliser (
"\r\n"
, "\n"
ou Environment.NewLine
) et utilisez-le de manière cohérente dans tout votre programme.
- Utilisez
Append
si vous souhaitez ajouter uniquement le texte et AppendLine
si vous souhaitez que le texte ajouté soit suivi de Environment.NewLine
.
- Désactivez ce qui doit se produire lorsque
Stu
n'est pas "B"
ou "E"
et ajoutez ce cas à votre programme.
- Parcourez votre programme dans un débogueur pour confirmer qu'il fait exactement ce que vous lui demandez.
Quelque chose semble très mauvais avec votre * retour chariot, approche de nouvelle ligne *. Pouvez-vous décrire pourquoi vous ajoutez le '' \ r \ '' '' '' '' '' '' '' '' '' '' '' 'AppendLine''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'que vous écrivez' AppendLine '? Si c'est juste une solution de contournement qui semble corrigeant quelque chose pour vous mais qui ne suit pas un problème documenté/une solution, alors nous finirions par nous raser si nous ne réparions pas cette chose en premier. – grek40
Pour étendre ce que dit @ grek40, si vous voulez écrire des caractères de nouvelle ligne vous-même, utilisez 'builder.Append()' au lieu de 'builder.AppendLine()'. –