プロシージャレベルからクラスレベルへ

タグの編集
投稿者 hitochan  (高校生) 投稿日時 2009/5/21 07:25:39
こんばんわ。hitochanといいます。

早速ですが、今英単ゲームをつくっています。

その中で、まずはじめに単語データが管理してある「eitan.txt」からIO.Streamreaderクラスを用いて単語数を取得します。インスタンスの名前はreaderです。

---------eitan.txtの中身(まだ実験途中なのでここに書かれている単語は適当です。)-------------------------

食べる
eat
する
do
時計
clock
眠る
sleep
二酸化炭素
carbon dioxide
       ・
    ・
    ・
(以下略)

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

単語数の取得は今の僕の技術では、
Do
     reader.readline()
     reader.readline() '二回readlineを使っているのは二行で一組と見なすため。
   number + = 1 'Dim number as integerで宣言した。単語数を表す変数。
loop Until reader.EndOfStream

という具合に取得しています。(フォームのLoadイベントの先頭に記述)
この変数numberを利用して多次元配列tango(number-1,1)をクラスレベルで宣言したいのですが、
どう考えても僕の技術ではプロシージャレベルでの宣言しかできません。
プロシージャレベルの変数をクラスレベルに変更する方法があれば教えていただきたいのですが。
異なる方法で構いません。

多次元配列tango(number-1,1)はたとえば、tango(2,0)ならば2組目の単語の日本語を表し、
tango(2,1)ならば2組目の単語の英語を表します。

Express Edition 2008を使っています。

よろしくお願いします。

投稿者 neptune  (社会人) 投稿日時 2009/5/21 07:58:17
簡単な例ですが、こんな感じ??でもいけそう。
ArrayListに構造体を収めている為ArrayListのCountプロパティで要素数は取れます。
例外処理はしてません。


Public Class Form1

    Private Structure Words
        Public jan As String
        Public eng As String
    End Structure


    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
        Const sPath As String = "ファイルのパス"
        Dim reader As New System.IO.StreamReader(sPath, System.Text.Encoding.Default)
        Dim ary As ArrayList = New ArrayList()

        Do
            Dim wd As Words
            Dim buf1 As String = reader.ReadLine()
            wd.jan = buf1
            Dim buf2 As String = reader.ReadLine() '二回readlineを使っているのは二行で一組と見なすため。 
            wd.eng = buf2
            ary.Add(wd)
        Loop Until reader.EndOfStream
        reader.Close()

    End Sub
End Class
投稿者 hitochan  (高校生) 投稿日時 2009/5/21 08:50:50
返答ありがとうございます!


arraylistに構造体を入れることなんてやったことありませんでした。
この方法ならCountプロパティで簡単に要素数を取得できるのいいですね!

採用させていただきます。

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