我最近一直在编辑一些文本文件,所有文本文件非常相似,需要相同类型的编辑。手动执行这些编辑非常耗时,因此我开始研究C#以自动完成其中的大部分内容。我能够弄清楚如何进行一些编辑,但我不能为我的生活弄清楚如何编写最耗时的部分。
是否可以移动文本文件中以特定字符串开头的所有行,在本例中为“32”,并将它们移动到文本文件中的特定行,在本例中为第70行,插入后指定行的新行?我有代码来选择我想要这样做的文件,我只是无法弄清楚如何实际移动这些行。
下面的代码可以完成我想要的一切,除了第70行的输出是System.Collections.Generic.List`1 [System.String]
foreach (string osuFilePath in openFileDialog1.FileNames)
{
string[] osuArray = File.ReadAllLines(osuFilePath);
List<string> osuList = osuArray.ToList();
List<string> osuStr = osuList.FindAll(s => s.StartsWith("32,"));
osuList.RemoveAll(ss => ss.StartsWith("32,"));
string osuString = osuStr.ToString();
osuList.Insert(70, osuString);
File.WriteAllLines(osuFilePath + "v2", osuList.ToArray());
}
答案 0 :(得分:1)
最简单的方法是:
string[] lines = File.ReadAllLines("MyFile.txt");
//List<string> lines2 = lines.ToList();
// manipulate here your array of lines
File.WriteAllLines("MyFile.txt", lines);
//File.WriteAllLines("MyFile.txt", lines2.ToArray());
如果您更喜欢使用List<string>
而不是string[]
,则注释行。操作List<string>
通常更容易。
答案 1 :(得分:1)
显然是的。实际问题应该是“如何?”......
例如:
List<string> lines = File.ReadAllLines("/file/path").ToList();
// change line position
String line = lines[3];
lines.RemoveAt(3);
lines.Insert(7, line);
File.WriteAllLines("/file/path", lines.ToArray());
(将第4行移至第8行)
答案 2 :(得分:0)
你可以做到
string[] arrText;
string lineThreeHundred;
arrText = File.ReadAllLines("c:\test.txt");
lineThreeHundred = arrText[299];// choose line