FileHelpers и CSV: что делать, когда запись может расширяться неограниченно, горизонтально

Я пытаюсь разобрать этот файл CSV с помощью FileHelpers:

Tom,1,2,3,4,5,6,7,8,9,10
Steve,1,2,3
Bob,1,2,3,4,5,6
Cthulhu,1,2,3,4,5
Greg,1,2,3,4,5,6,7,8,9,10,11,12,13,14

Я не могу понять, как разобрать это с помощью FileHelpers. Я бы предположил, что я мог бы сделать что-то вроде этого:

[DelimitedRecord(",")]
public class MyRecord
{
    public string Name;

    public List<int> Values;
}

Но это не представляется возможным с FileHelpers. Самое лучшее, что я могу сделать, это следующее:

[DelimitedRecord(",")]
public class MyRecord
{
    public string Name;

    public string Values;

    public string[] ActualValuesInNiceArray
    {
        get { return Values.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries); }
    }
}

Затем мне нужно разделить Values на запятые, чтобы получить набор значений для каждой записи. Похоже, что не слишком много смысла использовать FileHelpers, если мне нужно вручную разобрать часть каждой записи.

Я что-то упустил? Я просмотрел документы/примеры, но не могу найти решение для моего формата. Excel не имеет проблем с моим форматом, поэтому я бы предположил, что есть способ сделать это с существующей бесплатной библиотекой (FileHelpers или другой библиотекой). Любые идеи?

Ответ 1

Вы можете использовать Array Field, и библиотека выполнит работу:

[DelimitedRecord(",")]
public class MyRecord
{
    public string Name;

    public int[] Values;
}

Вы даже можете использовать [FieldArrayLength (2, 8)]

[DelimitedRecord(",")]
public class MyRecord
{
    public string Name;

    [FieldArrayLength(2, 8)]
    public int[] Values;
}

Установите минимальное/максимальное количество значений

Я настоятельно рекомендую загрузить последнюю версию библиотеки здесь:

http://teamcity.codebetter.com/viewType.html?buildTypeId=bt65&tab=buildTypeStatusDiv

Проверьте раздел артефактов

Ответ 2

Вы можете создать класс MyRecord, который содержит все потенциальные значения, например.

[DelimitedRecord(",")]
public class MyRecord
{
    public string Name;
    public int Value1;
    .....
    [FieldOptional]
    public int Value5;
    ......
    [FieldOptional]
    [FieldNullValue(typeof(int), "-1" )]
    public int Value14;
}

и сделайте большинство этих полей необязательными (№ 5 - 14 в моем примере) и объедините их, например. a FieldNullValue для обработки этих несуществующих полей (или сделать эти необязательные поля обнуляемыми int:

 public int? Value5