Za pomocą CsvHelper mogę przetłumaczyć białą przestrzeń na wartość dopuszczalną?

Mam naprawdę kiepskie pliki Csv, które muszę przeanalizować. Używam CsvHelper i działa on niesamowicie. Z wyjątkiem, że mam kilka linii, które mają białe znaki, gdzie normalnie mam podwójne.

Plik:

Tekst, SomeDouble, MoreText

„Dobry”, 1,23, „Dobry”

„Zły”, „Zły”

jeśli spróbuję to zmapować

public class Test
{
  [CsvField(Name = "Text")]
  public string Text { get; set; }

  [CsvField(Name = "SomeDouble")]
  public double? SomeDouble{ get; set; }

  [CsvField(Name = "MoreText")]
  public string MoreText{ get; set; }
}

wtedy pojawia się następujący błąd:

CsvHelper.CsvReaderException: Wystąpił błąd podczas próby odczytu rekordu typu

Wiersz: „2” (1-punktowy)

Indeks pola: „1” (w oparciu o 0)

Nazwa pola: „SomeDouble”

Wartość pola: ' '

System.Exception: nie jest poprawną wartością dla Double. ---> System.FormatException: ciąg wejściowy nie miał poprawnego formatu.
at System.Number.ParseDouble (wartość String, opcje NumberStyles, NumberFormatInfo numfmt) w System.ComponentModel.DoubleConverter.FromString (wartość String, NumberFormatInfo formatInfo) w System.ComponentModel.BaseNumberConverter.ConvertFrom (kontekst ITypeDescriptorContext, kultura CultureInfo, wartość Object) - - Koniec śledzenia wewnętrznego stosu wyjątków --- w System.ComponentModel.BaseNumberConverter.ConvertFrom (kontekst ITypeDescriptorContext, CultureInfo culture, wartość obiektu) w System.ComponentModel.NullableConverter.ConvertFrom (kontekst ITypeDescriptorContext, CultureInfo culture, wartość obiektu) w lambda_method ( Zamknięcie, ICsvReader) na CsvHelper.CsvReader.d__0`1.MoveNext ()

Widzę, że moje opcje to utworzenie niestandardowego analizatora składni lub odwzorowanie mojej wartości na właściwość ciągu i wykonanie tam analizy składniowej.

Czy są jakieś inne opcje?

Byłoby miło, gdybym mógł skonfigurować, że chcę traktować spację jako pustą.

Zgodnie z prośbą, oto przykładowy kod, który odtwarza problem

 static class Program
    {
        public class Test
        {
            [CsvField(Name = "Text")]
            public string Text { get; set; }

            [CsvField(Name = "SomeDouble")]
            public double? SomeDouble { get; set; }

            [CsvField(Name = "MoreText")]
            public string MoreText { get; set; }
        }

        static void Main(string[] args)
        {
            // create fake in memory file
            var memoryStream = new MemoryStream();
            var streamWriter = new StreamWriter(memoryStream);
            streamWriter.WriteLine("Text,SomeDouble,MoreText");
            streamWriter.WriteLine("Good, 1.23, Good");
            streamWriter.WriteLine("Bad, ,Bad");

            streamWriter.Flush();

            //reset the file to the begining
            memoryStream.Position = 0;

            using (
                var csv =
                    new CsvReader(
                        new StreamReader(memoryStream)))
            {
                // this call will blow up with the exception.
                var records = csv.GetRecords<Test>().ToList();

                //carry on and do stuff with 'records'...
            }
    }

Dzięki.

questionAnswers(2)

yourAnswerToTheQuestion