Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将分隔文件读入DataTable的好方法_C# - Fatal编程技术网

C# 将分隔文件读入DataTable的好方法

C# 将分隔文件读入DataTable的好方法,c#,C#,我正在寻找将分隔文件读入DataTable的好方法,并找到了这段代码 private void txtRead_Click(object sender, EventArgs e) { var filename = @"d:\shiptest.txt"; var reader = ReadAsLines(filename); var data = new DataTable(); //this assume the

我正在寻找将分隔文件读入DataTable的好方法,并找到了这段代码

    private void txtRead_Click(object sender, EventArgs e)
    {
        var filename = @"d:\shiptest.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'));
        }

        dgList.DataSource=data;
    }

    static IEnumerable<string> ReadAsLines(string filename)
    {
        using (var reader = new StreamReader(filename))
            while (!reader.EndOfStream)
                yield return reader.ReadLine();
    }

这段代码运行良好,速度很快,但我很好奇,当文本文件中有大量数据时,上述代码的效率会是多少。寻找建议。感谢

可能的替代方法是将整个文件读入一个字符串,然后将其拆分\r\n。或者另一种替代方法是使用现成的第三方解决方案,如,而不是再次重新发明轮子。@marc_s,IMO导入整个库以替换2种方法有点太过了。Thomas-您的方法非常快。比一些领先的免费第三方更快。要将一个由大约14000条记录组成的逗号分隔文件读入DataTable,FileHelpers花费了60多秒,但您的方法一眨眼就完成了。所以,不要再相信那些说要使用第三方产品的人,永远都在说“为什么要重新发明”。试试File.ReadAllLinesfilename.ToList;而不是ReadAsLines方法。