我希望从文本文件中读取,如果一行包含“XYZ”,我需要在该行中返回子串,然后为另一个子串读取下一行。
将有几行将返回“XYZ”,并且在每一行上我将需要来自以下行的子串(每个都是不同的值)。 目前我可以使用“XYZ”返回行中子串的所有实例,但是要么从第一个“XYZ”下面的行继续返回相同的子串(每次都应该是唯一的),或者只是,如下所示,每个字符单独返回。
所以在下面的代码片段中,来自日志。如果一行包含XYZ,那么我需要移动到下一行并拉出日期/时间/和批名称编号。 XYZ将在日志中重复多次,每次都会有不同的结果。
2015-07-02 11:03:13,838 [1] INFO Place(null)(null)(null) - btnAction_Click,_HAH_Claim_T的完成扫描, XYZ
2015-07-02 11:03:14,432 [1] INFO Place(null)(null)(null) - btnAction_Click,设置批次名称 1234567
string[] lines = File.ReadAllLines(@"Text Document.txt");
foreach (string line in lines)
{
int success = line.IndexOf("XYZ");
if (success > 0)
{
string pass = "Pass";
string date = line.Substring(0, 10);
string time = line.Substring(11, 12);
int ID = line.LastIndexOf("XYZ");
if (ID != 0)
{
Console.WriteLine("\n\t" + pass + " Date: {0}\tTime: {1}", date, time);
}
string currentLine;
string batchID;
for (int i = 0; i < lines.Length; i++)
{
currentLine = lines.Skip(6).First();
batchID = currentLine.Substring(100);
Console.WriteLine("\tBatchID{0}", batchID[i]);
}
Console.WriteLine();
}
}
Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
答案 0 :(得分:1)
我并不完全理解这个问题,因为关于你想从每一行中提取什么有点抽象,但是这样的事情有希望让你走上正确的轨道
ImageButton
线变量是包含XYZ的线变量,下一行是后面的线。如果这不符合您的要求,请将问题更新为更具体的
答案 1 :(得分:0)
我会说这样的话?
string[] lines = File.ReadAllLines(@"Text Document.txt");
for(int i = 0; i < lines.Length(); i++){
if(lines[i].Contains("XYZ")){
string pass = "Pass";
string date = line.Substring(0, 10);
string time = line.Substring(11, 12);
Console.WriteLine("\n\t" + pass + " Date: {0}\tTime: {1}", date, time);
// Retrieve the value in the next line
string nextLineAfterXYZ = lines[i + 1];
batchID = nextLineAfterXYZ.Substring(100);
Console.WriteLine("\tBatchID{0}", batchID);
}
}
如果它是最后一行(IndexOutOfBound)等,你应该添加一些错误处理。
答案 2 :(得分:-3)
string[] lines = File.ReadAllLines(@"E:Sum.txt");
string str = string.Empty;
foreach (string line in lines)
{
if (line.Contains("x"))
{
str += line;
Console.WriteLine();
continue;
}
break;
}
Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();