For Each ...下一个帮助VB.NET

时间:2013-04-07 19:01:13

标签: vb.net foreach

因此。我使用ASCII值(数字)并将它们转换为ASCII字符(字母和符号)。我设法提出了一些东西,但在使用For Each时...接下来,它将每个数字分开。例如,如果我输入82(对应于R),我会得到对应于8的任何内容以及对应于2的任何内容。是否有人指出如果数字之间没有空格,那么它是一个单号?或者只是一种方式来读取数字,而不是单个数字。

这是一些代码。我不应该使用Char数据类型吗?正如我所假设的那样,它一次转换1位数。虽然当我尝试任何其他数据类型时,我收到一些关于它不是集合类型的错误。

    Dim rtb As String
    rtb = Rich.Text1
    For Each num As Char In rtb
        'Conversion stuff goes here
    Next num

4 个答案:

答案 0 :(得分:1)

让我们分析一下这里发生的事情:

For Each num As Char In rtb

由于rtbString,而String实现IEnumerable<Char>,上面基本上就是说 - 对于字符串中的每个字符 - 这不是你想要的

您需要先将字符串拆分为各自代表数字的组 - 例如:

Dim numbers As String() = rtb.Split(" ")

然后,您可以迭代列表并将每个字符串(这些仍然是字符串)转换为实际数字,您需要将其转换为字符:

For Each num As String In numbers
   ' num can be "82", for instance
Next num

答案 1 :(得分:0)

做这样的事情:

Dim rtb As String = Nothing
rtb = "82 40 30"

For Each num As var In rtb.Split(" "C)
Next

当然,如果您想使用其他字符拆分数字,只需将“C”替换为您需要的

答案 2 :(得分:0)

你不是在迭代数字,而是在迭代单个字符。您没有告诉我们输入中的数字是如何分开的,但为了便于讨论,我们假设您使用的是空格。我们可以使用String.Split从流中获取单个数字:

Dim rtb As String = "82 23 47 123"
Dim Ascii = System.Text.Encoding.ASCII

For each numToken As String In rtb.Split(" "c)
    Dim num As Byte
    If Not Byte.TryParse(numToken, num)
        ' Signal error
        Exit For
    End If

    Dim buffer As Char() = Ascii.GetChars(New Byte() { num })
    Dim result As Char = buffer(0)
    ' Do something with `result`
Next

重要一点:我使用System.Text.Encoding类来进行ASCII码和字符之间的映射。这似乎不必要地复杂,但想要这样做。令人遗憾的是,编码 非常复杂,否则使用本土的ad-hoc转换会产生相反的效果。特别是,使用Chr 是合适的,因为它实际上不处理ASCII,它处理类似但不相同的Unicode代码点(有一些限制)。在上面的代码中使用Chr会产生误导,从而成为一种可靠的方法,可以在未来的路上引入错误。记录您的假设很重要,如果您的假设是输入由ASCII组成,那么转换代码应该反映出来。

答案 3 :(得分:0)

每个字符使用三位数字。大多数小写字母无论如何都是三位数。