Mam listę wartości całkowitych (Lista) i chciałbym wygenerować ciąg wartości rozdzielanych przecinkami. Oznacza to, że wszystkie pozycje z listy są wyświetlane na pojedynczej liście rozdzielanej przecinkami.
Moje myśli ... 1. Przekaż listę do metody. 2. Użyj narzędzia stringbuilder do iteracji listy i dołącz przecinki. 3. Przetestuj ostatni znak i jeśli jest to przecinek, usuń go.
Jakie są Twoje myśli? Czy to najlepszy sposób?
Jak zmieniłby się mój kod, gdybym chciał w przyszłości obsługiwać nie tylko liczby całkowite (mój obecny plan), ale także stringi, longs, double, bools itp.? Myślę, że zaakceptuje listę dowolnego typu.
List<int>
nie ma metodySelect
w frameworku 3.5, chyba że czegoś mi brakuje.using
stwierdzenia.System.Linq.Enumerable
(i oczywiście będziesz potrzebowaćSystem.Core.dll
montażu, ale prawdopodobnie już to masz). Widzisz,List<int>
nigdy nieSelect
było metody. RaczejSystem.Linq.Enumerable
definiujeSelect
jako metodę rozszerzającą onIEnumerable<T>
, którejList<int>
przykładem jest. W związku z tymSystem.Linq.Enumerable
w imporcie musisz wybrać tę metodę rozszerzenia.x.ToString(CultureInfo.InvariantCulture)
. Spowoduje to użycie kropki jako separatora dziesiętnego.w 3.5 nadal mogłem to zrobić. Jest znacznie prostszy i nie potrzebuje lambdy.
źródło
ToArray()
Metoda ofList<int>
nie może być używana z argumentem typu we frameworku 3.5, chyba że czegoś mi brakuje.Możesz utworzyć metodę rozszerzenia, którą możesz wywołać dla dowolnego IEnumerable:
Następnie możesz po prostu wywołać metodę z oryginalnej listy:
źródło
Możesz użyć
String.Join
.źródło
ConvertAll
tutaj - zarównoint
istring
zostaną wywnioskowane.Array.ConvertAll(...' you can just do
list.ConvertAll (e => e.ToString ()). ToArray) `, po prostu mniej wpisywania.Jeśli jakakolwiek treść chce przekonwertować listę niestandardowych obiektów klas zamiast listy ciągów, zastąp metodę ToString klasy za pomocą reprezentacji wiersza CSV swojej klasy.
Następnie można użyć poniższego kodu, aby przekonwertować tę listę klas na CSV z kolumną nagłówka
źródło
Jak w kodzie w linku podanym przez @Frank Create a CSV File from a .NET Generic List był mały problem z zakończeniem każdej linii
,
literą. Zmodyfikowałem kod, aby się go pozbyć. Mam nadzieję, że to komuś pomoże.źródło
dev
istnieje, ale nie plik ... czy nie używam tego, prawda?sw.Write(string.Join(",", props.Select(d => d.Name).ToArray()) + newLine);
Nie przetestowano, ale nie wiesz, co próbujesz osiągnąćSzczegółowo wyjaśniam to w tym poście . Po prostu wkleię tutaj kod z krótkimi opisami.
Oto metoda, która tworzy wiersz nagłówka. Używa nazw właściwości jako nazw kolumn.
Ta metoda tworzy wszystkie wiersze wartości
A oto metoda, która łączy je razem i tworzy rzeczywisty plik.
źródło
|
generuję pliki rozdzielane przy użyciu ulepszonej wersji. Dzięki!Dowolne rozwiązanie działa tylko wtedy, gdy wyświetla listę (ciąg)
Jeśli masz ogólną listę własnych obiektów, takich jak lista (of car), gdzie samochód ma n właściwości, musisz zapętlić PropertiesInfo każdego obiektu samochodu.
Spójrz na: http://www.csharptocsharp.com/generate-csv-from-generic-list
źródło
Podoba mi się ładna, prosta metoda rozszerzenia
Następnie możesz po prostu wywołać metodę z oryginalnej listy:
Czystsze i łatwiejsze do odczytania niż niektóre inne sugestie.
źródło
Problem z String.Join polega na tym, że nie zajmujesz się przypadkiem przecinka już istniejącego w wartości. Jeśli istnieje przecinek, należy otoczyć wartość w cudzysłowach i zastąpić wszystkie istniejące cudzysłowy podwójnymi cudzysłowami.
Zobacz moduł CSV
źródło
Biblioteka CsvHelper jest bardzo popularna w Nuget. Warto, stary! https://github.com/JoshClose/CsvHelper/wiki/Basics
Korzystanie z CsvHelper jest naprawdę łatwe. Jego ustawienia domyślne są skonfigurowane dla większości typowych scenariuszy.
Oto trochę danych konfiguracyjnych.
Actors.csv:
Actor.cs (obiekt klasy niestandardowej reprezentujący aktora):
Odczytywanie pliku CSV za pomocą CsvReader:
var actorsList = csv.GetRecords ();
Zapisywanie do pliku CSV.
źródło
Z jakiegoś powodu @AliUmair przywrócił edycję do swojej odpowiedzi, która naprawia jego kod, który nie działa tak, jak jest, więc oto działająca wersja, która nie ma błędu dostępu do pliku i poprawnie obsługuje wartości właściwości obiektu zerowego:
źródło
http://cc.davelozinski.com/c-sharp/the-fastest-way-to-read-and-process-text-files
Ta strona internetowa przeprowadziła obszerne testy dotyczące tego, jak pisać do pliku przy użyciu buforowanego programu zapisującego, czytanie wiersz po wierszu wydaje się być najlepszym sposobem, a użycie narzędzia do tworzenia ciągów było jednym z najwolniejszych.
Używam jego technik bardzo często do pisania rzeczy, aby złożyć to dobrze.
źródło
Metoda rozszerzenia ToCsv () ogólnego przeznaczenia:
Przykłady użycia:
Realizacja
źródło
Oto moja metoda rozszerzenia, zwraca ciąg dla uproszczenia, ale moja implementacja zapisuje plik do jeziora danych.
Zapewnia dowolny separator, dodaje cudzysłowy do łańcucha (w przypadku, gdy zawierają separator) i rozdaje wartości null i spacje.
Stosowanie:
źródło