我有一个非常长的文本文件。所有行都具有相同的长度。我想在C#中读取第一百万行,而不先读取先前的999999行,否则程序变得太慢。我能怎么做?在C#中读取第一百万行
4
A
回答
4
你知道每行有字节吗?
NB了解字符数量是不够的。
如果你知道这是个字节固定数量的使用:
using(Stream stream = File.Open(fileName, FileMode.Open))
{
stream.Seek(bytesPerLine * (myLine - 1), SeekOrigin.Begin);
using(StreamReader reader = new StreamReader(stream))
{
string line = reader.ReadLine();
}
}
如果没有,那么:
string line = File.ReadLines(FileName).Skip(999999).Take(1).First();
虽然这第二个选项仍然需要被列举的线条,它避免了阅读整个文件一次全部存入内存中以便这样做。
14
试试这个
const int BYTES_PER_LINE = 120;
static void Main(string[] args)
{
StreamReader reader = new StreamReader("FileName", Encoding.UTF8);
long skipLines = 999999;
reader.BaseStream.Position = skipLines * BYTES_PER_LINE;
}
+0
确保包含每行可能返回的0x0D和/或0x0A。通常我使用较大的数字前设置1跳跃行和测试。 – jdweng
1
streamReader.BaseStream.Seek(skip_lines_offset, SeekOrigin.Begin);
string line = streamReader.ReadLine();
Seek
方法避免读取整个文件。您可以阅读更多here。 skip_lines_offset
是行的字节偏移量,所以number_of_skipped_lines * bytes_In_Line
+1
通常情况下,如果答案包含对代码打算做什么的解释,以及为什么解决问题而不介绍其他问题,答案会更有帮助。 (这篇文章被至少一个用户标记,大概是因为他们认为没有解释的答案应该被删除。) –
相关问题
- 1. 获得第一百万分之一秒
- 2. Mongo DB读取4百万个文档
- 3. 查找第一百万个素数
- 4. 将pi计算为第一百万位。
- 5. 从stdin C++读取数百万整数的最快方法?
- 6. 1百万行ListView
- 7. 制图百万行
- 8. 在Spark中读取数百万本地文件
- 9. 在cassandra中读取超过百万条记录
- 10. 从Oracle读取数百万行的大表并写入HDF5
- 11. 一百万+记录
- 12. 将一个表中数百万行与另一个表中数百万行进行比较的最快方法
- 13. 在oracle中更新数百万行
- 14. ASP.Net C#使用第一行读取器
- 15. 不会读取第一行C#
- 16. 打印数字从一百万到一百万
- 17. 从postgresql中的每行数百万行读取的策略应该是什么?
- 18. 批量更新一百万行
- 19. 使用Apache poi从xlsx中读取百万条记录
- 20. 数百万行的GUI
- 21. C:在散列表中存储多达一百万个条目
- 22. 在C中一次读取一行
- 23. 获取数百万文件的文件夹中的第一个文件
- 24. getline()不读取第一行
- 25. 在Oracle中插入一百万行的最快方法
- 26. 从3百万行中选择Random
- 27. 如何读取最后一行在C#中的文本文件,第一行
- 28. 如何从平面文件读取数百万条记录?
- 29. 爆炸在PHP只读取第一行
- 30. 百万行csv文件,需要行数
请提供说明该代码如何解决“没有先读取先前的999999”? –
这是一个可怕的答案。您的示例将所有行读入内存,然后跳过内存中的999,999个项目,以便它可以取1个项目。你做一个“Take”,然后是“First”。如果你正在做'First',那么省略Take(1)'片。无论哪种方式,你的答案都与OP所要求的完全相反。 –
@JohnathonSullinger谢谢您的评论,请参阅我的更新 – Tom