我正在嘗試從文本中提取資料。它是更大的文本。為了更好的理解。我有一個簡單的類 Test ,它有一個屬性結果,即列舉。
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)
備份失敗:找不到檔案 (NAME)
DISK_OPEN_ERROR今天 01:04:(名稱)成功備份 - 備份 42,73 MB(壓縮為 7,32 MB)。(持續時間:1 分鐘)
今天 00:59:(名稱)成功備份 - 備份 3,41 GB(壓縮為 379,17 MB)。(持續時間:4 分鐘)
我希望每一行都回傳一個 Test 物件,其結果如下:result: Failed 或result: Succesful。
從文本中回傳所有物件的方法
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;
}
但它只回傳結果成功。預期產出
result:FAIL
result:SUCCESS
result:SUCCESS
uj5u.com熱心網友回復:
您可能會做的是拆分至少 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?\n\s*\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# 演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/522805.html
標籤:C#。网林克哎呀分裂
