C# 如何解析具有多个分隔符的文本文件
我正试图解析一个文本文件。数据是单个字符串,使用四种类型的除沫器。文件末尾还有一个与我可以忽略的数据无关的记录计数 除沫器: 数据的开头:~C# 如何解析具有多个分隔符的文本文件,c#,parsing,delimiter,C#,Parsing,Delimiter,我正试图解析一个文本文件。数据是单个字符串,使用四种类型的除沫器。文件末尾还有一个与我可以忽略的数据无关的记录计数 除沫器: 数据的开头:~ 字段分隔符:| 记录结束:# 数据结束:^ 示例文本文件: ~001|John|Smith|300#002|Abby|Williams|250#003|Tom|Jones|400#004|Claire|Benton|300^ Count:4 解析后的数据应存储在对象“Account”的列表或集合中 我还是编程新手,所以请教我解析和存储这些数据的最佳方法是
字段分隔符:|
记录结束:#
数据结束:^ 示例文本文件:
~001|John|Smith|300#002|Abby|Williams|250#003|Tom|Jones|400#004|Claire|Benton|300^
Count:4
解析后的数据应存储在对象“Account”的列表或集合中
我还是编程新手,所以请教我解析和存储这些数据的最佳方法是什么?
提前感谢。如果您知道所有分隔符,您可以使用以下内容:
var s = "~001|John|Smith|300#002|Abby|Williams|250#003|Tom|Jones|400#004|Claire|Benton|300^Count: 4";
// select a line between "~" and "^".
var data = new string(s.SkipWhile(c => c == '~').TakeWhile(c => c != '^').ToArray());
var records = data.Split('#');
var accounts = records.Select(record => record.Split('|'))
.Select(items => new Account
{
IdNum = items[0],
FirstName = items[1],
LastName = items[2],
AmtDue = items[3]
})
.ToList();
foreach (var account in accounts)
{
Console.WriteLine(account.IdNum);
Console.WriteLine(account.FirstName);
Console.WriteLine(account.LastName);
Console.WriteLine(account.AmtDue);
Console.WriteLine();
}
首先按行分隔符拆分,然后按字段分隔符拆分
注意:不要忘记检查
null
上的变量或您需要的数组长度。他们应该将源数据放入xml并称之为良好。我知道这是一项学校作业,但我对现实生活中有多少种方式会失败感到畏缩。哈哈,我希望这是一项课堂作业。我理解你的意思,我完全同意你的看法。如果有选择的话,我会立即将格式更改为XML。不幸的是,这是一个旧设计的系统,被甩在我身上,我无法控制它会吐出什么。数据格式是我必须处理的一个限制。我只需要尽我所能,这是我第一次在滑雪和业余时间遇到。这是一个比我写的regex rube goldberg更简单、更好的解决方案。谢谢你的帮助!
var s = "~001|John|Smith|300#002|Abby|Williams|250#003|Tom|Jones|400#004|Claire|Benton|300^Count: 4";
// select a line between "~" and "^".
var data = new string(s.SkipWhile(c => c == '~').TakeWhile(c => c != '^').ToArray());
var records = data.Split('#');
var accounts = records.Select(record => record.Split('|'))
.Select(items => new Account
{
IdNum = items[0],
FirstName = items[1],
LastName = items[2],
AmtDue = items[3]
})
.ToList();
foreach (var account in accounts)
{
Console.WriteLine(account.IdNum);
Console.WriteLine(account.FirstName);
Console.WriteLine(account.LastName);
Console.WriteLine(account.AmtDue);
Console.WriteLine();
}