Ich versuche eine *.csv
Datei zu lesen .
Die *.csv
-Datei besteht aus zwei durch Semikolon (" ; ") getrennten Spalten .
Ich kann die *.csv
Datei mit StreamReader lesen und jede Zeile mithilfe der Split()
Funktion trennen . Ich möchte jede Spalte in einem separaten Array speichern und dann anzeigen.
Ist das möglich?
";"
als Trennzeichen verwendet ... dies hat CSV zu einem nicht standardmäßigen Imo gemacht :(Antworten:
Sie können es so machen:
quelle
using
hier eine Klausel verwenden, oder zumindest manuellClose()
die,reader
da es sich um eineIDisposible
Ressource handelt.column1;"Special ; char in string";column3
- tools.ietf.org/html/rfc4180Mein Lieblings-CSV-Parser ist ein in die .NET-Bibliothek integrierter. Dies ist ein versteckter Schatz im Microsoft.VisualBasic-Namespace. Unten finden Sie einen Beispielcode:
Denken Sie daran, einen Verweis auf hinzuzufügen
Microsoft.VisualBasic
Weitere Details zum Parser finden Sie hier: http://codeskaters.blogspot.ae/2015/11/c-easiest-csv-parser-built-in-net.html
quelle
Microsoft.VisualBasic
Framework-Assembly einfügen, da normalerweise nicht standardmäßig darauf verwiesen wird.LINQ Weg:
^^ Falsch - Bearbeiten von Nick
Es scheint, dass der ursprüngliche Antwortende versucht hat,
csv
mit einem zweidimensionalen Array zu füllen - einem Array, das Arrays enthält. Jedes Element im ersten Array enthält ein Array, das diese Zeilennummer darstellt, wobei jedes Element im verschachtelten Array die Daten für diese bestimmte Spalte enthält.quelle
Sie können ein Array nicht sofort erstellen, da Sie die Anzahl der Zeilen von Anfang an kennen müssen (und dies würde das zweimalige Lesen der CSV-Datei erfordern).
Sie können Werte in zwei speichern
List<T>
und dann verwenden oder mithilfe von in ein Array konvertierenList<T>.ToArray()
Sehr einfaches Beispiel:
NB
Bitte beachten Sie, dass dies nur ein sehr einfaches Beispiel ist . Die Verwendung
string.Split
berücksichtigt keine Fälle, in denen einige Datensätze das Trennzeichen enthalten;
.Für einen sichereren Ansatz sollten Sie einige CSV-spezifische Bibliotheken wie CsvHelper auf Nuget verwenden.
quelle
;
beispielsweise nicht, dass es Teil des Werts ist"value with ; inside it"
. CSV-Surround-Werte, die Sonderzeichen mit doppelten Anführungszeichen enthalten, um zu sagen, dass es sich um eine Literalzeichenfolge handelt.Ich bin gerade auf diese Bibliothek gestoßen : https://github.com/JoshClose/CsvHelper
Sehr intuitiv und einfach zu bedienen. Hat auch ein Nuget-Paket, das schnell implementiert werden kann: http://nuget.org/packages/CsvHelper/1.17.0 . Scheint auch aktiv gepflegt zu werden was mir gefällt.
Die Konfiguration für die Verwendung eines Semikolons ist einfach: https://github.com/JoshClose/CsvHelper/wiki/Custom-Configurations
quelle
Microsoft.VisualBasic.FileIO.TextFieldParser
(vgl. Antwort von @ Habeeb)?Normalerweise verwende ich diesen Parser aus Codeproject , da es eine Reihe von Zeichen- Escapezeichen und Ähnlichem gibt, die für mich behandelt werden.
quelle
Hier ist meine Variation der am besten bewerteten Antwort:
Die
csv
Variable kann dann wie im folgenden Beispiel verwendet werden:quelle
Wenn Sie (Kopf-) Zeilen und / oder Spalten überspringen müssen, können Sie damit ein zweidimensionales Array erstellen:
Dies ist sehr nützlich, wenn Sie die Daten formen müssen, bevor Sie sie weiterverarbeiten (vorausgesetzt, die ersten beiden Zeilen bestehen aus der Überschrift, und die erste Spalte ist ein Zeilentitel - den Sie nicht im Array haben müssen, weil Sie nur die Daten betrachten wollen).
Hinweis : Mit dem folgenden Code können Sie die Überschriften und die erste Spalte leicht abrufen:
Dieses Codebeispiel nimmt die folgende Struktur Ihrer
*.csv
Datei an:Hinweis: Wenn Sie leere Zeilen überspringen müssen - was manchmal praktisch ist, können Sie dies durch Einfügen tun
zwischen der
from
und derselect
Anweisung in den obigen LINQ- Codebeispielen.quelle
Sie können die DLL Microsoft.VisualBasic.FileIO.TextFieldParser in C # verwenden, um eine bessere Leistung zu erzielen
Holen Sie sich das folgende Codebeispiel aus dem obigen Artikel
quelle
Hallo zusammen, ich habe dafür eine statische Klasse erstellt. + Spaltenprüfung + Entfernen von Kontingentzeichen
quelle
quelle
Hier ist ein Sonderfall, in dem eines der Datenfelder ein Semikolon (";") als Teil seiner Daten enthält. In diesem Fall schlagen die meisten der oben genannten Antworten fehl.
Lösung ist der Fall
quelle
Die Open-Source- Bibliothek Angara.Table ermöglicht das Laden von CSV in typisierte Spalten, sodass Sie die Arrays aus den Spalten abrufen können. Jede Spalte kann sowohl nach Namen als auch nach Index indiziert werden. Siehe http://predictionmachines.github.io/Angara.Table/saveload.html .
Die Bibliothek folgt RFC4180 für CSV; Es ermöglicht Typinferenz und mehrzeilige Zeichenfolgen.
Beispiel:
Sie können einen Spaltentyp mit dem Typ Spalte anzeigen, z
Da sich die Bibliothek auf F # konzentriert, müssen Sie möglicherweise einen Verweis auf die FSharp.Core 4.4-Assembly hinzufügen. Klicken Sie im Projekt auf "Referenz hinzufügen" und wählen Sie "FSharp.Core 4.4" unter "Baugruppen" -> "Erweiterungen".
quelle
Ich habe einige Stunden damit verbracht, nach einer richtigen Bibliothek zu suchen, aber schließlich habe ich meinen eigenen Code geschrieben :) Sie können Dateien (oder Datenbanken) mit beliebigen Tools lesen und dann die folgende Routine auf jede Zeile anwenden:
quelle
Ich benutze csvreader.com (kostenpflichtige Komponente) seit Jahren und hatte nie ein Problem. Es ist solide, klein und schnell, aber Sie müssen dafür bezahlen. Sie können das Trennzeichen auf einen beliebigen Wert einstellen.
quelle
Ich bin nur ein Student, der an meiner Masterarbeit arbeitet, aber so habe ich es gelöst und es hat gut für mich funktioniert. Zuerst wählen Sie Ihre Datei aus dem Verzeichnis aus (nur im CSV-Format) und fügen dann die Daten in die Listen ein.
quelle
Immer noch falsch. Sie müssen "" in Anführungszeichen kompensieren. Hier ist meine Lösung Microsoft Style CSV.
quelle
Ich habe eine Bibliothek, die genau das tut, was Sie brauchen.
Vor einiger Zeit hatte ich eine einfache und schnelle Bibliothek für die Arbeit mit CSV-Dateien geschrieben. Sie finden es unter folgendem Link: https://github.com/ukushu/DataExporter
Es funktioniert mit CSV wie mit einem 2-Dimensionen-Array. Genau so, wie Sie es brauchen.
Wenn Sie beispielsweise alle Werte der 3. Zeile benötigen, müssen Sie nur Folgendes schreiben:
oder 2. Zelle von zu lesen
quelle
Schau dir das an
Verwenden von CsvFramework;
using System.Collections.Generic;
Namespace CvsParser {
}}
quelle