本文介绍了阅读最后30000行的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果有,其数据将被时间增加时间csv文件。现在我需要做的是阅读的最后一个30000行。

If has a csv file whose data will increase by time to time. Now what i need to do is to read the last 30,000 lines.

代码:

string[] lines = File.ReadAllLines(Filename).Where(r => r.ToString() != "").ToArray();

 int count = lines.Count();

 int loopCount = count > 30000 ? count - 30000 : 0;

  for (int i = loopCount; i < lines.Count(); i++)
  {
      string[] columns = lines[i].Split(',');
      orderList.Add(columns[2]);
  }



据工作正常,但问题是

It is working fine but the problem is

File.ReadAllLines(Filename)

阅读这会导致性能缺乏一个完整的文件。我想类似的东西只读取最后一次30000行其迭代通过完整的文件

Read a complete file which causes performance lack. I want something like it only reads the last 30,000 lines which iteration through the complete file.

PS:我使用.net 3.5。 Files.ReadLines()不存在净3.5

PS : i am using .Net 3.5 . Files.ReadLines() not exists in .Net 3.5

推荐答案

您可以使用 File.ReadLines() 方法,而不是使用 File.ReadAllLines()

You can Use File.ReadLines() Method instead of using File.ReadAllLines()

从MSDN:的

readlines方法 ReadAllLines 方法的区别如下:结果
当您使用readlines方法,你就可以开始列举
返回整个集合之前的字符串的集合;当您使用ReadAllLines,您必须
等字符串全阵列退回,然后才能访问$ B $数组b。

因此,当你的具有非常大的文件
readlines方法可以更有效。

Therefore, when you are working with very large files, ReadLines can be more efficient.

解决方案1 ​​

        string[] lines = File.ReadAllLines(FileName).Where(r => r.ToString() != "").ToArray();

        int count = lines.Count();
        List<String> orderList = new List<String>();
        int loopCount = count > 30000 ? 30000 : 0;

        for (int i = count-1; i > loopCount; i--)
        {
            string[] columns = lines[i].Split(',');
            orderList.Add(columns[2]);
        }



解决方案2:如果您使用的是.NET框架3.5,你在下面的评论说,因为它是avaialble因为 .NET 4.0 File.ReadLines()方法。$ C>

Solution 2: if you are using .NET Framework 3.5 as you said in comments below , you can not use File.ReadLines() method as it is avaialble since .NET 4.0 .

您可以使用的StreamReader如下:

You can use StreamReader as below:

        List<string> lines = new List<string>();
        List<String> orderList = new List<String>();
        String line;
        int count=0;
        using (StreamReader reader = new StreamReader("c:\\Bethlehem-Deployment.txt"))
        {
            while ((line = reader.ReadLine()) != null)
            {
                lines.Add(line);
                count++;
            }
        }

        int loopCount = (count > 30000) ? 30000 : 0;

        for (int i = count-1; i > loopCount; i--)
        {
            string[] columns = lines[i].Split(',');
            orderList.Add(columns[0]);
        }

这篇关于阅读最后30000行的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-24 16:43