2011-12-03 9 views
0

私はこれに近いですが、現在はリストボックスに表示する出力を得ることができません。私はそれが働いていたが、いくつかのことを動かして結合機能を働かせる必要があった。VB 2010の配列/ファイルへの配列の書き込み

私のプログラムでは、ユーザーはテキストボックスに入力を入力し、入力した内容に基づいてリストボックスに配列が表示されます。たとえば、「a」と入力すると、プログラムに接続されている)が表示されます。

出力がある場合、この配列に名前を付けて(ユーザーが入力したものに基づいて作成されます)、リストボックス内のすべての項目を結合する方法を見つける必要があります(例:リストボックスは下部に文字列として表示されます)。

私はこれまでのコードを投稿しています。私が取得(および潜在的に私のロジックエラー)していたエラーのすべての最初の場合は、次の文の終わりまで、ちょうど最初のパブリック・クラスである:あなたはlistfoodsの結果を保存する必要が

Public Class frmFoods 
Dim foods() As String = IO.File.ReadAllLines("foods.txt") 


Private Sub btnDisplay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplay.Click 

    Dim Letter As String = txtLetter.Text.ToUpper 
    Dim smallerarray() As Array 
    Dim userarray As String 
    lstOutput.Items.Clear() 
    If IsNumeric(txtLetter.Text) = False Then 
     For Each food As String In foods 
      smallerarray = listfoods(Letter) 
      lstOutput.Items.Add(Letter) 
      userarray = Join(smallerarray, ", ") 
      lstOutput.Items.Add(userarray) 
     Next 
    ElseIf IsNumeric(txtLetter.Text) = True Then 
     MessageBox.Show("Please enter a letter.") 
    Else 
     MessageBox.Show("The text box is empty") 
    End If 
End Sub 

Function listfoods(ByVal letter As String) As String() 
    Dim foodarray(foods.Count - 1) As String 
    Dim counter As Integer = 0 
    For Each food As String In foods 
     If food.StartsWith(letter) Then 
      foodarray(counter) = food 
      counter += 1 
     End If 
    Next 
    ReDim Preserve foodarray(counter - 1) 
    Return foodarray 
End Function 

答えて

0

機能をdictionaryまたはそれに類するものにして、名前を付けたい場合はキーに関連付けますが、その理由を明確にしていません。

特定の文字で始まる食品のリストについては、関数のリストフードの結果を繰り返し、それぞれカンマで区切りますか?

あなたは今、各食品の特定の手紙で始まる食品のリストを取得すると、各食品の多くのリストを作成します。私はあなたが一度だけそれを行う必要がある質問を理解する。

例:

Private Sub btnDisplay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplay.Click 

    Dim Letter As String = txtLetter.Text.ToUpper 
    Dim smallerarray() As Array 
    Dim userarray As String 
    lstOutput.Items.Clear() 
    If IsNumeric(txtLetter.Text) = False Then 
     'get all items from the file which begin with the letter the user chose 
     smallerarray = listfoods(Letter) 
     'add that letter to the output listbox 
     lstOutput.Items.Add(Letter) 
     'join all of the elements which begin with that letter 
     'into a single comma separated string 
     userarray = Join(smallerarray, ", ") 
     'add that string to the output 
     lstOutput.Items.Add(userarray) 
    ElseIf IsNumeric(txtLetter.Text) = True Then 
     MessageBox.Show("Please enter a letter.") 
    Else 
     MessageBox.Show("The text box is empty") 
    End If 
End Sub 

あなたがコードをステップ実行し、各場所での変数の値を確認し、あなたが見ることができるかどうかを確認するために何を期待して、これを比較することは、おそらく有用であろう場所実際の値は論理的に予想される値とは異なりますので、問題がどこにあるかを特定することができます

+0

ありがとうございました。あなたの質問に答えるためには、私のプログラムの別の部分では、新しい配列をテキストファイルに書き込まなければならないので、ユーザが作成した新しい配列に名前を付ける必要があります。あなたの応答コードを私のプログラムに追加しました。下の行があります。 smallarry = listfoods(Letter) エラーメッセージは次のように表示されます: '1次元配列の文字列を' 1次元配列に変換できませんSystem.Array 'から' String 'が派生していないためです。 私はプログラムをステップ実行しようとしましたが、エラーのためにどこにブレークポイントを設定するのか分かりません。 – user1078714

関連する問題