none
CSVファイル(もしくはXLSファイル)からのデータ抽出 RRS feed

  • 質問

  • VB初心者です。

     

    CSVファイル(もしくはXLSファイル)の任意の行、列からデータを抽出し、

    フォーム上に表示させたいのですが、

    データ抽出方法が分かりません。

    (例えば、あるCSVファイルの4行目、2列目の文字列"切削機"を抽出し、Label1に表示、

    5行目、5列目の数字"32"を抽出し、Label2に表示、させるようにしたい)

     

    データベース、データセット、テーブルアダプターを作成して、

    そこからデータを抽出し、フォームに読み出す事は出来るのですが、

    データベースは管理に不便なため避けたいのです。

     

    VBでどのように記述すればよいでしょうか、

    ご教授下さい。

     

    2008年2月3日 9:05

回答

  • CSVなら、自力で読み込むことでどうにでもできると思います。

    Googleあたりで検索してみるとかどうでしょうか?

     

    http://www.google.co.jp/search?hl=ja&q=CSV+%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF+VB.NET&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja

    2008年2月3日 9:58
    モデレータ
  • GOMBU さん、こんにちは
    ダッチです。

     

    .NET Framework 2.0 以降をお使いでしたら TextFieldParser クラスを使用すれば、
    簡単に CSV を扱う事ができます。

     

    TextFieldParser.ReadFields メソッドで一行単位にファイルを読み込んでいきます。
    読み込んだ値は TextFieldParser.SetDelimiters プロパティに指定した区切り文字(通常はカンマ)で分割された文字列の配列が取得されます。

     

    何列目の値が欲しいのであれば、取得した文字列の配列の何要素目を見るなどすれば可能です。
    何行目の値が欲しいのであれば、ReadFields メソッドを何回実行したり、
    または、あらかじめ全行をコレクションに読み込んでおいてから、コレクションの何要素目を見るなどすれば可能です。

     

    TextFieldParser クラスを扱うのに参考になる記事がありますので紹介します。

        CSVファイルを読み込むには?[2.0のみ、C#、VB]
        http://www.atmarkit.co.jp/fdotnet/dotnettips/487csvparser/csvparser.html

     

    2008年2月3日 11:40
  • 環境がわかりませんが、Visual Studio 2008をお使いでしたらLINQが使えます。以下が参考になります。

    C#なんですが・・・

     

    方法 : CSV テキスト ファイルの列値の計算 (LINQ)
    http://msdn2.microsoft.com/ja-jp/library/bb882644.aspx

    2008年2月3日 14:11
    モデレータ
  •  GOMBU さんからの引用
    型 'TextFieldParser' が定義されていません。というエラーが出ます。
    何か事前に別の処理が必要なのでしょうか?

    これは名前空間がインポートされていないせいです。

    TextFieldParser クラスの名前空間は 「Microsoft.VisualBasic.FileIO」 です。

     

    Microsoft.VisualBasic.FileIO 名前空間をインポートするか

    Microsoft.VisualBasic.FileIO.TextFieldParser のよう完全修飾名で型を指定してください。

     

    また同じようなエラーメッセージが表示されたら オブジェクト ブラウザで検索してみてください。

    完全修飾名がすぐにわかると思います。

     

    オブジェクト ブラウザは [表示]メニューにあります。

    2008年2月9日 12:26

すべての返信

  • CSVなら、自力で読み込むことでどうにでもできると思います。

    Googleあたりで検索してみるとかどうでしょうか?

     

    http://www.google.co.jp/search?hl=ja&q=CSV+%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF+VB.NET&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja

    2008年2月3日 9:58
    モデレータ
  • GOMBU さん、こんにちは
    ダッチです。

     

    .NET Framework 2.0 以降をお使いでしたら TextFieldParser クラスを使用すれば、
    簡単に CSV を扱う事ができます。

     

    TextFieldParser.ReadFields メソッドで一行単位にファイルを読み込んでいきます。
    読み込んだ値は TextFieldParser.SetDelimiters プロパティに指定した区切り文字(通常はカンマ)で分割された文字列の配列が取得されます。

     

    何列目の値が欲しいのであれば、取得した文字列の配列の何要素目を見るなどすれば可能です。
    何行目の値が欲しいのであれば、ReadFields メソッドを何回実行したり、
    または、あらかじめ全行をコレクションに読み込んでおいてから、コレクションの何要素目を見るなどすれば可能です。

     

    TextFieldParser クラスを扱うのに参考になる記事がありますので紹介します。

        CSVファイルを読み込むには?[2.0のみ、C#、VB]
        http://www.atmarkit.co.jp/fdotnet/dotnettips/487csvparser/csvparser.html

     

    2008年2月3日 11:40
  • 環境がわかりませんが、Visual Studio 2008をお使いでしたらLINQが使えます。以下が参考になります。

    C#なんですが・・・

     

    方法 : CSV テキスト ファイルの列値の計算 (LINQ)
    http://msdn2.microsoft.com/ja-jp/library/bb882644.aspx

    2008年2月3日 14:11
    モデレータ
  • ダッチさん

    回答ありがとうございます。

     

    現在、

    .NET Framework 2.0

    Microsoft Visual Basic 2005

    環境なのですが、

     

        Dim parser As New TextFieldParser("text.csv", System.Text.Encoding.GetEncoding("Shift_JIS"))
      

      と入力しても、ビルド時に

     

    型 'TextFieldParser' が定義されていません。というエラーが出ます。

    何か事前に別の処理が必要なのでしょうか?
    2008年2月9日 7:24
  • trapemiyaさん

     

    回答ありがとうございます。

     

    方法 : CSV テキスト ファイルの列値の計算 (LINQ)
    http://msdn2.microsoft.com/ja-jp/library/bb882644.aspx

    は今回必要としている機能ズバリなのですが、

    (今回は複数の配列から最大値を抽出するプログラムを作る必要があります)

     

    現在、

    .NET Framework 2.0

    Microsoft Visual Basic 2005

    環境なので、

    使用できません。

     

    同環境下で使用できる他の命令はないでしょうか?

    2008年2月9日 7:31
  • Azuleanさん

     

    回答ありがとうございます。

     

    csvファイルの読込できるようになりました。

    では、csvファイルの数値の中から最大値を抽出する命令はないでしょうか?

     

    環境は

    .NET Framework 2.0

    Visual Basic 2005

    です。

    2008年2月9日 7:38
  • 外池です。

     

    CSVファイルをVBで読み取れたんですよね? だったら、最大値を拾い出すプログラムを書けばよいと思うのですが・・・。

    考え方は、最大値の候補を格納しておく変数をひとつ用意して、考えうる限り最も小さい数を放り込んでおく。これを仮にMaxCandidateとしておきましょう。

     

    で、かたっぱしから読み取った数値とMaxCandidateを比較して、MaxCandidateより大きな数値と遭遇するたびに、MaxCandidateをその数値に置き換えていきます。全部比較し終わった時点で、MaxCandidateは最大値が入っています。

     

     

     

    2008年2月9日 10:29
  •  GOMBU さんからの引用
    型 'TextFieldParser' が定義されていません。というエラーが出ます。
    何か事前に別の処理が必要なのでしょうか?

    これは名前空間がインポートされていないせいです。

    TextFieldParser クラスの名前空間は 「Microsoft.VisualBasic.FileIO」 です。

     

    Microsoft.VisualBasic.FileIO 名前空間をインポートするか

    Microsoft.VisualBasic.FileIO.TextFieldParser のよう完全修飾名で型を指定してください。

     

    また同じようなエラーメッセージが表示されたら オブジェクト ブラウザで検索してみてください。

    完全修飾名がすぐにわかると思います。

     

    オブジェクト ブラウザは [表示]メニューにあります。

    2008年2月9日 12:26
  • ダッチさん

     

    御回答ありがとうございました。

     

    Microsoft.VisualBasic.FileIOをインポートし

    TextFileParserでcsvファイルを読み込む事が出来ました。

     

    ありがとうございました。

    2008年2月10日 3:43
  • 外池ですが・・・、最大値を拾い出す話は、どうなったんでしょう? 上手くいきました?

     

    2008年2月10日 4:21
  • 外池様

     

    現在プログラム作成中です。

    フォローありがとうございます。

     

    2008年2月10日 5:55