我有一个文件,其中包含管道分隔格式的内容。这是在WinForm应用程序的C#中。
完美格式示例:
1000|2014|01|AP|1|00000001|00
收到的典型格式示例:
1000|2014|1|AP|1|1
请注意,典型格式不包含第7个值。在这些情况下,它应该默认为" 00"。其他字段也没有用前导零填充。这是我的方法。
//string buildcontentfromfile = the contents of each file that I receive and read
char[] delimiter = new char[] {'|'};
string[] contents = buildcontentfromfile.Split(delimiter);
if(contents[0].Length == 4)
{
if(contents[1].Length == 4)
{
if(contents[2].Length == 2)
{
if(contents[3].Length == 2)
{
if(contents[4].Length == 1)
{
if(contents[5].Length == 8)
{
if(contents[6].Length == 2)
{
}
}
}
}
}
}
}
这将照顾"完美格式"当然,我需要添加更多逻辑来解决"典型格式"如何接收它们,比如检查第7个值,并将前导0添加到需要它们的字段中,以及长度。但我是否正确地接近这个?有一个更简单的过程来做到这一点?谢谢!
答案 0 :(得分:2)
使用正则表达式:
var re = new Regex("\d{4}\|\d{4}\|\d\d\|\w\w\|\d\|\d{8}\|\d\d");
var valid = re.IsMatch(input);
答案 1 :(得分:2)
从我的头顶开始(我没有在实际的机器上试过这个)
var input = "1000|2014|01|AP|1|00000001|00";
var pattern = new int[] {4, 4, 2, 2, 1, 8, 2};
// Check each element length according to it's input position.
var matches = input
.Split('|')
// Get only those elements that satisfy the length condition.
.Where((x, index) => x.Count() == pattern(index))
.Count();
if (matches == pattern.Count())
// Input was as expected.