


Eine .NET-Bibliothek für technische Lösungen für CSV-Dateien: CsvHelper chinesische Dokumentation
CsvHelper ist eine .NET-Bibliothek zum Lesen und Schreiben von CSV-Dateien. CsvHelper kann über den Paketmanager von Visual Studio heruntergeladen werden. Automatische Zuordnungsdefinition: Wenn keine Zuordnungsdatei bereitgestellt wird, ist die Standardeinstellung die automatische Zuordnung, und die automatische Zuordnung wird der Reihe nach den Attributen der Klasse zugeordnet.
GitHub-Adresse
Lesen
Alle Datensätze lesen
var csv = new CsvReader( textReader ); var records = csv.GetRecords<MyClass>(); // 把 CSV 记录映射到 MyClass,返回的 records 是个 IEnumerable<T> 对象
Wenn Sie die Zuordnungsbeziehung anpassen möchten, können Sie den Zuordnungsabschnitt unten sehen.
Da es sich bei „records“ um ein IEnumerable
var csv = new CsvReader( textReader ); var records = csv.GetRecords<MyClass>().ToList();
Datensätze manuell lesen
Sie können die Daten jeder Zeile in einer Zeilenschleife lesen
var csv = new CsvReader( textReader ); while( csv.Read() ) { var record = csv.GetRecord<MyClass>(); }
Einzeln lesen Wenn das Feld von
var csv = new CsvReader( textReader ); while( csv.Read() ) { var intField = csv.GetField<int>( 0 ); var stringField = csv.GetField<string>( 1 ); var boolField = csv.GetField<bool>( "HeaderName" ); }
vom erwarteten abweicht, können Sie TryGetField
var csv = new CsvReader( textReader ); while( csv.Read() ) { int intField; if( !csv.TryGetField( 0, out intField ) ) { // Do something when it can't convert. } }
verwenden, um
zu analysieren, wenn Sie möchten, dass jede Zeile als Zeichenfolge zurückgegeben wird. Sie können CsvParser verwenden.
var parser = new CsvParser( textReader ); while( true ) { var row = parser.Read(); // row 是个字符串 if( row == null ) { break; } }
Schreiben
Alle Datensätze schreiben
var csv = new CsvWriter( textWriter ); csv.WriteRecords( records );
var csv = new CsvWriter( textWriter ); foreach( var item in list ) { csv.WriteRecord( item ); }rreee
Zuordnen
Automatische Zuordnung
Wenn keine Zuordnungsdatei bereitgestellt wird, ist die Standardeinstellung „Automatisch“. Bei der Zuordnung wird die automatische Zuordnung den Attributen der Klasse der Reihe nach zugeordnet. Handelt es sich bei dem Attribut um eine benutzerdefinierte Klasse, wird es weiterhin entsprechend den Attributen dieser benutzerdefinierten Klasse ausgefüllt. Wenn ein Zirkelverweis auftritt, stoppt die automatische Zuordnung.
Manuelle Zuordnung
Wenn die CSV-Datei und die benutzerdefinierte Klasse nicht genau übereinstimmen, können Sie eine passende Klasse definieren, um damit umzugehen.
var csv = new CsvWriter( textWriter ); foreach( var item in list ) { csv.WriteField( "a" ); csv.WriteField( 2 ); csv.WriteField( true ); csv.NextRecord(); }
Dieser Artikel wurde von tangyikejun übersetzt
Referenzzuordnung
Wenn das Attribut eine benutzerdefinierte Klasse ist, die mehreren Spalten der CSV-Datei entspricht, können Sie die Referenzzuordnung verwenden.
public sealed class MyClassMap : CsvClassMap<MyClass> { public MyClassMap() { Map( m => m.Id ); Map( m = > m.Name ); } }
Indexspezifikation
Sie können die Zuordnung nach Spaltenindex angeben
public sealed class PersonMap : CsvClassMap<Person> { public PersonMap() { Map( m => m.Id ); Map( m => m.Name ); References<AddressMap>( m => m.Address ); } } public sealed class AddressMap : CsvClassMap<Address> { public AddressMap() { Map( m => m.Street ); Map( m => m.City ); Map( m => m.State ); Map( m => m.Zip ); } }
Spaltennamenspezifikation
Sie können die Zuordnung auch nach Spaltennamen angeben erfordert csv Die Datei verfügt über einen Header-Datensatz, das heißt, die erste Zeile zeichnet den Spaltennamen auf
public sealed class MyClassMap : CsvClassMap<MyClass> { public MyClassMap() { Map( m => m.Id ).Index( 0 ); Map( m => m.Name ).Index( 1 ); } }
Verarbeitung des gleichen Namens
public sealed class MyClassMap : CsvClassMap<MyClass> { public MyClassMap() { Map( m => m.Id ).Name( "The Id Column" ); Map( m => m.Name ).Name( "The Name Column" ); } }
Standardwert
public sealed class MyClassMap : CsvClassMap<MyClass> { public MyClassMap() { Map( m => m.FirstName ).Name( "Name" ).NameIndex( 0 ); Map( m => m.LastName ).Name( "Name" ).NameIndex( 1 ); } }
Typkonvertierung
public sealed class MyClassMap : CsvClassMap<MyClass> { public override void MyClassMap() { Map( m => m.Id ).Index( 0 ).Default( -1 ); Map( m => m.Name ).Index( 1 ).Default( "Unknown" ); } }
Kann optionale Typkonvertierung
Der Standardkonverter übernimmt den größten Teil der Typkonvertierung, aber manchmal müssen wir möglicherweise einige kleine Änderungen vornehmen. Zu diesem Zeitpunkt können wir versuchen, die optionale Typkonvertierung zu verwenden .
public sealed class MyClassMap : CsvClassMap<MyClass> { public MyClassMap() { Map( m => m.Id ).Index( 0 ).TypeConverter<MyIdConverter>(); } }
ConvertUsing
public sealed class MyClassMap : CsvClassMap<MyClass> { public MyClassMap() { Map( m => m.Description ).Index( 0 ).TypeConverterOption( CultureInfo.InvariantCulture ); // Map( m => m.TimeStamp ).Index( 1 ).TypeConverterOption( DateTimeStyles.AdjustToUniversal ); // 时间格式转换 Map( m => m.Cost ).Index( 2 ).TypeConverterOption( NumberStyles.Currency ); // 数值类型转换 Map( m => m.CurrencyFormat ).Index( 3 ).TypeConverterOption( "C" ); Map( m => m.BooleanValue ).Index( 4 ).TypeConverterOption( true, "sure" ).TypeConverterOption( false, "nope" ); // 内容转换 } }
Laufzeitzuordnung
Zuordnungen können zur Laufzeit erstellt werden.
public sealed class MyClassMap : CsvClassMap<MyClass> { public MyClassMap() { // 常数 Map( m => m.Constant ).ConvertUsing( row => 3 ); // 把两列聚合在一起 Map( m => m.Aggregate ).ConvertUsing( row => row.GetField<int>( 0 ) + row.GetField<int>( 1 ) ); // Collection with a single value. Map( m => m.Names ).ConvertUsing( row => new List<string>{ row.GetField<string>( "Name" ) } ); // Just about anything. Map( m => m.Anything ).ConvertUsing( row => { // You can do anything you want in a block. // Just make sure to return the same type as the property. } ); } }
Dieser Artikel wurde übersetzt von tangyikejun
Konfiguration
Anmerkungen zulassen
var customerMap = new DefaultCsvClassMap(); // mapping holds the Property - csv column mapping foreach( string key in mapping.Keys ) { var columnName = mapping[key].ToString(); if( !String.IsNullOrEmpty( columnName ) ) { var propertyInfo = typeof( Customer ).GetType().GetProperty( key ); var newMap = new CsvPropertyMap( propertyInfo ); newMap.Name( columnName ); customerMap.PropertyMaps.Add( newMap ); } } csv.Configuration.RegisterClassMap(CustomerMap);
Automatische Zuordnung
// Default value csv.Configuration.AllowComments = false;
Cache
TextReader Oder der Lese- und Schreibcache in TextWriter
var generatedMap = csv.Configuration.AutoMap<MyClass>();
Kommentar
Die auskommentierte Zeile wird nicht in
// Default value csv.Configuration.BufferSize = 2048;
Byteanzahl
Datensatz geladen Der aktuelle Lesevorgang. Wie viele Bytes wurden abgerufen? Configuration.Encoding muss so eingestellt werden, dass es mit der CSV-Datei übereinstimmt. Diese Einstellung wirkt sich auf die Geschwindigkeit des Parsens aus.
// Default value csv.Configuration.Comment = '#';
Kulturinformationen
// Default value csv.Configuration.CountBytes = false;
Trennzeichen
// Default value csv.Configuration.CultureInfo = CultureInfo.CurrentCulture;
Änderung der Spaltennummer
Wenn aktiviert, wird eine CsvBadDataException ausgelöst, wenn die Änderung der Spaltennummer gefunden wird
// Default value csv.Configuration.Delimiter = ",";
Kodierung
// Default value csv.Configuration.DetectColumnCountChanges = false;
Ob ein Header-Datensatz vorhanden ist
// Default value csv.Configuration.Encoding = Encoding.UTF8;
Leerzeichen in Spaltennamen ignorieren
Ob Leerzeichen in Spaltennamen ignoriert werden
// Default value csv.Configuration.HasHeaderRecord = true;
Privaten Zugriff ignorieren
Ob private Accessoren beim Lesen und Schreiben ignoriert werden sollen
// Default value csv.Configuration.IgnoreHeaderWhiteSpace = false;
Leseausnahmen ignorieren
Weiterlesen, nachdem beim Lesen eine Ausnahme auftritt
// Default value csv.Configuration.IgnorePrivateAccessor = false;
Anführungszeichen ignorieren
Verwenden Sie keine Anführungszeichen als Escape-Zeichen
// Default value csv.Configuration.IgnoreReadingExceptions = false;
Ob bei Spaltennamen die Groß-/Kleinschreibung beachtet wird
// Default value csv.Configuration.IgnoreQuotes = false;
Kartenzugriff
Sie können auf benutzerdefinierte Klassen zugreifen Zuordnungen
// Default value csv.Configuration.IsHeaderCaseSensitive = true;
Attributbindungs-Tag
Wird zum Suchen von Attributen benutzerdefinierter Klassen verwendet
var myMap = csv.Configuration.Maps[typeof( MyClass )];
Dieser Artikel wurde von tang yi ke jun übersetzt
Zitat
Definieren Sie das Escape-Zeichen, das verwendet wird, um Trennzeichen, Klammern oder Zeilenenden zu maskieren.
// Default value csv.Configuration.PropertyBindingFlags = BindingFlags.Public | BindingFlags.Instance;
Anführungszeichen für alle Felder
Gibt an, ob beim Schreiben in CSV alle Felder in Anführungszeichen gesetzt werden sollen. QuoteAllFields und QuoteNoFields können nicht gleichzeitig wahr sein.
// Default value csv.Configuration.Quote = '"';
Alle Felder ohne Anführungszeichen
QuoteAllFields und QuoteNoFields können nicht gleichzeitig wahr sein.
// Default value csv.Configuration.QuoteAllFields = false;
Ausnahmerückruf lesen
// Default value csv.Configuration.QuoteNoFields = false;
Klassenzuordnung registrieren
Wenn Klassenzuordnung verwendet wird, muss sie registriert werden, bevor sie tatsächlich verwendet wird.
csv.Configuration.ReadingExceptionCallback = ( ex, row ) => { // Log the exception and current row information. };
Leere Datensätze überspringen
Wenn alle Felder leer sind, werden sie als leere Felder betrachtet
csv.Configuration.RegisterClassMap<MyClassMap>(); csv.Configuration.RegisterClassMap<AnotherClassMap>();
Felder kürzen
Fügen Sie dem Feldinhalt Leerzeichen am Ende hinzu werden gelöscht.
// Default value csv.Configuration.SkipEmptyRecords = false;
Spaltennamen kürzen
// Default value csv.Configuration.TrimFields = false;
Klassenzuordnung aufheben
// Default value csv.Configuration.TrimHeaders = false;
Ob ein leeres Feld eine Ausnahme auslöst
// Unregister single map. csv.Configuration.UnregisterClassMap<MyClassMap>(); // Unregister all class maps. csv.Configuration.UnregisterClassMap();
Typkonvertierung
Typ Konvertierungen sind die Methode von CsvHelper zum Konvertieren von Zeichenfolgen in .NET-Typen (und umgekehrt).
Andere
Ausnahmeinformationen anzeigen
// Default value csv.Configuration.WillThrowOnMissingField = true;
DataReader und DataTable
DataReader-Objekt wird in CSV geschrieben
Exception.Data["CsvHelper"] // Row: '3' (1 based) // Type: 'CsvHelper.Tests.CsvReaderTests+TestBoolean' // Field Index: '0' (0 based) // Field Name: 'BoolColumn' // Field Value: 'two'
DataTable-Objekt wird geschrieben CSV
var hasHeaderBeenWritten = false; while( dataReader.Read() ) { if( !hasHeaderBeenWritten ) { for( var i = 0; i < dataReader.FieldCount; i++ ) { csv.WriteField( dataReader.GetName( i ) ); } csv.NextRecord(); hasHeaderBeenWritten = true; } for( var i = 0; i < dataReader.FieldCount; i++ ) { csv.WriteField( dataReader[i] ); } csv.NextRecord(); }
CSV zu DataTable
using( var dt = new DataTable() ) { dt.Load( dataReader ); foreach( DataColumn column in dt.Columns ) { csv.WriteField( column.ColumnName ); } csv.NextRecord(); foreach( DataRow row in dt.Rows ) { for( var i = 0; i < dt.Columns.Count; i++ ) { csv.WriteField( row[i] ); } csv.NextRecord(); } }
Verwandte Artikel:
jQuery EasyUI API Chinesische Dokumentation - Documentation Documentation_jquery
Ähnliche Videos:
Ruby Chinesische Dokumentation
Das obige ist der detaillierte Inhalt vonEine .NET-Bibliothek für technische Lösungen für CSV-Dateien: CsvHelper chinesische Dokumentation. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Wie erstelle ich Anwendungen mit .NET? Erstellen Anwendungen mit .NET können in den folgenden Schritten erreicht werden: 1) Verstehen Sie die Grundlagen von .NET, einschließlich C# Sprache und plattformübergreifender Entwicklungsunterstützung; 2) Kernkonzepte wie Komponenten und Arbeitsprinzipien des .NET -Ökosystems lernen; 3) Master Basic und Advanced Nutzung, von einfachen Konsolenanwendungen bis hin zu komplexen Webapis- und Datenbankvorgängen; 4) Mit gemeinsamen Fehlern und Debugging -Techniken wie Konfigurations- und Datenbankverbindungsproblemen vertraut sein; 5) Optimierung der Anwendungsleistung und Best Practices wie asynchrone Programmieren und Zwischenspeichern.

C# wird häufig in Anwendungen auf Unternehmensebene, Spieleentwicklung, mobilen Anwendungen und Webentwicklung verwendet. 1) In Anwendungen auf Unternehmensebene wird C# häufig für ASP.NetCore zur Entwicklung von WebAPI verwendet. 2) In der Spielentwicklung wird C# mit der Unity Engine kombiniert, um die Rollenkontrolle und andere Funktionen zu realisieren. 3) C# unterstützt Polymorphismus und asynchrone Programmierung, um die Code -Flexibilität und die Anwendungsleistung zu verbessern.

C# und .NET eignen sich für Web-, Desktop- und Mobile -Entwicklung. 1) In der Webentwicklung unterstützt ASP.NetCore die plattformübergreifende Entwicklung. 2) Die Desktop -Entwicklung verwendet WPF und Winforms, die für unterschiedliche Anforderungen geeignet sind. 3) Mobile Entwicklung realisiert plattformübergreifende Anwendungen über Xamarin.

Das C#.NET -Ökosystem bietet reichhaltige Frameworks und Bibliotheken, mit denen Entwickler Anwendungen effizient erstellen können. 1.asp.netcore wird verwendet, um Hochleistungs-Webanwendungen zu erstellen. Durch das Verständnis der Nutzung und Best Practices dieser Tools können Entwickler die Qualität und Leistung ihrer Anwendungen verbessern.

Wie bereitete ich eine C# .NET -App für Azure oder AWS bereit? Die Antwort ist, AzureAppservice und Awselasticbeanstalk zu verwenden. 1. Automatisieren Sie bei Azure die Bereitstellung mit AzureAppservice und AzurePipelines. 2. Verwenden Sie bei AWS Amazon ElasticbeanSpalk und AWSLambda, um Bereitstellungen und serverlosen Computer zu implementieren.

Die Kombination von C# und .NET bietet Entwicklern eine leistungsstarke Programmierumgebung. 1) C# unterstützt Polymorphismus und asynchrone Programmierung, 2) .NET bietet plattformübergreifende Funktionen und gleichzeitige Verarbeitungsmechanismen, wodurch sie in der Entwicklung von Desktop-, Web- und mobilen Anwendungen häufig verwendet werden.

.NetFramework ist ein Software -Framework, und C# ist eine Programmiersprache. 1..NetFramework bietet Bibliotheken und Dienste, die Desktop-, Web- und mobile Anwendungsentwicklung unterstützen. 2.C# ist für .Netframework entwickelt und unterstützt moderne Programmierfunktionen. 3..NETFRAMEWORK verwaltet die Codeausführung über CLR, und der C# Code wird in IL zusammengestellt und wird von CLR ausgeführt. V. 5. Zu den häufigen Fehlern zählen Typenkonvertierung und asynchrone Programmieradrocken. Visualstudio -Tools sind zum Debuggen erforderlich.

C# ist eine moderne, objektorientierte Programmiersprache, die von Microsoft entwickelt wurde, und .NET ist ein Entwicklungsrahmen von Microsoft. C# kombiniert die Leistung von C und die Einfachheit von Java und eignet sich zum Aufbau verschiedener Anwendungen. Das .NET -Framework unterstützt mehrere Sprachen, bietet Müllsammlungsmechanismen und vereinfacht die Speicherverwaltung.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

Dreamweaver CS6
Visuelle Webentwicklungstools

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

Dreamweaver Mac
Visuelle Webentwicklungstools

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!
