Table des matières
Lire
Lire tous les enregistrements
Lire manuellement les enregistrements
Lire les champs individuels
pour analyser
Écrire
Écrire tous les enregistrements
Carte
Carte automatique
Mappage manuel
Mappage de référence
Spécification de l'indice
Spécification du nom de colonne
Traitement du même nom
Valeur par défaut
Conversion de type
Conversion de type facultative
ConvertUsing
Mappage d'exécution
Configuration
Autoriser les commentaires
Cartographie automatique
Cache
Commentaires
Byte Count
Informations sur la culture
Séparateur
Changement de numéro de colonne
Encoding
S'il y a un enregistrement d'en-tête
Ignorer les espaces dans les noms de colonnes
Ignorer l'accès privé
Ignorer les exceptions de lecture
Ignorez les guillemets
Que ce soit le nom de la colonne est sensible à la casse
Accès à la carte
Balise de liaison d'attribut
Citation
Guillemets pour tous les champs
Tous les champs sans guillemets
Lire le rappel d'exception
Enregistrer le mappage de classe
Ignorer les enregistrements vides
Couper les champs
Découper le nom de la colonne
Dissocier le mappage de classes
Si un champ vide génère une exception
Type Conversions
Autres
Afficher les informations sur les exceptions
DataReader et DataTable
Maison développement back-end Tutoriel C#.Net Une bibliothèque .NET pour les solutions techniques aux fichiers CSV : documentation chinoise CsvHelper

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

Jul 27, 2018 am 11:32 AM
c# csv

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Active Directory avec C# Active Directory avec C# Sep 03, 2024 pm 03:33 PM

Guide d'Active Directory avec C#. Nous discutons ici de l'introduction et du fonctionnement d'Active Directory en C# ainsi que de la syntaxe et de l'exemple.

Sérialisation C# Sérialisation C# Sep 03, 2024 pm 03:30 PM

Guide de sérialisation C#. Nous discutons ici de l'introduction, des étapes de l'objet de sérialisation C#, du fonctionnement et de l'exemple respectivement.

Générateur de nombres aléatoires en C# Générateur de nombres aléatoires en C# Sep 03, 2024 pm 03:34 PM

Guide du générateur de nombres aléatoires en C#. Nous discutons ici du fonctionnement du générateur de nombres aléatoires, du concept de nombres pseudo-aléatoires et sécurisés.

Vue Grille de données C# Vue Grille de données C# Sep 03, 2024 pm 03:32 PM

Guide de la vue Grille de données C#. Nous discutons ici des exemples de la façon dont une vue de grille de données peut être chargée et exportée à partir de la base de données SQL ou d'un fichier Excel.

Modèles en C# Modèles en C# Sep 03, 2024 pm 03:33 PM

Guide des modèles en C#. Nous discutons ici de l'introduction et des 3 principaux types de modèles en C# ainsi que de ses exemples et de l'implémentation du code.

Nombres premiers en C# Nombres premiers en C# Sep 03, 2024 pm 03:35 PM

Guide des nombres premiers en C#. Nous discutons ici de l'introduction et des exemples de nombres premiers en c# ainsi que de l'implémentation du code.

Factorielle en C# Factorielle en C# Sep 03, 2024 pm 03:34 PM

Guide de Factorial en C#. Nous discutons ici de l'introduction de factorial en c# ainsi que de différents exemples et de l'implémentation du code.

La différence entre le multithreading et le C # asynchrone La différence entre le multithreading et le C # asynchrone Apr 03, 2025 pm 02:57 PM

La différence entre le multithreading et l'asynchrone est que le multithreading exécute plusieurs threads en même temps, tandis que les opérations effectuent de manière asynchrone sans bloquer le thread actuel. Le multithreading est utilisé pour les tâches à forte intensité de calcul, tandis que de manière asynchrone est utilisée pour l'interaction utilisateur. L'avantage du multi-threading est d'améliorer les performances informatiques, tandis que l'avantage des asynchrones est de ne pas bloquer les threads d'interface utilisateur. Le choix du multithreading ou asynchrone dépend de la nature de la tâche: les tâches à forte intensité de calcul utilisent le multithreading, les tâches qui interagissent avec les ressources externes et doivent maintenir la réactivité de l'interface utilisateur à utiliser asynchrone.

See all articles