C# 如何读取大的txt文件?

C# 如何读取大的txt文件?,c#,.net,file,text,C#,.net,File,Text,我有一个1000个文本文件,我想从一个到一个读取,每个文件都有4700000条记录,例如,文件中的一行是: 43266200 6819 43295200 1393/05/23 14:28:45 113 1 我希望保存到sql server中,例如: field1:43266200 field2:6819 我该怎么做呢?这可能会对您有所帮助 var message ="43266200 6819 43295200 1393/05/23 1

我有一个1000个文本文件,我想从一个到一个读取,每个文件都有4700000条记录,例如,文件中的一行是:

43266200 6819           43295200 1393/05/23 14:28:45    113      1
我希望保存到sql server中,例如:

field1:43266200
field2:6819
我该怎么做呢?

这可能会对您有所帮助

var message ="43266200 6819           43295200 1393/05/23 14:28:45    113      1";
//Split your data into pieces
var messages=message.Split(' ').Where( o => !string.IsNullOrEmpty(o));
var i=0;
foreach(var item in messages)
{
  // do whatever you wanna to do with pieces
   Console.Write( "field {0}:{1}",++i,item);
}

如果正在从文件中读取文本,并且可以合理地假设空格字符将是唯一的分隔符,则应使用
String.Split()
方法标记每行:

// instantiate FileInfo of your file as yourFile

foreach (string line in yourFile.ReadLines())
{
    string[] lineTokens = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
}
String.Split()
允许您根据第一个参数中提供的
char
分隔符,将任何字符串分隔为子字符串的字符串[]。上面代码中的第二个参数是StringSplitOptions枚举中的一个值,其值为None(提供所有字符串)或RemoveEmptyEntries(不返回仅由分隔符组成的任何子字符串)


然后,从那里,您可以迭代lineTokens并从每个标记组装一个对象,或者您可以组装一个SQL查询,其中任何给定的索引都对应于要添加的行中的一列。

每行(记录)有多大?记录的长度是固定的吗?我建议使用
StreamReader
,以避免可能出现的内存不足问题。如果文件足够大,并且不想一次将其加载到内存中,您可能需要一本书。因此,您需要一本书来告诉您如何读取文本文件?尝试过文档吗?这将导致一堆空白字段,因为您要在单个空间上拆分。至少使用
StringSplitOptions.removempties
。感谢您提供的信息:)ReadLines对于如此大的文件(OutOfMemoryExceptions等)是不可靠的。行到行的streamreader应该性能更好。
ReadLines
返回一个
IEnumerable
,它被设计用于大文件,因为它只获取内存中的当前行,而不是整个文件,也许你说的是
ReadAllLines
,它返回字符串[],并立即读取整个文件。你是对的,很抱歉我其实在想读所有的台词。
var seperators = " ".ToCharArray();
foreach(var line in File.ReadLines(path))
{
  var fields = line.Split(seperators, StringSplitOptions.RemoveEmptyEntries);
  //now you have fields[0] and fields[1], save them in your database
}