gpt4 book ai didi

C# 将文件行存储到数组中,然后保存选定的行

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:07 32 4
gpt4 key购买 nike

我正在尝试编写代码,它基本上会打开所需的文件,将所有行存储到数组中,然后,如果行满足条件,行将被保存到新的文本文件中。运行程序时,行读取器收到错误消息,该索引在数组之外。请帮忙,我是 C# 的新手

 int NumLines = new StreamReader(OpenFile.FileName).ReadToEnd().Split(new char[] { '\n' }).Length;
StreamReader Data = new StreamReader(OpenFile.FileName);
string[] arr = new string[NumLines];
for (int i = 0; i <= NumLines; i++)
{
StreamWriter File = new StreamWriter("C://Users//Tomas//Desktop//BC//tmp//Data.txt");
arr[i] = Data.ReadLine();

最佳答案

索引应小于数组大小:

for (int i = 0; i < NumLines; i++)
^

但是您不需要将行放入数组中以将它们写入其他文件。例如。如果你只想按条件写一些行:

File.WriteAllLines(newFileName, File.ReadLines(OpenFile.FileName).Where(condition));

其中 condition 是一个委托(delegate),它检查是否应该写入行。例如。如果你只想写以 "Foo" 开头的行:

.Where(line => line.StartsWith("Foo"))

注意:如果您想无条件地将所有行写入新文件,那么您可以复制原始文件:

File.Copy(OpenFile.FileName, newFileName);

更新:从您的评论中可以明显看出,您需要找到符合某些条件的行,并且还要在该行之后写入输出第 6 行和第 8 行。您仍然可以在不将所有源文件转储到内存中的情况下执行此操作:

private static IEnumerable<string> GetVertexCoordinates(string fileName)
{
var enumerator = File.ReadLines(fileName).GetEnumerator();

while (enumerator.MoveNext())
{
if (enumerator.Current == "VERTEX")
{
yield return enumerator.Current;

for (var i = 0; i < 6; i++) enumerator.MoveNext(); // skip 6 lines
yield return enumerator.Current;

for (var i = 0; i < 2; i++) enumerator.MoveNext(); // skip 2 more lines
yield return enumerator.Current;
}
}
}

而且用法仍然是一行

File.WriteAllLines(newFileName, GetVertexCoordinates(OpenFile.FileName));

关于C# 将文件行存储到数组中,然后保存选定的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43380355/

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