将电话号码与电话号码分开

时间:2014-05-23 00:44:20

标签: .net vb.net-2010

用户输入电话号码。我的任务是通过将国家代码与列的所有行匹配来区分国家代码"代码"在datafile" _pricelist"。代码和电话号码不能单独输入。这就是我提出的不起作用

'Separating code from Phone number'
Public Sub code_seperator()
    Dim row As DataRow
    Dim n As Integer = 0 
    For Each row In _pricelist.Rows
        If phone_number.ToString <> _pricelist.Rows(2).ToString Then
           phone_number = phone_number.Substring(0, phone_number.Length - n)
            n = n + 1
        End If
    Next
    code = phone_number
End Sub

帮帮我吧。谢谢。

3 个答案:

答案 0 :(得分:1)

通过更改If句子,尝试以下操作: *如果phone_number.ToString&lt;&gt; row(2).ToString然后* 在评估For Each语句中的当前行时。

并编写一个Else,因为一旦找到代码就应该退出并返回Sub: *如果phone_number.ToString&lt;&gt; row(2).ToString然后       phone_number = phone_number.Substring(0,phone_number.Length - n)       n = n + 1   其他       退出   结束如果*

答案 1 :(得分:0)

jonobral是对的,你的行:

If phone_number.ToString <> _pricelist.Rows(2).ToString Then

每次通过循环而不是每行的第2列比较phone_number和_pricelist的第二个DataRow的String表示(这是我假设你试图做的?)

使用他的代码,只要变量n大于phone_number字符串的长度,就会得到一个长度不能为0。你能明白为什么吗?

当然,还有一些其他问题......

我可能需要你重新解释这个问题,因为我可能没有正确理解你,但假设:

_pricelist.Columns(2)是一个包含所有有效国家/地区代码的列

phone_number是一个字符串,仅包含始终以1到4位有效国际国家代码开头的数字

您正在尝试确定哪个国际拨号代码匹配...

然后

这是一种简单的方法(尽管有更有效的方法可用)

Public Function GetCodeFromPhNum(ByVal phone_number As String) As String
    Dim code_to_test As String

    For test_length As Integer = 4 To 1 Step -1
        code_to_test = phone_number.Substring(0,test_length)
        For Each row In _pricelist.Rows    
            If code_to_test = row(2).ToString Then 
                Return code_to_test                                  
            End If
        Next
    Next

    ' if we get here, we have tried every possibility'
    ' return an empty string, (could throw an error instead)'
    Return ""

End Function

'then to use the function:'

Dim code As String = GetCodeFromPhNum(phone_number)
If code <> "" Then
    ' country code is valid ... '
Else 
    ' country code is invalid ... '
End If

应该注意的是,有很多更有效的方法来执行此匹配(特别是如果您的数据已经排序),并且我还没有使用VB大约15年,所以我不能100我确定我的代码完全有效,抱歉,但我希望这会有所帮助。

请尝试理解代码。

请注意,如果传入的phone_number少于4位,则上述代码将失败。这是因为行code_to_test = phone_number.Substring(0,test_length)将失败。您可以通过检查test_length&lt; = Len(phone_number)。

来纠正此问题

我应该指出,将代码分解为更小的单元子程序和函数总是一个好主意。

我还应该指出,按名称引用数据列几乎总是优于使用其索引,换句话说:

row("Code_Column_Name")

优于

row(2)

因为它使代码更具可读性,可防止出现像_pricelist.Rows(2)那样的错误,并且在拨号代码的Column索引将来发生变化的情况下更安全。

答案 2 :(得分:0)

这就是最终工作代码的样子: 致谢:@MattCoubrough

'Seperating code from Phone number'
Public Sub code_parsing()
    Dim row As DataRow
    Dim temp As String = phone_number
    For l As Integer = temp.Length To 1 Step -1
        temp = temp.Remove(temp.Length - 1, 1)
        For Each row In _pricelist.Rows
            If temp.ToString = row("code").ToString Then
                code = temp
                Exit Sub
            End If
        Next
    Next
End Sub

谢谢你的伙伴。