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 или некоторая другая библиотека). Какие-либо идеи?

9
задан Rob 1 March 2010 в 14:31
поделиться

2 ответа

Вы можете использовать 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

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

12
ответ дан 4 December 2019 в 15:15
поделиться

Вы можете создать класс 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
1
ответ дан 4 December 2019 в 15:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: