Une bibliothèque .NET pour les solutions techniques aux fichiers CSV : documentation chinoise CsvHelper

php是最好的语言
Libérer: 2018-07-27 11:32:27
original
5686 Les gens l'ont consulté

CsvHelper est une bibliothèque .NET permettant de lire et d'écrire des fichiers CSV. CsvHelper peut être téléchargé via le gestionnaire de packages de Visual Studio. Définition de mappage automatique : lorsqu'aucun fichier de mappage n'est fourni, la valeur par défaut est le mappage automatique et le mappage automatique sera mappé aux attributs de la classe dans l'ordre.

Adresse GitHub

Lire

Lire tous les enregistrements

var csv = new CsvReader( textReader );
var records = csv.GetRecords<MyClass>(); // 把 CSV 记录映射到 MyClass,返回的 records 是个 IEnumerable<T> 对象
Copier après la connexion

Si vous souhaitez personnaliser la relation de mappage, vous pouvez voir la section de mappage ci-dessous.
Étant donné que les enregistrements sont un objet IEnumerable, un enregistrement sera renvoyé uniquement lors d'un accès, et un enregistrement sera renvoyé une fois consulté. Si vous souhaitez y accéder comme une liste, vous pouvez procéder comme suit :

var csv = new CsvReader( textReader );
var records = csv.GetRecords<MyClass>().ToList();
Copier après la connexion

Lire manuellement les enregistrements

Vous pouvez lire les données de chaque ligne dans une boucle de ligne

var csv = new CsvReader( textReader );
while( csv.Read() )
{
    var record = csv.GetRecord<MyClass>();
}
Copier après la connexion

Lire les champs individuels

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" );
}
Copier après la connexion

Si le type de lecture peut être différent de celui attendu, vous pouvez utiliser 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.
    }
}
Copier après la connexion

pour analyser

si vous voulez chaque Une ligne peut être renvoyée sous forme de chaîne à l'aide de CsvParser.

var parser = new CsvParser( textReader );
while( true )
{
    var row = parser.Read(); // row 是个字符串
    if( row == null )
    {
        break;
    }
}
Copier après la connexion

Écrire

Écrire tous les enregistrements

var csv = new CsvWriter( textWriter );
csv.WriteRecords( records );
Copier après la connexion
var csv = new CsvWriter( textWriter );
foreach( var item in list )
{
    csv.WriteRecord( item );
}
Copier après la connexion
var csv = new CsvWriter( textWriter );
foreach( var item in list )
{
    csv.WriteField( "a" );
    csv.WriteField( 2 );
    csv.WriteField( true );
    csv.NextRecord();
}
Copier après la connexion

Carte

Carte automatique

Lorsqu'aucun fichier de mappage n'est fourni, la valeur par défaut est le mappage automatique, qui sera mappé aux attributs de la classe dans l'ordre. Si l'attribut est une classe personnalisée, il continuera à être renseigné selon les attributs de cette classe personnalisée. Si une référence circulaire se produit, le mappage automatique s'arrête.

Mappage manuel

Si le fichier CSV et la classe personnalisée ne correspondent pas exactement, vous pouvez définir une classe correspondante pour le gérer.

public sealed class MyClassMap : CsvClassMap<MyClass>
{
    public MyClassMap()
    {
        Map( m => m.Id );
        Map( m = > m.Name );
    }
}
Copier après la connexion
Cet article a été traduit par tangyikejun

Mappage de référence

Si l'attribut est une classe personnalisée qui correspond à plusieurs colonnes du fichier CSV, vous pouvez utiliser la référence cartographie.

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 );
    }
}
Copier après la connexion

Spécification de l'indice

Vous pouvez spécifier le mappage par indice de colonne

public sealed class MyClassMap : CsvClassMap<MyClass>
{
    public MyClassMap()
    {
        Map( m => m.Id ).Index( 0 );
        Map( m => m.Name ).Index( 1 );
    }
}
Copier après la connexion

Spécification du nom de colonne

Vous pouvez également spécifier le mappage par nom de la colonne, cela nécessite que le fichier csv ait un enregistrement d'en-tête, c'est-à-dire que la première ligne enregistre le nom de la colonne

public sealed class MyClassMap : CsvClassMap<MyClass>
{
    public MyClassMap()
    {
        Map( m => m.Id ).Name( "The Id Column" );
        Map( m => m.Name ).Name( "The Name Column" );
    }
}
Copier après la connexion

Traitement du même nom

public sealed class MyClassMap : CsvClassMap<MyClass>
{
    public MyClassMap()
    {
        Map( m => m.FirstName ).Name( "Name" ).NameIndex( 0 );
        Map( m => m.LastName ).Name( "Name" ).NameIndex( 1 );
    }
}
Copier après la connexion

Valeur par défaut

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" );
    }
}
Copier après la connexion

Conversion de type

public sealed class MyClassMap : CsvClassMap<MyClass>
{
    public MyClassMap()
    {
        Map( m => m.Id ).Index( 0 ).TypeConverter<MyIdConverter>();
    }
}
Copier après la connexion

Conversion de type facultative

Le convertisseur par défaut gérera la plupart de la conversion de type, mais nous devrons parfois apporter quelques petites modifications. À ce stade, vous pouvez essayer d'utiliser la conversion de type facultative.

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" ); // 内容转换
    }
}
Copier après la connexion

ConvertUsing

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.
        } );
    }
}
Copier après la connexion

Mappage d'exécution

Des mappages peuvent être créés au moment de l'exécution.

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);
Copier après la connexion
Cet article a été traduit par tangyikejun

Configuration

Autoriser les commentaires

// Default value
csv.Configuration.AllowComments = false;
Copier après la connexion

