如何在文本文档中覆盖找到行后的下一行

本文关键字:一行 文本 文档 覆盖 | 更新日期: 2023-09-27 18:04:38

这里我想做一件事,所以我从文本文档中找到了行值现在我想覆盖X不是覆盖找到的行,而是覆盖找到的行之后的下一行

所以如果内容是:

line1
line2
line3
line4

,如果string text = "line2";与此代码:

using System;
using System.IO;
namespace _03_0
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = "line2";
            string text = File.ReadAllText("doc.txt"); 
            text = text.Replace(text, "X"); 
            File.WriteAllText("doc.txt", text);          
        }
    }
}

我得到这样的结果:

line1
X
line3
line4

但是我想要这个结果:

line1
line2 
X
line4

如何在文本文档中覆盖找到行后的下一行

我建议使用正则表达式:

string filePath = @"doc.txt";
string myStr = "line2";
string content = File.ReadAllText(filePath);
string pattern = string.Format(@"(?<={0}'r'n).+?(?='r'n)", myStr);
Regex r = new Regex(pattern);
File.WriteAllText(filePath, r.Replace(content, "X"));

p。S:您需要导入RegularExpressions命名空间:

using System.Text.RegularExpressions;

希望有帮助:)

旁注: 不能使用相同的变量名(text)两次

您必须遍历您的行。
一旦你找到你的行,读下一个并改变它。

// pseudo code:
var all_text = File.ReadAllLines("doc.txt"); 
bool b = false;
for (var s in all_text)
{
   // add s to a list of strings
   if (b)
   {
      // add the new string to the list
      b = false;
   }
   if (/* s == match */ )
     b = true;
}
// write your file.

这将添加所有的行,并改变下一个你想要的,然后添加所有其余的。

您可以找到该行的索引以更改其后面的行:

string[] lines = File.ReadAllLines("doc.txt");
int i = Array.IndexOf(lines, "line2");
if (i >= 0 && i < lines.Length - 1)
{
    lines[i + 1] = "X";
    File.WriteAllLines("doc.txt", lines);
}