如何在文本文档中覆盖找到行后的下一行
本文关键字:一行 文本 文档 覆盖 | 更新日期: 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);
}