我的文本格式需要在C#中解析。每个测试必须一次解析一个。文本文件格式如下:
$ bundle && rm -rf tmp/cache/assets
将是这样的数据类:
T1
{
data1=3.5
data2=58%
data3=FAIL
}
T2
{
data1=7.5
data2=78%
data3=PASS
}
解析文本文件后,例如,第一个T1将是measure = 3.5,百分比= 58%,testR =“FAIL”。我如何一次解析一个?
答案 0 :(得分:0)
您是如何尝试解决此问题的?你能发布你的代码吗?从本质上讲,这并不困难,但您需要跟踪输入文件中的位置,并且需要将问题分解为小块。一个好的开始是能够识别一个阅读的开始和结束。看起来{和}似乎可以达到这个目的。
答案 1 :(得分:0)
使用基于Regex的LALR解析器,您可以非常快速有效地完成这项工作:
string text = @" T1
{
data1=3.5
data2=58%
data3=FAIL
}
T2
{
data1=7.5
data2=78%
data3=PASS
}";
string regex = "[ \n\r\t]*([^ \n\r\t{]*)[ \n\r\t]*{[ \n\r\t]*data1=([^ \n\r\t]*)[ \n\r\t]*data2=([^ \n\r\t]*)[ \n\r\t]*data3=([^ \n\r\t]*)[ \n\r\t]*}";
while(System.Text.RegularExpressions.Regex.IsMatch(text, regex)) {
var match = System.Text.RegularExpressions.Regex.Match(text, regex);
Console.WriteLine($"Item name {match.Groups[1].Value}");
Console.WriteLine($"Data1= {match.Groups[2].Value}");
Console.WriteLine($"Data2= {match.Groups[3].Value}");
Console.WriteLine($"Data3= {match.Groups[4].Value}");
text = text.Substring(match.Groups[0].Value.Length);
}
您将获得以下输出:
Item name T1
Data1= 3.5
Data2= 58%
Data3= FAIL
Item name T2
Data1= 7.5
Data2= 78%
Data3= PASS
您可以在此处查看有关如何使用正则表达式的更多信息: https://regexone.com/references/csharp