是否可以将文本文件中的行移动到另一个特定行?

时间:2013-09-02 07:24:36

标签: c# .net file-io

我最近一直在编辑一些文本文件,所有文本文件非常相似,需要相同类型的编辑。手动执行这些编辑非常耗时,因此我开始研究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());

        }

3 个答案:

答案 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