1

私は、SQL に似たクエリを大きなテキスト ファイルに対して実行し、データグリッドに入力する最も簡単で堅牢な方法を見つけようとしています。テキストは区切られており、私がやろうとしていることの擬似コードは次のとおりです。

table = parsed_text_file<br>
result = "SELECT CONCAT (first, last) AS name, COUNT(city) FROM table WHERE field = blah"<br>
DataGridView.DataSource = result

これまでのところ、次を使用してみました:
1) <OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & textfile & ";Extended Properties='text;HDR=Yes;IMEX=1;FMT=TabDelimited';") OleDbDataAdapter と SQL クエリを使用してデータセットを埋めます。これは SQL 部分ではうまく機能しますが、db 接続と区切り文字、および Schema.ini に多くの問題がありました。

2) データセットを構築するための TextFieldParser。これは、ファイルを読み取ってテーブルを作成する場合にはうまく機能しますが、DataView、Select、または RowFilter のみを使用してクエリを実行するには犬です。

3) ファイルを行ごとに解析し、データセットを作成しますが、これは非常に遅いです。

データセットを使用して LINQ に行き詰まる前に、これを行うためのより簡単な方法はありますか?

4

4 に答える 4

0

これを実行できる SQL Plugin for Notepad++ というプラグインがあります。

于 2013-12-19T21:35:01.087 に答える
0

それは、あなたがどれだけシンプルになりたいかによって異なります。csv を読み取って分割できます。

foreach(string[] line in File.ReadLines(fileName).Split(","))
{
    // do stuff with line
}

しかし、それには型情報がなく、エラーが発生しやすいですが、すばやくダーティにしたい場合は素晴らしいです。

Microsoft Text Driverで使用できるもありますOdbcConnection

public OdbcConnection GetConnection(string filePath)
{
    // MaxScanRows set to 0 will scan the entire file before generating types
    var connectionString =  @"Driver={Microsoft Text Driver (*.txt; *.csv)};" +
                            string.Format(@"Dbq={0};", filePath) +
                            @"Extensions=csv;MaxScanRows=0";

    var connection = new OdbcConnection(connectionString);
    return connection;
}

using(var connection = GetConnection(filePath))
{
    connection.Open();

    using(var command = new OdbcCommand("SELECT * FROM data.csv", connection))
    {
        using(var reader = command.ExecuteReader())
        {
            // Do stuff with reader
        }
    }
}

このアプローチの短所は、少し複雑で、ドキュメントがMicrosoft Text Driverひどいことであり、Jet に依存していDataReaderますが、データの消費をはるかに簡単にすることができる を生成します。

于 2013-04-03T16:31:41.090 に答える