Heim > Backend-Entwicklung > C#.Net-Tutorial > Eine .NET-Bibliothek für technische Lösungen für CSV-Dateien: CsvHelper chinesische Dokumentation

Eine .NET-Bibliothek für technische Lösungen für CSV-Dateien: CsvHelper chinesische Dokumentation

php是最好的语言
Freigeben: 2018-07-27 11:32:27
Original
5741 Leute haben es durchsucht

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> 对象
Nach dem Login kopieren

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();
Nach dem Login kopieren

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>();
}
Nach dem Login kopieren

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" );
}
Nach dem Login kopieren

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.
    }
}
Nach dem Login kopieren

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;
    }
}
Nach dem Login kopieren

Schreiben

Alle Datensätze schreiben

var csv = new CsvWriter( textWriter );
csv.WriteRecords( records );
Nach dem Login kopieren
var csv = new CsvWriter( textWriter );
foreach( var item in list )
{
    csv.WriteRecord( item );
}
Nach dem Login kopieren
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();
}
Nach dem Login kopieren
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 );
    }
}
Nach dem Login kopieren

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 );
    }
}
Nach dem Login kopieren

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 );
    }
}
Nach dem Login kopieren

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" );
    }
}
Nach dem Login kopieren

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 );
    }
}
Nach dem Login kopieren

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" );
    }
}
Nach dem Login kopieren

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>();
    }
}
Nach dem Login kopieren

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" ); // 内容转换
    }
}
Nach dem Login kopieren

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.
        } );
    }
}
Nach dem Login kopieren
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);
Nach dem Login kopieren

Automatische Zuordnung

// Default value
csv.Configuration.AllowComments = false;
Nach dem Login kopieren

Cache

TextReader Oder der Lese- und Schreibcache in TextWriter

var generatedMap = csv.Configuration.AutoMap<MyClass>();
Nach dem Login kopieren

Kommentar

Die auskommentierte Zeile wird nicht in

// Default value
csv.Configuration.BufferSize = 2048;
Nach dem Login kopieren

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;;
Nach dem Login kopieren

Kulturinformationen

// Default value
csv.Configuration.CountBytes = false;
Nach dem Login kopieren

Trennzeichen

// Default value
csv.Configuration.CultureInfo = CultureInfo.CurrentCulture;
Nach dem Login kopieren

Änderung der Spaltennummer

Wenn aktiviert, wird eine CsvBadDataException ausgelöst, wenn die Änderung der Spaltennummer gefunden wird

// Default value
csv.Configuration.Delimiter = ",";
Nach dem Login kopieren

Kodierung

// Default value
csv.Configuration.DetectColumnCountChanges = false;
Nach dem Login kopieren

Ob ein Header-Datensatz vorhanden ist

// Default value
csv.Configuration.Encoding = Encoding.UTF8;
Nach dem Login kopieren

Leerzeichen in Spaltennamen ignorieren

Ob Leerzeichen in Spaltennamen ignoriert werden

// Default value
csv.Configuration.HasHeaderRecord = true;
Nach dem Login kopieren

Privaten Zugriff ignorieren

Ob private Accessoren beim Lesen und Schreiben ignoriert werden sollen

// Default value
csv.Configuration.IgnoreHeaderWhiteSpace = false;
Nach dem Login kopieren

Leseausnahmen ignorieren

Weiterlesen, nachdem beim Lesen eine Ausnahme auftritt

// Default value
csv.Configuration.IgnorePrivateAccessor = false;
Nach dem Login kopieren

Anführungszeichen ignorieren

Verwenden Sie keine Anführungszeichen als Escape-Zeichen

// Default value
csv.Configuration.IgnoreReadingExceptions = false;
Nach dem Login kopieren

Ob bei Spaltennamen die Groß-/Kleinschreibung beachtet wird

// Default value
csv.Configuration.IgnoreQuotes = false;
Nach dem Login kopieren

Kartenzugriff

Sie können auf benutzerdefinierte Klassen zugreifen Zuordnungen

// Default value
csv.Configuration.IsHeaderCaseSensitive = true;
Nach dem Login kopieren

Attributbindungs-Tag

Wird zum Suchen von Attributen benutzerdefinierter Klassen verwendet

var myMap = csv.Configuration.Maps[typeof( MyClass )];
Nach dem Login kopieren
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;
Nach dem Login kopieren

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;;
Nach dem Login kopieren

Alle Felder ohne Anführungszeichen

QuoteAllFields und QuoteNoFields können nicht gleichzeitig wahr sein.

// Default value
csv.Configuration.QuoteAllFields = false;
Nach dem Login kopieren

Ausnahmerückruf lesen

// Default value
csv.Configuration.QuoteNoFields = false;
Nach dem Login kopieren

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.
};
Nach dem Login kopieren

Leere Datensätze überspringen

Wenn alle Felder leer sind, werden sie als leere Felder betrachtet

csv.Configuration.RegisterClassMap<MyClassMap>();
csv.Configuration.RegisterClassMap<AnotherClassMap>();
Nach dem Login kopieren

Felder kürzen

Fügen Sie dem Feldinhalt Leerzeichen am Ende hinzu werden gelöscht.

// Default value
csv.Configuration.SkipEmptyRecords = false;
Nach dem Login kopieren

Spaltennamen kürzen

// Default value
csv.Configuration.TrimFields = false;
Nach dem Login kopieren

Klassenzuordnung aufheben

// Default value
csv.Configuration.TrimHeaders = false;
Nach dem Login kopieren

Ob ein leeres Feld eine Ausnahme auslöst

// Unregister single map.
csv.Configuration.UnregisterClassMap<MyClassMap>();
// Unregister all class maps.
csv.Configuration.UnregisterClassMap();
Nach dem Login kopieren

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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();
}
Nach dem Login kopieren

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();
    }
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage