C# 将分隔文件读入DataTable的高效函数

C# 将分隔文件读入DataTable的高效函数,c#,.net,file,import,C#,.net,File,Import,我想知道是否有人知道一种高效的c#函数,用于将制表符分隔的文件读入数据表 谢谢这里有一个方法 var dt = new DataTable(); dt.Columns.Add(new DataColumn("Column1", typeof(string))); dt.Columns.Add(new DataColumn("Column2", typeof(string))); dt.Columns.Add(new DataColu

我想知道是否有人知道一种高效的c#函数,用于将制表符分隔的文件读入数据表


谢谢这里有一个方法

        var dt = new DataTable();
        dt.Columns.Add(new DataColumn("Column1", typeof(string)));
        dt.Columns.Add(new DataColumn("Column2", typeof(string)));
        dt.Columns.Add(new DataColumn("Column3", typeof(string)));

        var lines = File.ReadAllLines(@"c:\tabfile.txt");
        foreach( string line in lines )
            dt.Rows.Add(line.Split('\t'));

目前,如果需要在.Net 2.0上使用LINQ方法,则可以轻松地重新创建这两种方法

//even cooler as an extension method
static IEnumerable<string> ReadAsLines(string filename)
{
    using (var reader = new StreamReader(filename))
        while (!reader.EndOfStream)
            yield return reader.ReadLine();
}

static void Main()
{
    var filename = "tabfile.txt";
    var reader = ReadAsLines(filename);

    var data = new DataTable();

    //this assume the first record is filled with the column names
    var headers = reader.First().Split('\t');
    foreach (var header in headers)
        data.Columns.Add(header);

    var records = reader.Skip(1);
    foreach (var record in records)
        data.Rows.Add(record.Split('\t'));
}
//更酷的扩展方法
静态IEnumerable可读行(字符串文件名)
{
使用(var reader=newstreamreader(文件名))
而(!reader.EndOfStream)
产生返回reader.ReadLine();
}
静态void Main()
{
var filename=“tabfile.txt”;
var reader=ReadAsLines(文件名);
var data=new DataTable();
//这假设第一条记录中填写了列名
var headers=reader.First().Split('\t');
foreach(标头中的var标头)
data.Columns.Add(表头);
var记录=读卡器。跳过(1);
foreach(记录中的var记录)
data.Rows.Add(record.Split('\t'));
}

如果文件真的很大,那么您要在MemoryEah中创建同一个大文件的两个副本,我应该提到这一点。我想让这个例子保持简单。如果文件很大的话,流阅读器会更合适。这很完美,我把它用于我自己的项目,有没有一种不用Jet的方法?对于我们这些拥有禁止进入的机器的人。
//even cooler as an extension method
static IEnumerable<string> ReadAsLines(string filename)
{
    using (var reader = new StreamReader(filename))
        while (!reader.EndOfStream)
            yield return reader.ReadLine();
}

static void Main()
{
    var filename = "tabfile.txt";
    var reader = ReadAsLines(filename);

    var data = new DataTable();

    //this assume the first record is filled with the column names
    var headers = reader.First().Split('\t');
    foreach (var header in headers)
        data.Columns.Add(header);

    var records = reader.Skip(1);
    foreach (var record in records)
        data.Rows.Add(record.Split('\t'));
}