Czy istnieje domyślny / oficjalny / zalecany sposób analizowania plików CSV w języku C #? Nie chcę zrolować własnego parsera.
Widziałem również przypadki osób korzystających z ODBC / OLE DB do czytania CSV za pomocą sterownika Text i wiele osób zniechęca to ze względu na „wady”. Jakie są te wady?
Idealnie szukam sposobu, w jaki mogę odczytać CSV według nazwy kolumny, używając pierwszego rekordu jako nazwy nagłówka / pola. Niektóre z podanych odpowiedzi są poprawne, ale działają w zasadzie w celu deserializacji pliku na klasy.
Parser CSV jest teraz częścią .NET Framework.
Dodaj odwołanie do Microsoft.VisualBasic.dll (działa dobrze w C #, nieważne nazwy)
Dokumenty są tutaj - klasa TextFieldParser
PS Jeśli potrzebujesz eksportera CSV , wypróbuj CsvExport (ujawnij: jestem jednym z autorów)
źródło
TextFieldParser.ReadLine()
. Zobacz dokumentację TextFieldParserCsvHelper (biblioteka, którą prowadzę) wczyta plik CSV do niestandardowych obiektów.
Czasami nie jesteś właścicielem obiektów, na które próbujesz odczytać. W takim przypadku możesz użyć płynnego mapowania, ponieważ nie możesz przypisać atrybutów do klasy.
EDYTOWAĆ:
CsvReader wymaga teraz przekazania CultureInfo do konstruktora ( https://github.com/JoshClose/CsvHelper/issues/1441 ).
Przykład:
źródło
W aplikacji biznesowej korzystam z projektu Open Source na codeproject.com, CSVReader .
Działa dobrze i ma dobrą wydajność. Podany link zawiera pewne testy porównawcze.
Prosty przykład skopiowany ze strony projektu:
Jak widać, bardzo łatwo jest z nim pracować.
źródło
Wiem, że trochę późno, ale po prostu znaleźć bibliotekę
Microsoft.VisualBasic.FileIO
, która maTextFieldParser
klasę proces plików CSV.źródło
Jeśli potrzebujesz tylko czytać pliki csv, polecam tę bibliotekę: Szybki czytnik CSV
Jeśli potrzebujesz również wygenerować pliki csv, użyj tego: FileHelpers
Oba są bezpłatne i open source.
źródło
Oto klasa pomocnicza, której często używam, na wypadek, gdyby ktoś wrócił do tego wątku (chciałem się nim podzielić).
Używam tego dla uproszczenia przenoszenia go do projektów gotowych do użycia:
I używaj go w następujący sposób:
[Zaktualizowano pomocnika csv: naprawiono błąd, w którym ostatni znak nowej linii utworzył nową linię]
źródło
To rozwiązanie używa oficjalnego zestawu Microsoft.VisualBasic do analizowania CSV.
Zalety:
Kod:
źródło
Napisałem TinyCsvParser dla platformy .NET, który jest jednym z najszybszych parserów .NET i jest wysoce konfigurowalny do analizowania prawie dowolnego formatu CSV.
Jest wydany na licencji MIT:
Możesz użyć NuGet, aby go zainstalować. Uruchom następujące polecenie w konsoli Menedżera pakietów .
Stosowanie
Wyobraź sobie, że mamy listę Osób w pliku CSV
persons.csv
z ich imieniem, nazwiskiem i datą urodzenia.Odpowiedni model domeny w naszym systemie może wyglądać tak.
Podczas korzystania z TinyCsvParser musisz zdefiniować mapowanie między kolumnami w danych CSV a właściwością w twoim modelu domeny.
Następnie możemy użyć odwzorowania, aby przeanalizować dane CSV za pomocą
CsvParser
.Podręcznik użytkownika
Pełny Podręcznik użytkownika jest dostępny pod adresem:
źródło
Oto moja implementacja KISS ...
źródło
Jakiś czas temu napisałem prostą klasę do odczytu / zapisu CSV opartą na
Microsoft.VisualBasic
bibliotece. Korzystając z tej prostej klasy, będziesz mógł pracować z CSV jak z tablicą 2 wymiarów. Możesz znaleźć moją klasę, klikając następujący link: https://github.com/ukushu/DataExporterProsty przykład użycia:
Do odczytu nagłówka wystarczy odczyt
csv.Rows[0]
komórek :)źródło
Przydatne rozwiązanie z jednym plikiem źródłowym do prostych analiz. Zajmuje się wszystkimi nieprzyjemnymi przypadkami na krawędzi. Takie jak normalizacja nowej linii i obsługa nowych linii w cytowanych literałach łańcuchowych. Proszę bardzo!
Jeśli plik CSV ma nagłówek, po prostu odczytujesz nazwy kolumn (i obliczasz indeksy kolumn) z pierwszego wiersza. Proste.
Pamiętaj, że
Dump
jest to metoda LINQPad, możesz ją usunąć, jeśli nie używasz LINQPad.źródło
Kolejny na tej liście, Cinchoo ETL - biblioteka open source do odczytu i zapisu wielu formatów plików (CSV, płaski plik, Xml, JSON itp.)
Przykład poniżej pokazuje, jak szybko odczytać plik CSV (nie wymaga obiektu POCO)
Przykład poniżej pokazuje, jak odczytać plik CSV za pomocą obiektu POCO
Sprawdź artykuły w CodeProject, jak z niego korzystać.
źródło
Na podstawie postu unlimit dotyczącego prawidłowego podziału pliku CSV za pomocą funkcji C # split ()? :
UWAGA: nie obsługuje przecinków / zagnieżdżonych przecinków itp., Dlatego jest odpowiedni tylko dla niektórych prostych list CSV.
źródło
Ten kod czyta csv do DataTable:
źródło
Jeśli ktoś chce fragmentu kodu, może wejść do swojego kodu bez konieczności wiązania biblioteki lub pobierania pakietu. Oto wersja, którą napisałem:
źródło
Oto krótkie i proste rozwiązanie.
źródło