|
本帖最后由 香川群子 于 2016-3-30 16:12 编辑
yorkchenshunan 发表于 2016-3-30 13:48
你的代码,尾巴处理有问题,如输入12300111789,删除5位,显示不了删除8/9
确实存在这个问题bug。
解决办法是,在输入的数字串后末尾添加1个"0",强制进入检查模式。
但是,注意最后输出结果时要去掉这个多加的"0"。
简化版代码:- Sub test1() 'by kagawa
-
- ' s = InputBox("", "", "80317902254297017652")
- ' n = Val(InputBox("n=", "", 9))
- s = "80317902254297017652": n = 9
- s = "12300111789": n = 5
-
- m = Len(s): s = s & "0"
- r = 1
- For i = 1 To m - n + 1
- t = Mid(s, r, n + i - r + 1)
- For j = IIf(i = 1, 1, 0) To 9
- r2 = InStr(t, j): If r2 Then Exit For
- Next
- s1 = s1 & Left(t, r2 - 1): If Len(s1) = n Then Exit For
- s2 = s2 & Mid(t, r2, 1): r = r + r2
- Next
- s = Left(s, m): s2 = s2 & Mid(s, r + r2 - 1)
-
- Debug.Print n & "/" & m & vbCr & s & vbCr & s1 & vbCr & s2
- MsgBox s & vbCr & s1 & vbCr & s2
-
- End Sub
复制代码 完整版代码也同样处理:- Sub test2() 'by kagawa
-
- ' s = InputBox("", "", "80317902254297017652")
- ' n = Val(InputBox("n=", "", 9))
- ' s = "80317902254297017652": n = 9
- s = "12300111789": n = 5
-
- m = Len(s): s = s & "0"
- r = 1
- For i = 1 To m - n + 1
- t = Mid(s, r, n + i - r + 1)
- For j = IIf(i = 1, 1, 0) To 9
- r2 = InStr(t, j): If r2 Then Exit For
- Next
- s1 = s1 & Left(t, r2 - 1)
- If Len(s1) = n Then
- s = Left(s, m)
- s2 = s2 & Left(T, r2 - 1) & String(m - r - r2 + 2, "-")
- s3 = s3 & String(r2 - 1, "-") & Mid(s, r + r2 - 1)
- s4 = s4 & Mid(s, r + r2 - 1)
- Exit For
- Else
- s2 = s2 & Left(t, r2 - 1) & "-"
- s3 = s3 & String(r2 - 1, "-") & Mid(t, r2, 1)
- s4 = s4 & Mid(t, r2, 1)
- r = r + r2
- End If
- Next
-
- Debug.Print n & "/" & Len(s) & vbCr & s & vbCr & s1 & vbCr & s2 & vbCr & s3 & vbCr & s4
- MsgBox s & vbCr & s1 & vbCr & s2 & vbCr & s3 & vbCr & s4
-
- End Sub
复制代码 |
|