Ich habe eine Liste mit ganzzahligen Werten (Liste) und möchte eine Zeichenfolge mit durch Kommas getrennten Werten generieren. Das sind alle Elemente in der Liste, die in eine durch Kommas getrennte Liste ausgegeben werden.
Meine Gedanken ... 1. Übergeben Sie die Liste an eine Methode. 2. Verwenden Sie den Stringbuilder, um die Liste zu durchlaufen und Kommas anzuhängen. 3. Testen Sie das letzte Zeichen. Wenn es sich um ein Komma handelt, löschen Sie es.
Was sind deine Gedanken? Ist das der beste Weg?
Wie würde sich mein Code ändern, wenn ich in Zukunft nicht nur Ganzzahlen (meinen aktuellen Plan), sondern auch Zeichenfolgen, Longs, Doubles, Bools usw. usw. verarbeiten möchte? Ich denke, es wird eine Liste jeglicher Art akzeptieren.
List<int>
hat keine MethodeSelect
in Framework 3.5, es sei denn, ich vermisse etwas.using
Aussage.System.Linq.Enumerable
(und natürlich müssen Sie zusammenbauenSystem.Core.dll
, aber vermutlich haben Sie das bereits). Sie sehen,List<int>
nie hatSelect
als Methode. VielmehrSystem.Linq.Enumerable
definiertSelect
als eine Erweiterung Methode aufIEnumerable<T>
, von denenList<int>
ein Beispiel. Daher müssen SieSystem.Linq.Enumerable
bei Ihren Importen diese Erweiterungsmethode übernehmen.x.ToString(CultureInfo.InvariantCulture)
. Dies verwendet Punkt als Dezimaltrennzeichen.in 3.5 konnte ich das noch. Es ist viel einfacher und braucht kein Lambda.
quelle
ToArray()
Die Methode vonList<int>
kann nicht mit dem Typargument in Framework 3.5 verwendet werden, es sei denn, mir fehlt etwas.Sie können eine Erweiterungsmethode erstellen, die Sie für jede IEnumerable aufrufen können:
Dann können Sie einfach die Methode in der ursprünglichen Liste aufrufen:
quelle
Sie können verwenden
String.Join
.quelle
ConvertAll
werden - beidesint
undstring
wird abgeleitet.Array.ConvertAll(...' you can just do
list.ConvertAll (e => e.ToString ()). ToArray) `auszuführen, nur weniger tippen.Wenn ein Text die Liste der benutzerdefinierten Klassenobjekte anstelle der Liste der Zeichenfolgen konvertieren möchte, überschreiben Sie die ToString-Methode Ihrer Klasse mit der CSV-Zeilendarstellung Ihrer Klasse.
Anschließend kann der folgende Code verwendet werden, um diese Klassenliste in CSV mit Kopfzeile zu konvertieren
quelle
Da der Code in dem von @Frank angegebenen Link eine CSV-Datei aus einer generischen .NET-Liste erstellen, gab es ein kleines Problem beim Beenden jeder Zeile mit einem
,
Ich habe den Code geändert, um ihn zu entfernen. Hoffentlich hilft er jemandem.quelle
dev
existiert, aber nicht die Datei ... verwende ich das nicht richtig?sw.Write(string.Join(",", props.Select(d => d.Name).ToArray()) + newLine);
Nicht getestet, aber nicht wissen, was Sie erreichen wollenIch erkläre es ausführlich in diesem Beitrag . Ich füge hier nur den Code mit kurzen Beschreibungen ein.
Hier ist die Methode, mit der die Kopfzeile erstellt wird. Es verwendet die Eigenschaftsnamen als Spaltennamen.
Diese Methode erstellt alle Wertzeilen
Und hier ist die Methode, die sie zusammenbringt und die eigentliche Datei erstellt.
quelle
|
begrenzte Dateien mit der verbesserten Version. Vielen Dank!Jede Lösung funktioniert nur, wenn eine Liste (von Zeichenfolgen) aufgelistet wird.
Wenn Sie eine generische Liste Ihrer eigenen Objekte wie die Liste (des Autos) haben, in der das Auto n Eigenschaften hat, müssen Sie die PropertiesInfo jedes Autoobjekts schleifen.
Schauen Sie sich an: http://www.csharptocsharp.com/generate-csv-from-generic-list
quelle
Ich mag eine schöne einfache Erweiterungsmethode
Dann können Sie einfach die Methode in der ursprünglichen Liste aufrufen:
Sauberer und leichter zu lesen als einige der anderen Vorschläge.
quelle
Das Problem mit String.Join ist, dass Sie den Fall eines Kommas, das bereits im Wert vorhanden ist, nicht behandeln. Wenn ein Komma vorhanden ist, umgeben Sie den Wert in Anführungszeichen und ersetzen alle vorhandenen Anführungszeichen durch doppelte Anführungszeichen.
Siehe CSV-Modul
quelle
Die CsvHelper-Bibliothek ist im Nuget sehr beliebt. Sie sind es wert, Mann! https://github.com/JoshClose/CsvHelper/wiki/Basics
Die Verwendung von CsvHelper ist wirklich einfach. Die Standardeinstellungen sind für die gängigsten Szenarien eingerichtet.
Hier sind ein paar Setup-Daten.
Actors.csv:
Actor.cs (benutzerdefiniertes Klassenobjekt, das einen Akteur darstellt):
Lesen der CSV-Datei mit CsvReader:
var ActorsList = csv.GetRecords ();
Schreiben in eine CSV-Datei.
quelle
Aus irgendeinem Grund hat @AliUmair die Bearbeitung auf seine Antwort zurückgesetzt, mit der sein Code behoben wird, der nicht so ausgeführt wird, wie er ist. Hier ist also die Arbeitsversion, die keinen Dateizugriffsfehler aufweist und die Werte von Nullobjekteigenschaften ordnungsgemäß behandelt:
quelle
http://cc.davelozinski.com/c-sharp/the-fastest-way-to-read-and-process-text-files
Diese Website hat einige umfangreiche Tests durchgeführt, wie man mit einem gepufferten Writer in eine Datei schreibt. Das zeilenweise Lesen scheint der beste Weg zu sein. Der String Builder war einer der langsamsten.
Ich benutze seine Techniken sehr oft, um Sachen zu schreiben, damit sie gut funktionieren.
quelle
Eine allgemeine ToCsv () - Erweiterungsmethode:
Anwendungsbeispiele:
Implementierung
quelle
Hier ist meine Erweiterungsmethode, die der Einfachheit halber eine Zeichenfolge zurückgibt, aber meine Implementierung schreibt die Datei in einen Datensee.
Es sieht jedes Trennzeichen vor, fügt Anführungszeichen zur Zeichenfolge hinzu (falls sie das Trennzeichen enthalten) und behandelt Nullen und Leerzeichen.
Verwendung:
quelle