首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用FileHelpers分隔具有不同RowTypes的行?

如何使用FileHelpers分隔具有不同RowTypes的行?
EN

Stack Overflow用户
提问于 2018-08-03 06:56:06
回答 1查看 79关注 0票数 0

例如,我有两行的下一个文件test.txt:

Type00007P 008 PPL

Type00230J 190 1

代码中的下一个类使用Rhino-ETL Nuget在我的数据库中插入这些行:

代码语言:javascript
复制
public class Type00007P
{
    [FieldFixedLength(10)]
    [FieldTrim(TrimMode.Both)]
    public string TypeControl;

    [FieldFixedLength(3)]
    [FieldTrim(TrimMode.Both)]
    public int Id;

    [FieldFixedLength(3)]
    [FieldTrim(TrimMode.Both)]
    public string Name;
}


public class Type00230J
{
    [FieldFixedLength(10)]
    [FieldTrim(TrimMode.Both)]
    public string TypeControl;

    [FieldFixedLength(3)]
    [FieldTrim(TrimMode.Both)]
    public int Id;

    [FieldFixedLength(1)]
    [FieldTrim(TrimMode.Both)]
    public bool Calculated;
}

如果我使用下面的代码提取行,我无法区分同一文件中的行Type00007P和行Type00230J:

代码语言:javascript
复制
public override IEnumerable<Row> Execute(IEnumerable<Row> rows)
{
    using (FileEngine file = FluentFile.For<Type00007P>().From(FilePath))
    {
        foreach (object obj in file)
        {
            yield return Row.FromObject(obj);
        }
    }
}

那么,如何读取第一个固定字段来获取RowType,然后用正确的类处理整行呢?

致以问候!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-17 00:46:51

您可以使用MultiRecordEngine。文档是here

代码语言:javascript
复制
var engine = new MultiRecordEngine(
    typeof(Type00007P),
    typeof(Type00230J));

engine.RecordSelector = new RecordTypeSelector(CustomSelector);

然后定义一个CustomSelector

代码语言:javascript
复制
private Type CustomSelector(MultiRecordEngine engine, string recordLine)
{
    if (recordLine.Length == 0)
        return null;

    if (recordLine.StartsWith("Type00007P")))
        return typeof(Type00007P);
    else
        return typeof(Type00230J);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51663193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档