Эффективная функция для чтения файла с разделителями в DataTable

Мне было интересно, если кто-нибудь знает эффективную функцию C# для чтения файла с разделителями табуляции в Da taTable?

Спасибо

4 ответа

В настоящее время используются методы LINQ. .First() а также .Skip() оба легко воссоздать, если вам нужно использовать это на.Net 2.0

//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'));
}
public System.Data.DataTable GetDataTable(string strFileName)
{
    System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + System.IO.Path.GetDirectoryName(strFileName) + ";Extended Properties = \"Text;HDR=YES;FMT=TabDelimited\"");
    conn.Open();
    string strQuery = "SELECT * FROM [" + System.IO.Path.GetFileName(strFileName) + "]";
    System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(strQuery, conn);
    System.Data.DataSet ds = new System.Data.DataSet("CSV File");
    adapter.Fill(ds);
    conn.Close();
    return ds.Tables[0];
 }
      DataTable ConvertToDataTable(string filePath, int numberOfColumns)
{
    DataTable tbl = new DataTable();

    for (int col = 0; col < numberOfColumns; col++)
        tbl.Columns.Add(new DataColumn("Column" + (col + 1).ToString()));


    string[] lines = System.IO.File.ReadAllLines(filePath);

    foreach (string line in lines)
    {
        var cols = line.Split(' ');

        DataRow dr = tbl.NewRow();
        for (int cIndex = 0; cIndex < 3; cIndex++)
        {
            dr[cIndex] = cols[cIndex];
        }

        tbl.Rows.Add(dr);
    }

    return tbl;
}

Вот один из способов сделать это...

        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'));
Другие вопросы по тегам