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