0

人々が助けてくれることを願っています!

区切り記号として , を使用して区切られたテキスト ファイルからの情報で満たされたコンボ ボックスを作成しようとしています。IE

objecta,grad,N,words,5,moretext

の間のさまざまな領域が必要です。整数/ブール値/文字列..しかし、これを適切に機能させるためのコードを取得するのに問題があります

Web を検索したところ、このコードが見つかりましたが、適切に機能していません。多分私は愚かですが、誰かが私を助けてくれることを願っています. インターネットの達人よ、助けて!

Public Sub meritlist()
    Dim looksups As New ArrayList
    ' This call is required by the Windows Form Designer.
    InitializeComponent()

    Dim rdr As IO.StreamReader = IO.File.OpenText(c:merits.txt")
    While Not rdr.EndOfStream
        Dim line As String = rdr.ReadLine()

        'Split the line by a comma:
        Dim arrayList = line.Split(",")

        'Get the right values: break down is as: Merit Name,Type,Shared,Carthan,Max,Pre-Req
        Dim meritname As Integer = arrayList(0)
        Dim merittype As String = arrayList(1)
        Dim meritshared As Boolean = arrayList(2)
        Dim carthan As String = arrayList(3)
        Dim meritmax As Integer = arrayList(4)
        Dim prereq As String = arrayList(5)

        cmoMRDro.Items.Add(New lookups(arrayList(0), arrayList(1)))

    End While
    rdr.Close()
End Sub
4

1 に答える 1

1

私が提案する4つのことがあります。

  1. クラスを使用TextFieldParserして、区切り/固定幅のテキスト ファイルを読み取ります。彼らはこの仕事をより専門的に行っており、それを適切に処理するためのコードをすでに持っています。

  2. への呼び出しInitializeComponentは必要ありません。

  3. 生の変数ではなく、明細項目を格納するための構造体/クラスを作成します。このようにして、より組織化された方法でそれを取得します。

  4. 代わりListに、その構造/クラスを使用するArrayList

あなたがすでに行っていることはいくつかの変更で修正できますが、上記のすべての提案を維持して、この方法で修正したでしょう. したがって、この後、それがどれほど簡単になるかがわかります。

Structure MeritListType
    Dim meritname As Integer
    Dim merittype As String
    Dim meritshared As Boolean
    Dim carthan As String
    Dim meritmax As Integer
    Dim prereq As String

    Public Sub New(ByVal data() As String)
        meritname = Integer.Parse(data(0))
        merittype = data(1)
        meritshared = Boolean.Parse(data(2))
        carthan = data(3)
        meritmax = Integer.Parse(data(4))
        prereq = data(5)
    End Sub
End Structure

Public Sub MeritList()
    Dim FileData As New List(Of MeritListType)
    Dim tfp As New FileIO.TextFieldParser("c:\merits.txt")
    tfp.TextFieldType = FileIO.FieldType.Delimited
    tfp.SetDelimiters(",")
    While Not tfp.EndOfData
        FileData.Add(New MeritListType(tfp.ReadFields))
    End While
    tfp.Close()

    '' you have the records in FileData
    '' do whaever you want to do with it here now

End Sub
于 2012-07-12T10:10:13.753 に答える