J'ai une liste de valeurs entières (List) et je voudrais générer une chaîne de valeurs délimitées par des virgules. Ce sont tous les éléments de la liste qui sont sortis dans une seule liste délimitée par des virgules.
Mes pensées ... 1. transmettez la liste à une méthode. 2. Utilisez stringbuilder pour parcourir la liste et ajouter des virgules. 3. Testez le dernier caractère et s'il s'agit d'une virgule, supprimez-le.
Quelles sont vos pensées? Est-ce le meilleur moyen?
Comment mon code changerait-il si je voulais gérer non seulement des entiers (mon plan actuel), mais aussi des chaînes, des longs, des doubles, des booléens, etc. à l'avenir? Je suppose qu'il accepte une liste de n'importe quel type.
List<int>
n'a pas de méthodeSelect
dans le framework 3.5 sauf si je manque quelque chose.using
déclaration.System.Linq.Enumerable
(et bien sûr vous aurez besoin d'System.Core.dll
assemblage, mais vous l'avez probablement déjà). Vous voyez,List<int>
jamais aSelect
comme méthode. Au contraire,System.Linq.Enumerable
définitSelect
comme une méthode d'extension surIEnumerable<T>
, quiList<int>
est un exemple de. Ainsi, vous devezSystem.Linq.Enumerable
dans vos importations choisir cette méthode d'extension.x.ToString(CultureInfo.InvariantCulture)
. Cela utilisera le point comme séparateur décimal.en 3.5, j'étais toujours capable de le faire. C'est beaucoup plus simple et n'a pas besoin de lambda.
la source
ToArray()
La méthode deList<int>
ne peut pas être utilisée avec l'argument de type dans le framework 3.5 sauf si quelque chose me manque.Vous pouvez créer une méthode d'extension que vous pouvez appeler sur n'importe quel IEnumerable:
Ensuite, vous pouvez simplement appeler la méthode sur la liste d'origine:
la source
Vous pouvez utiliser
String.Join
.la source
ConvertAll
ici - les deuxint
etstring
seront déduits.Array.ConvertAll(...' you can just do
list.ConvertAll (e => e.ToString ()). ToArray) `, juste moins de saisie.Si un corps souhaite convertir une liste d' objets de classe personnalisés au lieu d'une liste de chaînes, remplacez la méthode ToString de votre classe par une représentation de ligne csv de votre classe.
Ensuite, le code suivant peut être utilisé pour convertir cette liste de classes en CSV avec la colonne d'en-tête
la source
Comme le code dans le lien donné par @Frank Créer un fichier CSV à partir d'une liste générique .NET, il y avait un petit problème de fin de chaque ligne par un
,
J'ai modifié le code pour s'en débarrasser. J'espère que cela aide quelqu'un.la source
dev
existe, mais pas le fichier ... ne suis-je pas en train de l'utiliser?sw.Write(string.Join(",", props.Select(d => d.Name).ToArray()) + newLine);
Non testé mais je ne sais pas ce que vous essayez d'accomplirJe l'explique en profondeur dans ce post . Je vais simplement coller le code ici avec de brèves descriptions.
Voici la méthode qui crée la ligne d'en-tête. Il utilise les noms de propriété comme noms de colonne.
Cette méthode crée toutes les lignes de valeur
Et voici la méthode qui les rassemble et crée le fichier réel.
la source
|
fichiers délimités en utilisant la version améliorée. Merci!Toute solution ne fonctionne que si List a list (of string)
Si vous avez une liste générique de vos propres objets comme list (of car) où car a n propriétés, vous devez boucler le PropertiesInfo de chaque objet car.
Regardez: http://www.csharptocsharp.com/generate-csv-from-generic-list
la source
J'aime une belle méthode d'extension simple
Ensuite, vous pouvez simplement appeler la méthode sur la liste d'origine:
Plus propre et plus facile à lire que certaines des autres suggestions.
la source
Le problème avec String.Join est que vous ne gérez pas la casse d'une virgule déjà existante dans la valeur. Lorsqu'une virgule existe, vous entourez la valeur des guillemets et remplacez tous les devis existants par des guillemets doubles.
Voir le module CSV
la source
La bibliothèque CsvHelper est très populaire dans le Nuget, ça vaut le coup, mec! https://github.com/JoshClose/CsvHelper/wiki/Basics
Utiliser CsvHelper est vraiment simple. Ses paramètres par défaut sont configurés pour les scénarios les plus courants.
Voici quelques données de configuration.
Actors.csv:
Actor.cs (objet de classe personnalisé qui représente un acteur):
Lecture du fichier CSV à l'aide de CsvReader:
var acteursList = csv.GetRecords ();
Écriture dans un fichier CSV.
la source
Pour une raison quelconque, @AliUmair a rétabli la modification de sa réponse qui corrige son code qui ne s'exécute pas tel quel, voici donc la version de travail qui n'a pas l'erreur d'accès au fichier et gère correctement les valeurs de propriété d'objet nulles:
la source
http://cc.davelozinski.com/c-sharp/the-fastest-way-to-read-and-process-text-files
Ce site Web a fait des tests approfondis sur la façon d'écrire dans un fichier en utilisant un écrivain en mémoire tampon, la lecture ligne par ligne semble être le meilleur moyen, l'utilisation du générateur de chaînes était l'une des plus lentes.
J'utilise beaucoup ses techniques pour écrire des trucs pour classer ça marche bien.
la source
Une méthode d'extension ToCsv () à usage général:
Exemples d'utilisation:
la mise en oeuvre
la source
Voici ma méthode d'extension, elle renvoie une chaîne pour plus de simplicité mais mon implémentation écrit le fichier dans un lac de données.
Il fournit n'importe quel délimiteur, ajoute des guillemets à la chaîne (au cas où ils contiennent le délimiteur) et traite des nuls et des blancs.
Usage:
la source