質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • C#

    7111questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C#:tsvファイルにあるデータをDataTableとして取得する。

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 863

reizouko

score 18

OLEDBを使用してtsvファイルにアクセスし、データを取得したいのですがうまくいきません。
何か別な方法、もしくはよい解決法はないでしょうか。

StackOverflowを調べてみましたが、レジストリに変更を加えるのはあまり行いたくないです。

tsvファイルの中身は
COLUMN1    COLUMN2
VAL1    VAL2
となっています。

            DataTable Table = new DataTable();

            using (OleDbConnection Connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=I:\\; Extended Properties=\"Text;HDR=Yes;Format=TabDelimited\""))
            {
                Connection.Open();

                using (OleDbCommand Command = Connection.CreateCommand())
                {
                    Command.CommandText = "select * from sample.txt";

                    using (OleDbDataAdapter Adapter = new OleDbDataAdapter(Command))
                    {
                        Adapter.Fill(Table);

                        Console.WriteLine(Table.Rows[0]["COLUMN1"]); # 列 'COLUMN1' はテーブル  に属していませんと出力される。

                    }
                }
            }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

検証した訳ではないので、できなかったらすみませんが・・・

TextFieldParser クラスを使って、その Delimiters プロパティにタブを設定したらどうでしょう?

TextFieldParser クラス
https://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.fileio.textfieldparser(v=vs.100).aspx

Delimiters プロパティにタブを設定するのが可能ならば、DataTable を作るのは以下の記事のコードのコメント「TextFieldParser を使う場合」以下のようにして可能ではないかと思います。

CSV パーサー
http://surferonwww.info/BlogEngine/post/2010/10/28/CSV-parser.aspx

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

あれこれ悩むより普通に

  • 入れ物のDataTableを生成(既存なら不要)
  • テキストファイルを開く
  • ヘッダー行読み飛ばし
  • 1行読み込み
  • 読み込んだ行をchr(9)でSplit
  • DataTableにAddRow
  • eofまでループ

するのが一番カンタンだと思いますよ

持って行き先がDataTableでなければ

var items = File.ReadAllLines("filename.txt")
    .Select(line => line.Split('\t'))
    .ToDictionary(cells => cells[0].Trim(), cells => cells[1].Trim())

みたいな感じがC#的にはクールなんでしょうか?(VB.Net使いなので細かいところは間違っているかも)
あと.ToDataTableメソッドがあったような気がするようなしないような

TextFieldParserはMicrosoft.VisualBasicを参照設定しないといけなかったはずなので、案件によっては怒られちゃいます(笑

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    C# 文字列の部分一致

    前提・実現したいこと ここに質問したいことを詳細に書いてください (例)PHP(CakePHP)で●●なシステムを作っています。   ■■な機能を実装中に以下のエラーメッセー

  • 解決済

    ローカル .mdf ファイルから DataGridViewをバインドする方法。

    さきほど 解決していただいてありがとうざいます。 今度はローカルの .mdfファイルから DataGridViewをバインドさせたいのですが… visualstud

  • 解決済

    dataGridViewを使った検索機能について

    お世話になっております。 パスワード管理するシステムの検索機能を実装しているのですが、 検索ボタンを押したときにdataGridView内に同じデータが、検索ボタンを押下し

  • 解決済

    C#(SQlite)を使い検索画面を実装中です。

    C#(SQlite)を使い検索画面を実装中です。 お世話になります。 検索画面を実装中なのですが、検索条件なしの際は、うまくいくのですが 検索条件を入れたときが結果が取れ

  • 解決済

    Dapperで取得したデータをDataTableで取得したい。

    前提・実現したいこと タイトル通りですが、マッピングしたデータをDataTableとして扱いたいと考えております。Dapperの仕様上はおそらくListのみかと思いますが方法はご

  • 解決済

    C#でMySQLを使ってSQLをエクスポートしたい

    いつも大変お世話になっております。 C#を使ってMySQLの特定のテーブルのSQLをエクスポートする機能を作ろうとしています。 テーブル内のデータを出力するのではなく、テーブル

  • 解決済

    C# WPFのDataGridにPostgreSQLのデータを表示する

    表題の件について質問です PostgreSQLのサーバーからSELECT文で読みだした結果をWPFのDataGridに表示したいと考えています。 以下のコードはSELECT文で

  • 解決済

    LINQを使用してDataTableを結合したい

    表題通り、2つのDataTableを結合したいのです。 例 DataTable1に列ABCが含まれており、DataTable2に列ABDが含まれていたとしたら、結合し列ABCDのD

同じタグがついた質問を見る

  • C#

    7111questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。