• ベストアンサー

ランダムアクセスファイルの扱い方

VB2005です。(以前はVB6で開発していました。) 文字列(VB6で 「test as string * 5」 などとしていたもの)を任意のレコードに保存、読込、変更などをしようとしています。 VB6ではうまくできたものが、VB2005になったとたん、まったくVB6での知識が通用せず困っています。ヘルプを読んでみたものの「2 バイトの記述子」やらなんやらとわけのわからないことばかりで、行き詰まりました。 VB6で type test test1 as string * 5 test2 as string * 5 test3 as string *5 end type と定義していたものを、VB2005でレコード番号を指定して書込、読込などをするにはどのようにすればよいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

VB2005では 固定文字列の宣言方法が変わりました VBFixedString属性をつけて宣言しないと固定文字列にはなりません Structure Test <VBFixedString(5)> dim s1 as String <VBFixedString(5)> dim s1 as String <VBFixedString(5)> dim s1 as String End Structure といった具合に構造体を宣言します 読み取りイベントにおいて dim objTest as new Test dim ff as Integer = FreeFile() FileOpen( ff, "ファイルパス", OpenMode.Ramdom, OpenAccess.Read) FileGet( ff, objTest, レコード番号) FileClose(ff) といった具合で 読み込みできると思います # 付属のMSDNの VisualBasic   Visual Basic 6.0ユーザー向けヘルプ     言語の変更点       プログラミング要素のサポートに関する変更の概要 辺りを熟読してみましょう

xiaolong_goo
質問者

お礼

試してみた結果、書込みはできたのですが、読込の時にFileGet( ff, objTest, レコード番号)のところで「objTestの値をstringに変換できません。」というエラーが発生しました。 ヘルプを確認したところ、エラーを解消するには・・・ ●式のデータ型が変換先のデータ型に変換できるものであることを確認します。(私の考え->全部stringで宣言した変数しか使っていないのになぜ?) ●<type2> が配列の場合は、New 句で型名の後にかっこと中かっこの両方を指定します。次のコードは、配列の正しい初期化方法を示します。 (私の考え->配列ではないし、これとは違う・・・) と書いてあったのですが、この意味すら理解できない状況です。

xiaolong_goo
質問者

補足

ありがとうございます。よく読んでみたつもりなのですが、馬鹿なものでいろいろと理解に苦しんでいます。 取り合えづ教えていただいたコードも参考しながら少し考えてみたいと思います。

その他の回答 (1)

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.1

具体的にどこが分からないのでしょう? > VB6での知識が通用せず > ヘルプを読んでみたものの「2 バイトの記述子」やらなんやらとわけのわからないことばかりで、行き詰まりました。 「2 バイトの記述子」に関する記述は、VB6でもありましたよ・・・ つまり、「VB6の知識」ですけど・・・ 例えば、以下は「VB6のヘルプ」の「Get ステートメント」からの抜粋です。 ---------------------------------------------------------- ユーザー定義型の要素でない可変長文字列を使う場合、 Get ステートメントはデータ長を示す 2 バイトの記述子を認識せずに 文字列変数の持つ値の文字数と同じバイト数を読み込みます。 ----------------------------------------------------------

xiaolong_goo
質問者

お礼

dsuekichiさん、redfox63さん、お騒がせいたしましたがいろいろ試した結果うまくできました。 ありがとうございました。

xiaolong_goo
質問者

補足

え?・・・ VB6の時にはまったく意識していませんでした・・・ VB6では、ほとんど昔のBASICの知識と、本やネットでのサンプルコードだけでなんとかしていたので、まったく初耳でした・・お粗末でごめんなさい。もう少し考えて見ます。

関連するQ&A