suchen
HeimBackend-EntwicklungC#.Net-TutorialEine .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-Objekt handelt, wird ein Datensatz nur zurückgegeben, wenn darauf zugegriffen wird, und ein Datensatz wird zurückgegeben, sobald darauf zugegriffen wird. Wenn Sie wie eine Liste darauf zugreifen möchten, können Sie Folgendes tun:

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&#39;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 = &#39;#&#39;;

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 = &#39;"&#39;;

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: &#39;3&#39; (1 based)
// Type: &#39;CsvHelper.Tests.CsvReaderTests+TestBoolean&#39;
// Field Index: &#39;0&#39; (0 based)
// Field Name: &#39;BoolColumn&#39;
// Field Value: &#39;two&#39;

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:

.net CsvHelper 2.0

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!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
C# .NET: Erstellen von Anwendungen mit dem .NET -ÖkosystemC# .NET: Erstellen von Anwendungen mit dem .NET -ÖkosystemApr 27, 2025 am 12:12 AM

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# als vielseitige .NET -Sprache: Anwendungen und BeispieleC# als vielseitige .NET -Sprache: Anwendungen und BeispieleApr 26, 2025 am 12:26 AM

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# .NET für Web-, Desktop- und Mobile -EntwicklungC# .NET für Web-, Desktop- und Mobile -EntwicklungApr 25, 2025 am 12:01 AM

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.

C# .NET -Ökosystem: Frameworks, Bibliotheken und ToolsC# .NET -Ökosystem: Frameworks, Bibliotheken und ToolsApr 24, 2025 am 12:02 AM

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.

Bereitstellen von C# .NET-Anwendungen in Azure/AWS: Eine Schritt-für-Schritt-AnleitungBereitstellen von C# .NET-Anwendungen in Azure/AWS: Eine Schritt-für-Schritt-AnleitungApr 23, 2025 am 12:06 AM

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.

C# .NET: Eine Einführung in die leistungsstarke ProgrammierspracheC# .NET: Eine Einführung in die leistungsstarke ProgrammierspracheApr 22, 2025 am 12:04 AM

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.

.NET Framework vs. C#: Dekodierung der Terminologie.NET Framework vs. C#: Dekodierung der TerminologieApr 21, 2025 am 12:05 AM

.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.

Demystifizierung C# .NET: Ein Überblick für AnfängerDemystifizierung C# .NET: Ein Überblick für AnfängerApr 20, 2025 am 12:11 AM

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.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools

SublimeText3 Englische Version

SublimeText3 Englische Version

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