none
数値データの読み込みについて RRS feed

  • 質問

  • はじめまして、お世話になります。KOZHOです。

    VB6で、テキストファイルの数値データを読み込む下記のようなコードがあります。

    -----------------------------------------------------

    Open FileToOpen For Input As #1

    INPUT #1 A1,B1,C1

    -----------------------------------------------------

    これをVisual Basic 2005にポーティングしたいのですが、下記のような問題があり、簡単に移行する方法がわかりません。

    1) 読み込み対象のデータは、スペース区切りのデータであるが、スペースの数が決まっていない。たとえば

                    1.0<space>2.0<space>3.0<改行>

                     4.0<space><space>5.0<spaca>6.0<改行>

    のようになっています。

    2)VB2005のInput関数は複数の変数が読み込めない

    1行ごとにstringで読み込み、変数を分離するコードを書けば解決するとは思うのですが、もっと簡単に解決する方法はないかと思い、何か良い案をお教え願えれば幸いです。

                   

    2006年8月18日 1:12

すべての返信

  • 1行ごと呼んで分離するのが早いと思いますよ。

    まま、Spaceの数が固定ならSplit関数で配列にしてしまうという手もありますが、可変なら結局判定が必要ですからそのほうが早いと思いますよ。

    2006年8月18日 4:30
  •  ひろえむ さんからの引用
    Spaceの数が固定ならSplit関数で配列にしてしまうという手もありますが、可変なら結局判定が必要ですからそのほうが早いと思いますよ。

    連続した区切り文字 (今回の場合は space) を 1つの区切りとみなす、 という分割方法が、 .NET Framework 2.0 の Split メソッドではサポートされています。
      → MSDN ライブラリ: .NET Framework クラス ライブラリ: String.Split メソッド (Char[], StringSplitOptions)
    これで上手くできないかな? 

     KOZHO さんからの引用
    2)VB2005のInput関数は複数の変数が読み込めない

    その代わり、 なのでしょうか。 Microsoft.VisualBasic.FileIO 名前空間に、 .NET Framework 2.0  から TextFieldParser クラスなどが用意されています。
      → MSDN ライブラリ: Visual Basic 言語リファレンス: TextFieldParser オブジェクト 
    こちらには残念ながら、 連続した区切り文字を 1つの区切りとみなしてくれる機能は、 無さそうです。

    2006年8月21日 2:16
  • KOZHO さん、こんにちは。

     KOZHO さんからの引用
    読み込み対象のデータは、スペース区切りのデータであるが、スペースの数が決まっていない。

    それにしても、妙なファイル設計ですね。

    本当にスペース区切りなのでしょうか?
    Tab 区切りであったり、
    固定長だったりしませんか?

    というより、私は 「固定長」 なのではないかと疑ってしまっているわけですが...
    でないと、納得できないわけで...

    固定長の場合は、項目が埋まっている場合はスペースが入らないので、
    通常、何文字目から何文字目というのを定義して取り出します。

    2006年8月21日 3:48
  •  お返事が送れて申し訳ありません。KOZHOです。

    ご指摘のとおり、判別するルーチンを作成しました。

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

    2006年9月7日 13:09
  •  KOZHOです。

     ご指摘のとおり妙なファイルです。というか、もともとFORTRANの並びで読み込むプログラムのデータが過去の資産として残っていて、これがエラーを起こさないので、固定でなく気ままに作成されているためです。

     初めからきっちり作っていればこんなことは無いのですが...................

    2006年9月7日 13:14
  • 外池と申します。すでに解決されているようですから、ごく参考までに・・・

    スペースを区切りとしてsplitした後、trimすればよろしいかと。あるいは、数値型のparseもそのまま読んでくれそうな気がします。

    2006年9月29日 7:50