c# .txt文件:如果前一行包含"X",则在下一行读取子字符串

本文关键字:一行 quot 字符串 读取 包含 文件 txt 如果 | 更新日期: 2023-09-27 18:02:07

我希望从文本文件中读取,如果一行包含"XYZ",我需要在该行内返回子字符串,然后在下一行读取另一个子字符串。

将有几行将返回"XYZ",并且在每一行上,我都需要来自下一行的子字符串(每一行都将是不同的值)。目前,我可以返回具有"XYZ"行的子字符串的所有实例,但然后要么保持从第一个"XYZ"下面的行返回相同的子字符串(每次都应该是唯一的),要么就像下面一样,每个字符单独。

所以在下面的代码片段中,来自日志。如果一行包含XYZ,那么我需要移动到下一行并拉出日期/时间/和批名称编号。XYZ将在日志中重复几次,每次都有不同的结果。

2015-07-02 11:03:13 838 [1] INFO Place (null) (null) (null) - btnAction_Click, Completed Scan for _HAH_Claim_T, XYZ

2015-07-02 11:03:14,432 [1]信息的地方(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();

c# .txt文件:如果前一行包含"X",则在下一行读取子字符串

我不完全理解这个问题,因为对于你想从每行中提取什么,它有点抽象,但像这样的东西希望能让你走上正确的轨道

    using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
    using (var reader = new StreamReader(stream))
    {
        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            if (line.Contains("XYZ") && !reader.EndOfStream)
            {
                var nextLine = reader.ReadLine();
                var pass = "Pass";
                var date = nextLine.Substring(0, 10);
                var time = nextLine.Substring(11, 12);
                Console.WriteLine("'n't" + pass + " Date: {0}'tTime: {1}", date, time);
            }
        }
    }

line变量是包含XYZ的变量,下一行是其后的行。如果不符合您的要求,请将问题更新得更具体一些

我会说这样的话吗?

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)等

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