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是最好的语言
php是最好的语言Original
2018-07-27 11:32:275799Durchsuche

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