• ベストアンサー

ファイル読み込みと構造体について

Q1 VB始めたばかりの超初心者です。クイズゲームを作成したく、構造体を用意したいのですが、同じ構造体を100個用意したい場合どのように宣言するのでしょうか? Public Type mondai_REC Question As String * 100 choice(5) As String * 30 justness(3) As Byte End Type ↑の構造体を100個用意したいのです。 また100個用意して、その中のchoice()を参照したい場合どのように使うのでしょうか? Q2 テキストファイルを読み込み、この構造体に格納したいと考えてます。ファイルをオープン・クローズドする、任意の文字(たとえば”。”)がみつかめまで読み込むなど、固定長でない文字列の入ったファイルを読み込むのに便利な関数を教えてください。 よろしくお願いいたします。

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

  • ベストアンサー
  • ackapapa
  • ベストアンサー率44% (8/18)
回答No.1

Q1 dim mondais(100) as mondai_REC mondais(0).choice(0) = "mondai" Q2 「ファイル読み込み時に、特定の文字が見つかるまで読み込む」 という形式はVBでは向いていません。 VBはCのようにポインタを当ててその構造体のまま 格納することは(たぶん)出来ません。 ファイルの形式を決め それにそって全て読み込み それから識別して必要な情報を格納するしかないかと思われます。 >>固定長でない文字列の入ったファイルを読み込むのに便利な関数 line input が良いかと思います。 それからinstrなど使って任意の文字で区切れば良いかと思います。

参考URL:
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_k04.htm
takimon
質問者

お礼

おおっ、できました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • StarLibra
  • ベストアンサー率54% (6/11)
回答No.2

Q1についてはお答えがあがっているので、Q2について補足します。 ファイル全体を読み込んだ後、任意の文字(たとえば”。”)でsplitして配列に格納すれば区切り文字単位で文字列が格納された配列が出来ます。 (例)ファイル全体をstrに読み込んだとして… str = "あいうえお。かきくけこ。さしすせそ。" Dim rows() as String rows = split(str,"。") rows(0)→"あいうえお" rows(1)→"かきくけこ" rows(2)→"さしすせそ" となります。

takimon
質問者

お礼

