首页 > 解决方案 > 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 来忽略缺失的字段。

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

标签: c#csvhelper

解决方案


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

为了解决这个问题,我创建了以下方法来将数据转换为代码中的分隔符:

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);
    }

推荐阅读