CsvHelper解析未分隔表格中的文本

时间:2019-04-24 09:59:17

标签: c# csvhelper

这是我的数据集,该数据集来自我无法控制输出的命令:

BOOLEANCOLUMN   NAME             CLUSTER          AUTHINFO
                someName         someCluster      SomeMoreData   
*               name2            Data2            Data2

我希望能够将其转换为可处理数据的类,我尝试使用CSVHelper,但是它们的标头没有定界,它们之间的间距使数据格式易于阅读。 我目前有一个映射类:

public ContextMap()
        {
            Map(m => m.Name).Name("NAME");
            Map(m => m.AuthInfo).Name("AUTHINFO");
            Map(m => m.Cluster).Name("CLUSTER");
            Map(m => m.BooleanColumn).Name("BOOLEANCOLUMN");

        }

但我遇到了异常:

CsvHelper.MissingFieldException:'名称为'NAME'的字段不存在。您可以通过将MissingFieldFound设置为null来忽略缺少的字段。

问题:如何将这些数据解析为一个类?

1 个答案:

答案 0 :(得分:0)

我看了看文档,似乎开发人员已经计划实现固定宽度的解析器,但是还没有实现。

要解决此问题,我创建了以下方法,将数据转换为用代码分隔的数据:

public static string ConvertFixedWidthToCsv(string data)
    {
        var rows = data.Split(
            new[] { "\r\n", "\r", "\n" },
            StringSplitOptions.None
        );

        var returnRows = new List<string>();

        foreach (var row in rows)
        {

            if (string.IsNullOrWhiteSpace(row))
            {
                continue;
            }
            var parsed = Regex.Replace(row, @"\s+", ",");

            returnRows.Add(parsed);
        }

        return String.Join("\r\n", returnRows);
    }