-4

我不太确定这个问题的答案是什么,所以我希望能提供信息来帮助我更好地理解我在这里拥有的东西。我的目标是将文本文件的内容读入列表,解析信息并删除孤立记录(文件中没有关联父记录/行的子记录/行),然后将剩余行写回文件按顺序。

我使用以下方法

IList<String> lines  = File.ReadAll(Filepath);
IList<String> secondlines = lines.Copy();

foreach (String line in lines) 
{
    If Brecord 
        foreach String record in secondlines 
        {
             if  record is same as Brecord 
                   //No Parent record found for this Brecord before it
                    Delete record 
              else if record is Parent of Brecord 
                     exit loop
         }
}


File.WriteAll(secondlines , SecondPath)

我如何确保每次发生这种情况时,文件的内容都按照它们在文件中出现的顺序进行处理?

4

3 回答 3

2

There's no method File.ReadAll.

The methods File.ReadAllLines and File.ReadLines already return the lines of the file in the correct order. So you don't need to do anything to assure that.

(The difference between them is that File.ReadAllLines reads the entire file into memory at once and gives you an array with the full file contents, while File.ReadLines is lazy and only reads from the file when you foreach through the returned object. In the last case you don't have to read all of the file, and the entire file will not have to be in memory at once, since you read "line by line".)

于 2013-01-26T15:17:22.340 回答
0

不是 100% 确定你的 if 语句在做什么,但为什么不使用 Linq

var lines = File.ReadAll(filepath)
                .Where(x=>( x.Something == "something else"));

File.WriteAll (lines, SecondPath)

或者在你的情况下更有可能

var lines = File.ReadAll(filePath).Distinct();

这应该保持将行读入列表的顺序。在 foreach 循环期间修改对象的内容时也需要小心

于 2013-01-26T15:01:10.070 回答
0

除非您在某处明确对它们进行排序或重新排序,否则您应该已经看到事情按照它们在文件中出现的顺序发生了。

  • 实现的框架对象IList本质上是有序的
  • File.ReadAllLines按出现的顺序返回文本文件中的行列表。
  • 枚举IListusingforeach按顺序访问每个元素。
  • File.WriteAllLines将字符串按顺序写入新文件。

由于您粘贴的代码实际上并不是您正在使用的代码,因此无法查看您是否正在做一些更微妙的事情,从而破坏了输入列表中元素的顺序。特别是,我对您的工作方式非常感兴趣

delete record

部分,因为您无法更改IListduring enumeration。我的怀疑是,无论您为生成第二个无重复列表所做的一切都是您的问题所在。

于 2013-01-26T15:01:19.007 回答