Cartographie automatique

var generatedMap = csv.Configuration.AutoMap<MyClass>();
Copier après la connexion

Cache

Cache pour lire et écrire dans TextReader ou TextWriter

// Default value
csv.Configuration.BufferSize = 2048;
Copier après la connexion

Commentaires

La ligne commentée ne sera pas chargée dans

// Default value
csv.Configuration.Comment = &#39;#&#39;;
Copier après la connexion

Byte Count

enregistre le nombre d'octets actuellement lus. Configuration.Encoding doit être défini pour être cohérent avec le fichier CSV. Ce paramètre affectera la vitesse d’analyse.

// Default value
csv.Configuration.CountBytes = false;
Copier après la connexion

Informations sur la culture

// Default value
csv.Configuration.CultureInfo = CultureInfo.CurrentCulture;
Copier après la connexion

Séparateur

// Default value
csv.Configuration.Delimiter = ",";
Copier après la connexion

Changement de numéro de colonne

S'il est activé, il sera lancé si le numéro de colonne change. CsvBadDataException

// Default value
csv.Configuration.DetectColumnCountChanges = false;
Copier après la connexion

Encoding

// Default value
csv.Configuration.Encoding = Encoding.UTF8;
Copier après la connexion

S'il y a un enregistrement d'en-tête

// Default value
csv.Configuration.HasHeaderRecord = true;
Copier après la connexion

Ignorer les espaces dans les noms de colonnes

Si les espaces dans les noms de colonnes sont ignorés

// Default value
csv.Configuration.IgnoreHeaderWhiteSpace = false;
Copier après la connexion

Ignorer l'accès privé

S'il faut ignorer l'accès privé lors de la lecture et de l'écriture

// Default value
csv.Configuration.IgnorePrivateAccessor = false;
Copier après la connexion

Ignorer les exceptions de lecture

Une exception s'est produite lors de la lecture Continuez la lecture par la suite

// Default value
csv.Configuration.IgnoreReadingExceptions = false;
Copier après la connexion

Ignorez les guillemets

Ne pas utiliser de guillemets comme caractères d'échappement

// Default value
csv.Configuration.IgnoreQuotes = false;
Copier après la connexion

Que ce soit le nom de la colonne est sensible à la casse

// Default value
csv.Configuration.IsHeaderCaseSensitive = true;
Copier après la connexion

Accès à la carte

Peut accéder au mappage de classes personnalisé

var myMap = csv.Configuration.Maps[typeof( MyClass )];
Copier après la connexion

Balise de liaison d'attribut

Utilisée pour rechercher des attributs personnalisés classes

// Default value
csv.Configuration.PropertyBindingFlags = BindingFlags.Public | BindingFlags.Instance;
Copier après la connexion
Cet article a été traduit par tang yi ke jun

Citation

La définition est utilisée pour échapper aux caractères d'échappement contenant des délimiteurs, des crochets ou des fins de ligne

// Default value
csv.Configuration.Quote = &#39;"&#39;;
Copier après la connexion

Guillemets pour tous les champs

S'il faut ajouter des guillemets pour tous les champs lors de l'écriture au format CSV. QuoteAllFields et QuoteNoFields ne peuvent pas être vrais en même temps.

// Default value
csv.Configuration.QuoteAllFields = false;
Copier après la connexion

Tous les champs sans guillemets

QuoteAllFields et QuoteNoFields ne peuvent pas être vrais en même temps.

// Default value
csv.Configuration.QuoteNoFields = false;
Copier après la connexion

Lire le rappel d'exception

csv.Configuration.ReadingExceptionCallback = ( ex, row ) =>
{
    // Log the exception and current row information.
};
Copier après la connexion

Enregistrer le mappage de classe

Si le mappage de classe est utilisé, il doit être enregistré avant d'être réellement utilisé.

csv.Configuration.RegisterClassMap<MyClassMap>();
csv.Configuration.RegisterClassMap<AnotherClassMap>();
Copier après la connexion

Ignorer les enregistrements vides

Si tous les champs sont vides, ils seront considérés comme des champs vides

// Default value
csv.Configuration.SkipEmptyRecords = false;
Copier après la connexion

Couper les champs

Supprimer le vide caractères à la fin du contenu du champ.

// Default value
csv.Configuration.TrimFields = false;
Copier après la connexion

Découper le nom de la colonne

// Default value
csv.Configuration.TrimHeaders = false;
Copier après la connexion

Dissocier le mappage de classes

// Unregister single map.
csv.Configuration.UnregisterClassMap<MyClassMap>();
// Unregister all class maps.
csv.Configuration.UnregisterClassMap();
Copier après la connexion

Si un champ vide génère une exception

// Default value
csv.Configuration.WillThrowOnMissingField = true;
Copier après la connexion

Type Conversions

Les conversions de types sont le moyen utilisé par CsvHelper pour convertir des chaînes en types .NET (et vice versa).

Autres

Afficher les informations sur les exceptions

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;
Copier après la connexion

DataReader et DataTable

Les objets DataReader sont écrits au format 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();
}
Copier après la connexion

DataTable Objet écrit en CSV

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();
    }
}
Copier après la connexion

CSV vers DataTable

while( csv.Read() )
{
    var row = dt.NewRow();
    foreach( DataColumn column in dt.Columns )
    {
        row[column.ColumnName] = csv.GetField( column.DataType, column.ColumnName );
    }
    dt.Rows.Add( row );
}
Copier après la connexion

Articles associés :

.net CsvHelper 2.0

Documentation chinoise de l'API jQuery EasyUI - Documentation Documentation_jquery

Vidéos associées :

Documentation chinoise Ruby

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal