0

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

        }
4

3 回答 3

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());

注释行是如果您更喜欢使用 aList<string>而不是 a string[]。通常更容易操作List<string>.

于 2013-09-02T07:29:33.930 回答
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 行)

于 2013-09-02T07:40:56.630 回答
0

你可以做

string[] arrText;
string lineThreeHundred;

arrText = File.ReadAllLines("c:\test.txt");
lineThreeHundred = arrText[299];// choose line
于 2013-09-02T07:29:10.717 回答