Ich frage mich, ob jemand wusste, eine effiziente C# -Funktion für das Lesen einer tabulatorgetrennten Datei in eine Datentabelle?Effiziente Funktion zum Lesen einer Datei mit Trennzeichen in DataTable
Dank
Ich frage mich, ob jemand wusste, eine effiziente C# -Funktion für das Lesen einer tabulatorgetrennten Datei in eine Datentabelle?Effiziente Funktion zum Lesen einer Datei mit Trennzeichen in DataTable
Dank
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'));
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];
}
Gibt es eine Möglichkeit, dies ohne Jet zu tun? Für diejenigen von uns mit Maschinen, in denen der Zugang verboten ist. –
Die andere Möglichkeit besteht darin, die Datei manuell zu analysieren –
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'));
}
Wenn die Datei wirklich groß ist, erstellen Sie 2 Kopien der gleichen großen Datei im Speicher –
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
das ist perfekt Ich habe das für mein eigenes Projekt verwendet –