Parser un fichier csv simple
|
using (var textReader = new StreamReader(csvFilePath))
{
string line = textReader.ReadLine();
while (line != null)
{
string[] columns = line.Split(';');
|
Forcer le séparateur
Bibliothèque .NET qui permet de lire et d'écrire des fichiers CSV, fixed length et delimited records.
Accessible dans NuGet. Licence MIT, GitHub
Stop Rolling Your Own CSV Parser!
Exemple: désérialisation d'un fichier CSV
|
var engine = new FileHelperAsyncEngine<DailyValue>();
engine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue;
engine.BeforeReadRecord += (eng, e) =>
{
if (e.LineNumber < 17)
{
e.SkipThisRecord = true;
}
else if (e.RecordLine.StartsWith("-"))
{
e.SkipThisRecord = true;
}
};
engine.AfterReadRecord += (eng, e) =>
{
if (e.Record.MyProperty == null)
{
e.SkipThisRecord = true;
}
};
var dailyValues = new List<DailyValue>();
using (engine.BeginReadFile("/path/to/file.csv"))
{
foreach (DailyValue dv in engine)
{
dailyValues.Add(dv);
}
}
if (engine.ErrorManager.HasErrors)
{
foreach (var err in engine.ErrorManager.Errors)
{
Console.WriteLine();
Console.WriteLine("Error on Line number: {0}", err.LineNumber);
Console.WriteLine("Record causing the problem: {0}", err.RecordString);
Console.WriteLine("Complete exception information: {0}", err.ExceptionInfo.ToString());
}
}
|
Classe de données
 |
La classe est le reflet exact des records, il faut un champs ou propriété par colonne.
Le mapping se fait dans l'ordre. |
|
[IgnoreFirst]
[DelimitedRecord(",")]
public class DailyValue
{
[FieldConverter(ConverterKind.DateMultiFormat, "MM/dd/yyyy", "dd/MM/yy")]
public DateTime Date;
[FieldConverter(ConverterKind.Date, "HH:mm")]
public DateTime Heure;
[FieldQuoted]
[FieldConverter(ConverterKind.Single, ",")]
public float Chiffre;
[FieldConverter(ConverterKind.Boolean, "Yes", "No")]
public bool Choix;
[FieldHidden]
public string Autre;
public MonEnum MonEnum;
}
public enum MonEnum
{
Elem1,
Elem2
}
|