问题描述
如果有,其数据将被时间增加时间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 $ C你不能使用
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行的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!