l'enregistrement des données dans le fichier csv
J'ai un problème pour enregistrer des données dans un .fichier csv.
void WriteLog(DataRow rzad)
{
StreamWriter sw = new StreamWriter("log.csv", true);
int iColCount = 8;
for (int i = 0; i < iColCount; i++)
{
if (!Convert.IsDBNull(rzad[i]))
{
sw.Write(rzad[i].ToString());
sw.Write("\t");
}
}
sw.Write("\n");
sw.Flush();
sw.Close();
}
Le problème est de tak dans le fichier j'ai des données dans Une colonne. Je veux casser une ligne dans DataRow format de 8 pièces, qui sont mis en 8 colonnes différentes. Ma fonction de travail car il ne veut pas voir l'onglet ("\t").
Je ne peux pas poster des images j'ai donc essayer de décrire les résultats dans un fichier csv:
2011-03-17 14:34:11asdPrzekroczono krytyczną minimalną wymaganą wartość parametru5010050080550
C'est mon exemple de ligne et je veux smash à 8 colonnes:
2011-03-17 14:34:11 asd Przekroczono krytyczną minimalną wymaganą wartość parametru 50 100 500 80 550
"#\t#" n'aide pas. Le résultat est:
"2011-03-17 18:29:17# #asd# #Przekroczono krytyczną, maksymalną, wymaganą wartość parametru# #560# #100# #500# #80# #550# #"
Il ya un certain dépouillement, mais mon point est que fait pas de l'espace mais une transition vers la cellule suivante 🙁
"\u0008" aussi n'aide pas.
- Pouvez-vous nous montrer ce qu'est exactement la sortie, s'il vous plaît?
- Et un morceau de code exécutable. Depuis votre fonction semble correcte.
- Cela peut être un problème d'encodage. essayez de sw.Write("\u0008") et voir si cela fonctionne. Si pas, essayez de changer de sw.Write("\t") pour sw.Write("#\t#") et voir si il écrit la #s?
- Vous pouvez le vérifier sur ce gist.github.com/riyadparvez/4467668
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous dites que vous êtes l'écriture d'un fichier CSV (comma séparés valeurs) fichier.
Mais, vous êtes vraiment en écriture à un fichier délimité par des tabulations.
Et, vous avez besoin d'écrire /r/n entre les lignes:
Cela fonctionne:
Je suis enclin à accepter @Hossein. Je pense que c'est un problème de codage. J'ai couru votre code exactement comme il est sur ma machine, et cela a fonctionné parfaitement.
Juste au cas où vous n'avez pas encore trouvé une solution depuis que vous avez écrit à cette question, il y a un an:
Vous pouvez utiliser le KBCSV de la bibliothèque qui est très populaire et gère pratiquement tout ce dont vous avez besoin. Il utilise csv par défaut, mais peut être facilement modifié pour gérer tsv.
Pour une très simple et facilement cassable solution, vous pouvez essayer:
chaîne de caractères.Join("\t", rzad) + "\r\n"
Ce ne serait pas prendre en compte les champs qui contiennent des onglets. Si un champ contient un onglet, il fera de cette méthode inutile. Généralement champs qui contiennent le délimiteur sont entre guillemets doubles et les champs qui contiennent des guillemets serait double double cité.
Il n'est pas trop difficile à mettre en œuvre, mais il serait à réinventer la roue, comme il a Kent Boogart a déjà passé de nombreuses heures en tenant compte de quelques-uns des cas limites que je ne serais pas au courant.
La fonction suivante est utilisée pour écrire le fichier csv.
Puis appeler cette fonction par
Un autre exemple simple pour plusieurs lignes, chaque ligne est séparée par un caractère de nouvelle ligne '\n'.