JoshClose / CsvHelper

Library to help reading and writing CSV files
http://joshclose.github.io/CsvHelper/
Other
4.74k stars 1.06k forks source link

Parsing of header fields doesn't trim leading and trailing spaces. #2185

Open noelgifford-home opened 1 year ago

noelgifford-home commented 1 year ago

Describe the bug When a CSV header is parsed the header fields aren't trimmed of leading and trailing spaces causing failure using the Name attribute.

To Reproduce My CSV header is as follows "DATE,TRANSACTION ID,DESCRIPTION,QUANTITY,SYMBOL,PRICE,COMMISSION,AMOUNT,REG FEE,SHORT-TERM RDM FEE,FUND REDEMPTION FEE, DEFERRED SALES CHARGE"

Note that the last header field has a leading space. This fails: [Name("DEFERRED SALES CHARGE")] This succeeds: [Name(" DEFERRED SALES CHARGE")]

Expected behavior I expected that the CSV header of "..., DEFERRED SALES CHARGE" would become "DEFERRED SALES CHARGE"

Rob-Hague commented 1 year ago

Use CsvConfiguration.TrimOptions e.g.

void Main()
{
    string csvString = """
    FUND REDEMPTION FEE, DEFERRED SALES CHARGE
    value1,value2
    """;

    CsvConfiguration config = new(CultureInfo.InvariantCulture)
    {
        TrimOptions = TrimOptions.Trim
    };

    using StringReader sr = new(csvString);
    using CsvReader csv = new(sr, config);
    csv.GetRecords<MyClass>().Dump();
}

class MyClass
{
    [Name("FUND REDEMPTION FEE")]
    public string FundRedemptionFee { get; set; }
    [Name("DEFERRED SALES CHARGE")]
    public string DeferredSalesCharge { get; set; }
}