FileHelpers和CSV:当记录可以水平扩展无限制时该怎么办

Rob*_*Rob 9 .net csv filehelpers

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何使用FileHelpers解析它.我想我应该可以这样做:

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

    public List<int> Values;
}
Run Code Online (Sandbox Code Playgroud)

但FileHelpers似乎无法做到这一点.我能做的最好的就是:

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

    public string Values;

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

然后我需要Values在逗号上拆分以获取每条记录的值集.如果我必须手动解析每个记录的一部分,那么使用FileHelpers似乎没什么意义.

我错过了什么吗?我已经浏览了文档/示例,但似乎无法找到我的格式的解决方案.Excel对我的格式没有任何问题,所以我想有一种方法可以使用现有的免费库(FileHelpers或其他一些库)来实现.有任何想法吗?

Mar*_*eli 12

您可以使用数组字段,库将完成工作:

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

    public int[] Values;
}
Run Code Online (Sandbox Code Playgroud)

你甚至可以使用[FieldArrayLength(2,8)]

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

    [FieldArrayLength(2, 8)]
    public int[] Values;
}
Run Code Online (Sandbox Code Playgroud)

设置最小/最大值数

我强烈建议从这里下载最新版本的库:

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

检查工件部分

  • 这是一个鲜为人知的功能,你是对的,我们需要将它们添加到文档和示例中,欢迎任何有关此功能的建议,最诚挚的问候 (2认同)
  • 非常干净的解决方案Marcos!我想知道它是否可以扩展到处理分隔记录中的Name-Value对?我已经看过像'DATE,TYPE,NAME,VALUE,NAME,VALUE,NAME,VALUE'这样的例子,其中对需要以数组结尾.不可否认,更简洁的方法是MasterDetail方式,但仅限于我们控制架构的地方. (2认同)