CsvHelper 解析 table 中未定界的文本
CsvHelper parse text in a table which is not delimited
这是我的数据集,它来自我无法控制输出的命令:
BOOLEANCOLUMN NAME CLUSTER AUTHINFO
someName someCluster SomeMoreData
* name2 Data2 Data2
我希望能够将其转换为 class 以处理数据,我正在尝试使用 CSVHelper 但是它们 headers 没有分隔,它们被隔开以格式化数据是人类可读的。
我目前有一个映射 class 是这样的:
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 来忽略缺失的字段。'
问题:如何将此数据解析为 class?
我查看了文档,开发人员似乎已计划实施固定宽度的解析器,但尚未实现。
为了解决这个问题,我创建了以下方法来将数据转换为代码中的分隔数据:
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);
}
这是我的数据集,它来自我无法控制输出的命令:
BOOLEANCOLUMN NAME CLUSTER AUTHINFO
someName someCluster SomeMoreData
* name2 Data2 Data2
我希望能够将其转换为 class 以处理数据,我正在尝试使用 CSVHelper 但是它们 headers 没有分隔,它们被隔开以格式化数据是人类可读的。 我目前有一个映射 class 是这样的:
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 来忽略缺失的字段。'
问题:如何将此数据解析为 class?
我查看了文档,开发人员似乎已计划实施固定宽度的解析器,但尚未实现。
为了解决这个问题,我创建了以下方法来将数据转换为代码中的分隔数据:
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);
}