用户输入电话号码。我的任务是通过将国家代码与列的所有行匹配来区分国家代码"代码"在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
帮帮我吧。谢谢。
答案 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
谢谢你的伙伴。