このsplitは使えそうです。 親切にありがとうございました。 皆さんのお陰で、少しずつ完成に近づいてます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 構造体のコピー

    VB6ですが、構造体のコピーは正しくできるのでしょうか type a test1(0 to 5) as byte test2 as integer test3 as string end type dim b1 as a dim c1 as a b1.test = 2 c1 = b1 私はここで、c1.test2が0だった

  • バイト配列の構造体変換について

    TCPの通信アプリケーションをて作成しています。 Recvbuff(1024) as byte と定義した変数に受信したデータを格納し以下のような構造体に格納 したいのです。 構造体A id as integer Usercode as string Username as string Filename as string このとき、共用体のような使いかたはVBではできないようなので すが、このような場合 整数なら「Recvbuff(1) * 256 + Recvbuff(0)」のように計算する。  文字列なら必要な文字のみ切り取ってGetStringで変換する。 といった方法しかないのでしょうか。 環境は VS2008 VB.NET です。

  • VBA 構造体の値参照

    いつもお世話になっています。 Access VBAにて構造体を作成し、その値をループで渡したいのですが、ご存知の方おられましたら、お助けください。 (例) Private Type HD_REC ID as string * 2 Name as string * 10 Lev as string * 50 End Type Function SetData() Dim rs As RecordSet Set rs = CurrentDB.OpenRecordSet("XXXXXXXX") While Not rs.EOF rs.Fields(i) = 'ここに構造体のID,Name,Levを渡したいのです。 i=i+1 Wend End Function よろしくお願いします。

  • ファイル入力のデータを構造体に入れる方法

    VB.net(XP:VS2008のみフルインストール)にて テキストファイルから入力したデータを構造体st_testに入れたいと考えているのですが、実現できません。 どなたか、お力添えをお願いします。 テキストファイルは、事前に構造体(st_test)に値を入れ、 単純にFileOpen→OutPutしています。 (","や" "などでメンバ毎に分割等はしておりません。) 構造体 ---------------------- Public Structure st_test <VBFixedArray(63), MarshalAs(UnmanagedType.ByValArray, SizeConst:=64)> _ Dim A() As Byte Dim B As Integer <VBFixedArray(7), MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> _ Dim N() As Byte <VBFixedArray((7), (11)), MarshalAs(UnmanagedType.ByValArray, SizeConst:=(72))> _ Dim S(,) As Byte <VBFixedArray(11), MarshalAs(UnmanagedType.ByValArray, SizeConst:=12)> _ Dim U() As Integer End Structure ---------------------- 実現しようとしている個所 ---------------------- Dim t As String Dim temp(2) as st_test FileOpen(1, "test1.txt", OpenMode.Input) Input(FileNum, t) '''temp(0) = CType(CType(t, Object), st_test)...? temp(0) = CType(t, st_test) | FileOpen(1, "test2.txt", OpenMode.Input) Input(FileNum, t) temp(1) = CType(t, st_test) ---------------------- 上記の様に処理を行えば簡単にできるのかと安易な発想でいましたが、 CTypeの処理で'String'の値を'st_test'に変換できません。 旨のエラーになり、うまく実現することができません。 そもそもString型のデータをst_testにキャストすることが不可能なのでしょうか? それともただ、実現方法がカスなのでしょうか? 実際の構造体のサイズは4000Byteを超え(メンバ数も多いです。。。) 一つ一つ入力していくことが現実的に不可能なため ファイルよりInputすることしか思いついておりません。 test1.txtの中身を秀丸で開いてみました。 参考になれば・・・。 改行はなく、"福岡"の後等にそれぞれ空白があります。 -------------------------- 福岡 . A1 14 15 16 17 18 19 XX XX XX XX XX XX -------------------------- 宜しくお願いします。

  • バイナリ→構造体

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=1087139 の続きです。仕様の都合でMoveMemoryを使って構造体をファイルマッピングできないため、一度文字列にして…と考えていたんですが、どうも文字列にすると別な問題が出るようなのでLong型のポインタにしたいと思ってます。  何故Longかと言うとこれも仕様の都合なので…Byte配列にとは出来ないんですが…同じ、ですよね?  蛇足が長々と続きましたが、本題は… 1、VarPtrを使ってLong型のポインタに変換(してると思ってます) 2、それを別の構造体に格納、その構造体を共有メモリに移す。 3、別ウインドウから取り出し、最初のLongのポインタを引き抜く 4、Long型ポインタから構造体に戻す  となれば完成で、3までは進めるのですが…最後の4ができません。  ここから再び蛇足ですが、そもそも何故こんな面倒な事を?といいますと、共有メモリを扱うOCXを作る必要がありまして、さらに受け取ったデータをCue構造にしなければならないのです。その辺りを操作してるのが2つ目の構造体です。1と4はOCXを扱う側、2と3はOCX内で行ってます。  出来れば全部OCX内で出来るといいなーとは思ってますが…すいません、本当に蛇足でした。

  • 命名規則 VB 構造体

    VBの構造体の命名はどうすればいいですか? strXXX as string intYYY as integer ???ZZZ as 構造体 udtZZZ as 構造体 でいいのでしょうか? ユーザー定義型ということでいいのでしょうか?

  • 構造体のソートに関して

    VB初心者です。 Private Save() As InIDtyp Private Type InIDtyp ID As String Name As String Unit As String End Type という宣言をしま構造体で値が入っているときにIDをキーとしてソートすることは可能でしょうか。 1回やってみたのですが、IDのみソートされてしまい、NameとUnitは一緒にソートされずにそのまま残ってしまいました。 デバッグをかけて中を見ましたらこんな感じでした。 例: 元の構造体 Save(0) ------ID:  56 ------Name: AA ------Unit: ms Save(1) ------ID:  35 ------Name: KY ------Unit: yy Save(2) -----ID:  33 ------Name: LI ------Unit: ba ソート後 Save(0) -----ID:  33 ------Name: AA ------Unit: ms Save(1) -----ID:  35 ------Name: KY ------Unit: yy Save(2) -----ID:  56 ------Name: LI ------Unit: ba どなたか構造体のソートのやり方をご存知の方がいましたらご教授お願いします。

  • 構造体変数の参照方法について

    ----------------------------------- Private Type DATA str1 As String str2 As String End Type Dim A as DATA MsgBox A.str1 ----------------------------------- 構造体を参照するときはこのようなやり方がポピュラーだと思うのですが、 ---------- tmp="str1" A.tmp ---------- だとか ---------- A.item(1) ---------- など、別の参照方法はあるのでしょうか? よろしくお願いします。

  • 構造体配列の一部初期化!!!

    はじめまして@ 今、下のような構造体があるとします。 ----------------------------------------------- Type TableColumn  sName As String  sKana As String End Type Type a_2  C(100) as TableColumn End Type Type a_1  B(3) as a_2 End Type global A(5) as a_1 ----------------------------------------------- ちなみに図で表すとこんな感じです。 A(5) |-B(3)  |-C(100)   |-sName   |-sKana このとき、この構造体の配列を初期化するときは普通でしたら、  Erase A とやることによってすべての配列の中身が初期化されると思うのですが、 今回は一部を消去したいのです。 たとえば、A(0).B(0)以下の中身は初期化しないで、A(0).B(1)以下は初期化する、といった感じです。 何か良い方法がありましたらぜひご教授お願いいたします。 よろしくお願いします。

  • 構造体→文字列→構造体 をする方法

    VB6.0の話です。  不特定の構造体を文字列(String)に格納し、これを最初の構造体に戻す事はできませんか?  具体的には「共有メモリを使い構造体を文字列にして格納>別ウインドウで文字列を取得して構造体に戻す」と言う事をやりたいんです。  共有メモリに不特定の構造体をいれる方法でもいいんですが…VALIANTだとサイズが大きすぎて実用性がありませんし、違う主旨の質問をするのも良くないので回答はあくまで「構造体→文字列→構造体 をする方法」と言う事でお願いします。