如何在文本文件的某些行之前只写一个#
本文关键字:一个 文本 文件 | 更新日期: 2023-09-27 18:16:50
我有一个文本文件,如下所示:
Rows
...
product.people
product.people_good
product.people_bad
product.boy
#product.me
...
Rows
我想把#放在product.
之前,文件是:
Rows
...
#product.people
#product.people_good
#product.people_bad
#product.boy
#product.me
...
Rows
为此,我使用下一个代码:
string installerfilename = pathTemp + fileArr1;
string installertext = File.ReadAllText(installerfilename);
var linInst = File.ReadLines(pathTemp + fileArr1).ToArray();
foreach (var txt in linInst)
{
if (txt.Contains("#product="))
{
installertext = installertext.Replace("#product=", "product=");
}
else if (txt.Contains("product.") && (!txt.StartsWith("#")))
{
installertext = installertext.Replace(txt, "#" + txt);
}
File.WriteAllText(installerfilename, installertext);
}
但是这个代码做下一件事:
Rows
...
#product.people
##product.people_good
##product.people_bad
#product.boy
#product.me
...
Rows
有人能给我解释一下吗?我怎么能在这些行之前只写一个#?
当前,您正在读取同一文本文件两次——一次作为单独的行,一次作为整体。然后,您将根据行数对文件进行多次重写。这一切都坏了。我怀疑你只是想:
// Note name changes to satisfy .NET conventions
// Note: If pathTemp is a directory, you should use Path.Combine
string installerFileName = pathTemp + fileArr1;
var installerLines = File.ReadLines(installerFileName)
.Select(line => line.StartsWith("product=") ? "#" + line : line)
.ToList();
File.WriteAllLines(installerFileName, installerLines);
如果写入的文件与读取的文件不同,则不需要ToList
调用。
您可以通过product
进行拆分,然后将其连接到一个新字符串:
// string installerFileText = File.ReadAllText(installerFileName);
string installerFileText = @"
Rows
...
product.people
product.people_good
product.people_bad
product.boy
...
Rows";
string[] lines = installerFileText.Split(new string[] { "product." }, StringSplitOptions.None);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < lines.Length; i++)
sb.Append(((i > 0 && i < lines.Length) ? "#product." : "") + lines[i]);
// File.WriteAllText(installerFileName, sb.ToString());
Console.WriteLine(sb.ToString());
Console.ReadKey();
输出:
Rows
...
#product.people
#product.people_good
#product.people_bad
#product.boy
...
Rows";
else if (txt.Contains("product.") && (!txt.StartsWith("#")))
{
installertext = installertext.Replace(txt, "#" + txt);
}
为什么不将"!txt.StartsWith("#"("替换为"!txt.Contains("#("?
我想那就行了!