10

我正在尝试使用 FileHelpers 解析这种类型的 CSV 文件:

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 或其他一些库)来做到这一点。有任何想法吗?

4

2 回答 2

13

您可以使用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

检查工件部分

于 2010-03-01T16:07:24.607 回答
1

您可以创建一个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
于 2010-03-01T14:30:31.457 回答