0

「M」を「Mr.」に切り替えようとしています。「F」から「Ms.」リストボックスで姓が選択されている場合。最初の名前をクリックすると機能しましたが、別の名前をクリックすると、次のエラー メッセージが表示されました。

--追加情報: インデックスが配列の範囲外でした.--

テキスト ファイルの情報は次のようになります。

       Ball,Krystal,F,1981
       Banks,Robin,F,1988
       Burgher,Hamilton,M,1980
       Early,Brighton,M,1989
       Hedd,MT,M,1960
       Hogg,Ima,F,1953
       Knapp,Anita,F,1970
       Overnout,Roger,M,1968
       Psito,Arnie,M,1962
       Teak,Anne,F,1939

私のコードは次のとおりです。

    Private Sub btnEnter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnter.Click
    Dim names As IO.StreamReader = IO.File.OpenText("Info.txt")
    Dim lName As String = lstNames.Text
    Dim line As String
    Dim gender As String
    Dim foundFlag As Boolean = False
    Do Until foundFlag Or names.EndOfStream
        line = names.ReadLine
        If line.Split(","c)(2) = "M" Then
            gender = "Mr. "
        ElseIf line.Split(","c)(2) = "F" Then
            gender = "Ms. "
        End If
        If line.Split(","c)(0) = lName Then
            txtOutput.Text = gender & line.Split(","c)(1) & " " & line.Split(","c)(0) & " is " & 2012 - line.Split(","c)(3)
            foundFlag = True
        End If
    Loop

End Sub

誰かが何が悪いのか教えてください。前もって感謝します。

4

1 に答える 1

0

ここにあるのとまったく同じようにアプリケーションを再作成しましたが、問題なく動作しました。

これにより、次の 2 つのいずれかが起こっていると考えられます。

  1. ファイルに不適切な文字が含まれていInfo.txtます
  2. lstNamesにあるものと同じ名前をコンボボックスに入力していませんInfo.txt

PS - ループをより効率的にするために、ループを調べることもできます。

    Dim line() As String
    Dim gender As String
    Dim foundFlag As Boolean = False
    Do Until foundFlag Or names.EndOfStream
        line = names.ReadLine.Split(","c)

        If line(0) = lName Then
            If line(2) = "M" Then
                gender = "Mr. "
            ElseIf line(2) = "F" Then
                gender = "Ms. "
            End If
            txtOutput.Text = gender & line(1) & " " & line(0) & " is " & 2012 - cint(line(3))
            foundFlag = True
        End If
    Loop
于 2012-11-14T19:00:14.387 に答える