Próbuję odczytać *.csv
plik.
*.csv
-File składa się z dwóch kolumn oddzielone średnikiem ( „ ”).
Jestem w stanie odczytać *.csv
plik za pomocą StreamReadera i mogę oddzielić każdą linię za pomocą Split()
funkcji. Chcę zapisać każdą kolumnę w osobnej tablicy, a następnie wyświetlić ją.
czy jest to możliwe do zrobienia?
";"
jako separatora ... dzięki temu CSV jest niestandardowym imo :(Odpowiedzi:
Możesz to zrobić w następujący sposób:
źródło
using
klauzuli tutaj, albo przynajmniej ręcznie jak to jest zasobem.Close()
reader
IDisposible
column1;"Special ; char in string";column3
- tools.ietf.org/html/rfc4180Mój ulubiony parser CSV to wbudowany w bibliotekę .NET. To ukryty skarb w przestrzeni nazw Microsoft.VisualBasic. Poniżej znajduje się przykładowy kod:
Pamiętaj, aby dodać odniesienie do
Microsoft.VisualBasic
Więcej szczegółów na temat parsera znajduje się tutaj: http://codeskaters.blogspot.ae/2015/11/c-easiest-csv-parser-built-in-net.html
źródło
Microsoft.VisualBasic
zestawu frameworka, ponieważ zwykle nie jest to odniesienie domyślnie.Sposób LINQ:
^^ Wrong - Edytuj przez Nick
Wygląda na to, że oryginalny program odpowiadający próbował zapełnić
csv
tablicę dwuwymiarową - tablicę zawierającą tablice. Każdy element w pierwszej tablicy zawiera tablicę reprezentującą ten numer wiersza, a każdy element w zagnieżdżonej tablicy zawiera dane dla tej konkretnej kolumny.źródło
Nie możesz natychmiast utworzyć tablicy, ponieważ musisz znać liczbę wierszy od samego początku (a to wymagałoby dwukrotnego odczytania pliku csv)
Możesz przechowywać wartości na dwie części,
List<T>
a następnie użyć ich lub przekonwertować na tablicę za pomocąList<T>.ToArray()
Bardzo prosty przykład:
NB
Pamiętaj, że to tylko bardzo prosty przykład . Użycie
string.Split
nie uwzględnia przypadków, w których niektóre rekordy zawierają w sobie separator;
.Aby uzyskać bezpieczniejsze podejście, rozważ użycie bibliotek specyficznych dla csv, takich jak CsvHelper na nugecie.
źródło
;
Przykład nie uwzględnia faktu, że jest częścią wartości"value with ; inside it"
. Wartości surround CSV zawierające znaki specjalne z podwójnymi cudzysłowami, które oznaczają, że jest to dosłowny ciąg.Właśnie trafiłem na tę bibliotekę: https://github.com/JoshClose/CsvHelper
Bardzo intuicyjny i łatwy w użyciu. Ma również pakiet nuget, który szybko można zaimplementować: http://nuget.org/packages/CsvHelper/1.17.0 . Wydaje się również być aktywnie utrzymywany, co lubię.
Skonfigurowanie go do używania średnika jest łatwe: https://github.com/JoshClose/CsvHelper/wiki/Custom-Configurations
źródło
Microsoft.VisualBasic.FileIO.TextFieldParser
(por. Odpowiedź Habeeba)?Zwykle używam tego parsera z projektu kodu , ponieważ jest kilka ucieczek postaci i podobnych, które obsługuje dla mnie.
źródło
Oto moja odmiana najczęściej głosowanej odpowiedzi:
csv
Zmienne mogą być stosowane tak jak w poniższym przykładzie:źródło
Jeśli musisz pominąć (nagłówkowe) linie i / lub kolumny, możesz użyć tego do utworzenia dwuwymiarowej tablicy:
Jest to bardzo przydatne, jeśli musisz ukształtować dane przed ich dalszym przetwarzaniem (zakładając, że pierwsze 2 linie składają się z nagłówka, a pierwsza kolumna to tytuł wiersza - którego nie musisz mieć w tablicy, ponieważ po prostu chcesz uwzględnić dane).
Uwaga: Możesz łatwo uzyskać nagłówki i pierwszą kolumnę, używając następującego kodu:
W tym przykładzie kodu przyjęto następującą strukturę
*.csv
pliku:Uwaga: jeśli musisz pominąć puste wiersze - co może czasem być przydatne, możesz to zrobić, wstawiając
między instrukcją
from
aselect
w przykładach kodu LINQ powyżej.źródło
Możesz użyć dll Microsoft.VisualBasic.FileIO.TextFieldParser w C # dla lepszej wydajności
pobierz poniższy kod z powyższego artykułu
źródło
Cześć wszystkim, stworzyłem klasę statyczną do tego celu. + sprawdzenie kolumny + usunięcie znaku przydziału
źródło
źródło
Oto szczególny przypadek, w którym jedno z pól danych ma średnik („;”) jako część danych, w takim przypadku większość powyższych odpowiedzi nie powiedzie się.
Rozwiązaniem będzie ta sprawa
źródło
Biblioteka Angara.Table o otwartym kodzie źródłowym pozwala ładować CSV do typowanych kolumn, dzięki czemu można uzyskać tablice z kolumn. Każda kolumna może być indeksowana zarówno według nazwy, jak i indeksu. Zobacz http://predictionmachines.github.io/Angara.Table/saveload.html .
Biblioteka jest zgodna z RFC4180 dla CSV; umożliwia wnioskowanie typu i ciągi wielowierszowe.
Przykład:
Możesz zobaczyć typ kolumny, używając typu Kolumna, np
Ponieważ biblioteka koncentruje się na F #, może być konieczne dodanie odwołania do zestawu FSharp.Core 4.4; kliknij „Dodaj odniesienie” w projekcie i wybierz FSharp.Core 4.4 w „Asemblies” -> „Extensions”.
źródło
Spędziłem kilka godzin szukając odpowiedniej biblioteki, ale w końcu napisałem własny kod :) Możesz odczytać plik (lub bazę danych) dowolnymi narzędziami, a następnie zastosować następującą procedurę do każdej linii:
źródło
Używam csvreader.com (płatny komponent) od lat i nigdy nie miałem problemu. Jest solidny, mały i szybki, ale trzeba za to zapłacić. Możesz ustawić ogranicznik na cokolwiek chcesz.
źródło
Jestem tylko studentem pracującym nad pracą magisterską, ale w ten sposób ją rozwiązałem i działała dobrze dla mnie. Najpierw wybierz plik z katalogu (tylko w formacie csv), a następnie umieść dane na listach.
źródło
Wciąż źle. Musisz zrekompensować „” w cudzysłowie. Oto moje rozwiązanie csv w stylu Microsoft.
źródło
Mam bibliotekę, która robi dokładnie to, czego potrzebujesz.
Jakiś czas temu napisałem prostą i wystarczająco szybką bibliotekę do pracy z plikami CSV. Można go znaleźć pod następującym linkiem: https://github.com/ukushu/DataExporter
Działa z CSV jak z tablicą 2 wymiarów. Dokładnie tak, jak potrzebujesz.
Na przykład, jeśli potrzebujesz wszystkich wartości trzeciego rzędu, wystarczy napisać:
lub przeczytać drugą komórkę
źródło
Spójrz na to
using CsvFramework;
using System.Collections.Generic;
przestrzeń nazw CvsParser {
}
źródło