我需要从日志文件中获取“运行模块”之后的单词。 “运行模块”之后的单词始终以句号结束(。) 我需要在数组中插入这个单词,以便以后在需要时访问。
日志中的示例文本是:
25.5.2018 10:42:35.621状态消息0884:运行模块SamplesSim。
25.5.2018 10:42:35.621状态消息0120:数据输入:打开:T:\ RCS \ BiggieStatementsOn \ PRINT \ INPUTJACK \ FCA_HomeBandAccounts_23052018.csv。 (DataInput1)
我已尝试使用indexOf()
,但我一直以“运行”作为输出。
这是我的代码:
string consoleOutput = compiler.StandardOutput.ReadToEnd();
startIndex = consoleOutput.IndexOf("Running module");
string[] ModuleParams;
string runningMod = "";
if (startIndex != -1)
{
lastIndex = startIndex +3;
if (lastIndex != -1)
{
ModuleParams = consoleOutput
.Substring(startIndex, lastIndex - startIndex)
.Split(' ');
runningMod = ModuleParams[0];
//.Substring(4).Replace("Running module", "").Trim();
}
Console.WriteLine(runningMod);
}
答案 0 :(得分:2)
我更正了您的代码,现在输出SamplesSim
using System;
public class Program
{
public static void Main()
{
string consoleOutput = @"
25.5.2018 10:42:35.621 Status message 0884:Running module SamplesSim.
25.5.2018 10:42:35.621 Status message 0120:Data Input: Opening: T:\RCS\BiggieStatementsOn\PRINT\INPUTJACK\FCA_HomeBandAccounts_23052018.csv. (DataInput1)
";
string wordToFind = "Running module";
var startIndex = consoleOutput.IndexOf(wordToFind);
string[] ModuleParams;
string runningMod = "";
if (startIndex != -1)
{
var lastIndex = startIndex + wordToFind.Length;
if (lastIndex != -1)
{
ModuleParams = consoleOutput
.Substring(startIndex+wordToFind.Length, consoleOutput.Length - (startIndex+wordToFind.Length))
.Split(new char[]{' ','\n','.'}, StringSplitOptions.RemoveEmptyEntries);
runningMod = ModuleParams[0];
//.Substring(4).Replace("Running module", "").Trim();
}
Console.WriteLine(runningMod);
}
}
}
答案 1 :(得分:0)
可能有更简洁的方法,但这应该有效。
string text = consoleOutput.Split(new string[] { "Running module" }, StringSplitOptions.None)[1].Split('.')[0];
因此,我通过字符串“Running module”拆分控制台输出,并将文本放在拆分的右侧。然后我再次以“。”分裂。并取左侧的值。这非常混乱,所以我会留意改进。
编辑:忘记提及,您可能需要从字符串的开头修剪空格,就好像您有“运行模块重命名器”之类的东西,分割后的输出将是“重命名”。您可以使用text = text.Trim();
删除所有空格,或text = text.TrimStart();
从一开始就删除空格。或者,您可以在上面代码的末尾添加它,但我听说这是不好的做法。
string text = consoleOutput.Split(new string[] { "Running module" }, StringSplitOptions.None)[1].Split('.')[0].Trim();
最好将它展开一点
string text = consoleOutput.Split(new string[] { "Running module" }, StringSplitOptions.None)[1];
text = text.Split('.')[0];
text = text.Trim();
答案 2 :(得分:0)
请尝试以下操作。
string mystring = "25.5.2018 10:42:35.621 Status message 0884:Running module SamplesSim.";
string keyWord = "Running module";
string extractedWord = mystring.Substring(mystring.IndexOf(keyWord) + keyWord.Length).Trim();
Console.WriteLine(extractedWord);
上面的代码将返回SampleSim
它还会删除字符串中的任何空格。
答案 3 :(得分:0)
您可以使用正则表达式。见https://regex101.com/r/Xm25z5/1
/Running module\s[a-zA-Z]+.$/gm