如何逐行从简单文本中获取数据



我正在尝试从文本中提取数据。它是较大的文本。为了更好地理解。我有一个简单的类Test,它有一个atribute结果,即enum。

class Test{
private Result result;

public Test(string text){
this.Result = FindProblem(text);
}
......
public enum Result
{
SUCCESS = 1,
FAIL = 2,
NONE = 3
}

}

然后我有文本:

今天01:05:(NAME(备份失败-操作遇到错误。(NAME(
备份时失败:找不到文件(名称(
DISK_OPEN_ERROR

今天01:04:(名称(成功备份-备份42,73 MB(压缩到7,32 MB(。(持续时间:1分钟(

今天00:59:(NAME(成功备份-备份了3.41 GB(压缩到379,17 MB(。(持续时间:4分钟(

我希望每一行都返回一个测试对象,其结果如下:result:Failedresult:Successful

从文本返回所有对象的方法

public Result FindResult(string text)
{
var splitText = text.Split("n").ToList();
Result r = Result.NONE;
foreach (var item in splitText)
{
if (item.Contains("Failed"))
{
r = Result.FAIL;
}
else
{
r = Result.SUCCESS;
}
}
return r;
}

但它只返回结果SUCCESS。预期输出

result:FAIL
result:SUCCESS
result:SUCCESS

您可以在至少2个换行符上进行拆分,然后使用Select映射列表中的项目,并检查它是否包含"失败";

如果是,则返回Result.FAIL,否则返回Result.SUCCESS,因此函数的返回类型为List<Result>

class Test
{
private Result result;
public enum Result
{
SUCCESS = 1,
FAIL = 2,
NONE = 3    
}
public List<Result> FindResult(string text)
{
return Regex
.Split(text, @"r?ns*r?n")
.Select(s => s.Contains("Failed") ? Result.FAIL : Result.SUCCESS)
.ToList();            
}
}

然后你可以循环返回列表中的项目

Test test = new Test();
var results = test.FindResult(input);
foreach(var r in results) {
Console.WriteLine(r);
}

输出

FAIL
SUCCESS
SUCCESS

请参阅C#演示。

相关内容

  • 没有找到相关文章

最新更新