gpt4 book ai didi

C# 在文件中搜索字符串并获取字符串的行号

转载 作者:太空狗 更新时间:2023-10-30 00:30:52 26 4
gpt4 key购买 nike

我一整天都在做这件事,我正在努力去做,我到处搜索,虽然有类似的问题,但没有答案。

我想做什么:我正在尝试在一个文件中搜索多个字符串并接收行号,以便当用户希望在我的应用程序中更改所述字符串时,我的应用程序知道要用他们的字符串替换哪些行。

到目前为止我尝试了什么:我试过下面的代码,我的尝试是读取文件然后接收行号,但它似乎根本不起作用。

            var lines = File.ReadAllLines(filepath);
foreach (var match in lines // File.ReadLines(filePath)
.Select((text, index) => new { text, lineNumber = index + 1 })
.Where(x => x.text.Contains("motd=")))
{
lines[match.lineNumber] = "motd=" + textBox1.Text;
File.WriteAllLines(filepath, lines);
}
}

我希望上面的代码做的是在文件中找到字符串“motd=”,获取行号并尝试用用户输入的内容重写它。

但是,我收到此错误:“索引超出数组范围”。

最佳答案

我认为 for 循环在这里更有意义

var lines = File.ReadAllLines(filepath);
for (int i = 0; i < lines.Length; i++)
{
if(lines[i].Contains("motd="))
{
lines[i] = "motd=" + textBox1.Text;
}
}

File.WriteAllLines(filepath, lines);

你的代码有几个问题是你在循环中写出文件并且你将索引递增 1 这将指向数组中的错误行并导致你得到的异常如果最后一行包含您要搜索的文本。

应该注意的是,如果您正在处理一个非常大的文件,这可能会占用大量内存。在那种情况下,我会一次读取一行并将它们写到一个临时文件中,然后删除原始文件并在最后重命名临时文件。

var tempFile = Path.GetTempFileName();
using (var file = File.OpenWrite(tempFile))
using (var writer = new StreamWriter(file))
{
foreach (var line in File.ReadLines(filepath))
{
if (line.Contains("motd="))
{
writer.WriteLine("motd=" + textBox1.Text);
}
else
{
writer.WriteLine(line);
}
}
}

File.Delete(filepath);
File.Move(tempFile, filepath);

关于C# 在文件中搜索字符串并获取字符串的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32381326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com