C#.txt文件:如果前一行包含“X”,则读取下一行中的子字符串

时间:2015-07-10 10:44:22

标签: c# text-files

我希望从文本文件中读取,如果一行包含“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();

3 个答案:

答案 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();