2009-07-22 7 views

Antwort

0

So könnte eine mögliche ...

 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')); 
+1

Wenn die Datei wirklich groß ist, erstellen Sie 2 Kopien der gleichen großen Datei im Speicher –

+0

Ja, das hätte ich erwähnen sollen. Ich wollte das Beispiel einfach halten. Ein Stream-Reader wäre besser geeignet, wenn die Dateien groß wären. – Steve

+0

das ist perfekt Ich habe das für mein eigenes Projekt verwendet –

5
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]; 
} 
+0

Gibt es eine Möglichkeit, dies ohne Jet zu tun? Für diejenigen von uns mit Maschinen, in denen der Zugang verboten ist. –

+0

Die andere Möglichkeit besteht darin, die Datei manuell zu analysieren –

15

sowohl einfach neu erstellen Diese nutzt derzeit die LINQ Methoden .First() und .Skip() zu tun ist, wenn Sie diese auf verwenden müssen. 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')); 
} 
Verwandte Themen