VB 2010阵列/写入数组到文件

时间:2011-12-03 07:13:24

标签: vb.net arrays

我接近让它工作,但目前无法在列表框中显示任何输出。我有它工作,但需要移动一些东西才能使连接功能起作用。

在我的程序中,用户将输入输入到文本框中,并根据键入的内容在列表框中显示数组。例如,如果他们键入“a”,则所有食物(在连接到的文本文件中)将显示以“a”开头的程序。

当有输出时,我需要找到一种方法来命名这个数组(根据用户输入的内容创建)并加入列表框中的所有项目(例如:食物堆叠在一起列表框将在底部显示为字符串)。

我发布了迄今为止的代码;我得到的所有错误(可能是我的逻辑错误)都在第一个公共类中,直到第一个if-next语句结束:

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

1 个答案:

答案 0 :(得分:0)

你需要在dictionary或类似的地方保存listfoods函数的结果,如果你想'命名'它就把它与一个键关联起来,虽然不清楚为什么你需要这样做

至于列出以特定字母开头的食物,你只需要迭代你的函数listfoods的结果,并用逗号分隔每一个不是吗?

你现在拥有的东西会创建许多食物清单,因为你得到的食物清单以每种食物的特定字母开头。据我所知,这个问题你只需要做一次。

示例:

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

如果您可以看到实际值与逻辑预期的不同之处,那么您可能会逐步浏览代码并查看每个位置的变量值并将其与您期望看到的值进行比较。可以开始确定问题所在