0

我需要帮助在 Access 2010 中创建一个 VB 代码或表达式,它将从一个字符串中对数字进行分组,其中每个集合都以数字 6 开头,并且总是 9 个字符长。

字符串示例:

  1. 订单确认号 638917872-001 部分订单/收到 23.74 美元

  2. 订单确认 - 多个订单 - 订单确认#639069135-001/$297.45 - 订单确认#639069611-001/$32.08。

我正在使用一个 VB 代码来删除所有的字母字符,但这只是给我留下了:

  • 6389178720012374从字符串 1 和
  • 639069135001297456390696110013208从字符串 2。

我只关心以 6 开头且长度为 9 个字符的订单号。任何帮助将不胜感激,我知道有一种更简单的方法。

4

3 回答 3

2

VB.NET 解决方案:

如果您只需要结果字符串中的前 9 个数字,则可以使用 String.Substring,即:

Dim numberString as String = "6389178720012374"
Dim newString As String = numberString.Substring(0, 9)
MessageBox.Show(newString)

显示 638917872

MSDN 链接

编辑:

也许您想使用正则表达式 - 这样的事情也许可以让您开始:

Private Sub Input()
    Dim numberString As String = "Order Confirmation # 638917872-001 Partial Order/$23.74 RECEIVED"
    Dim numberString2 As String = "Order Confirmation - Multiple Orders - Order Confirmation#639069135-001/$297.45 - Order Confirmation#639069611-001/$32.08"

    GiveMeTheNumbers(numberString)
    GiveMeTheNumbers(numberString2)
End Sub

Function GiveMeTheNumbers(ByVal s As String) As String
    Dim m As Match = Regex.Match(s, "6\d{8}") 'get 9 digit #s begin w/6
    Do While m.Success
        MessageBox.Show(m.Value.ToString)
        m = m.NextMatch()
    Loop
    Return False
End Function

结果 - MessageBox1:638917872 MessageBox2:639069135 MessageBox3:639069611

于 2013-05-22T13:33:47.363 回答
0

您可以使用此功能...在 VB.NET 中测试

Function NumOnly(ByVal s As String) As String
    sRes = ""

    For x As Integer = 0 To s.Length - 1           
        If IsNumeric(s.Substring(x, 1)) Then sRes = sRes & s.Substring(x, 1)
    Next
    return sRes
End Function

ms-access 的小修改

于 2013-05-22T14:06:44.143 回答
0

好的,这是一个 VBA 解决方案。您需要将Microsoft VBScript 正则表达式添加到您的引用中。
这将匹配它找到的每个 9 位数字,并返回一个带有 #s 顺序的字符串数组。

Function GetOrderNum(S As String) As String()
   Dim oMatches As Object
   Dim aMatches() As String
   Dim I As Integer
   Dim RE As Object
   Set RE = CreateObject("vbscript.regexp")
   ReDim aMatches(0)
   RE.Pattern = "\d{9}"
   RE.Global = True
   RE.IgnoreCase = True
   Set oMatches = RE.Execute(S)

   If oMatches.Count <> 0 Then
     ReDim aMatches(oMatches.Count)
       For I = 0 To oMatches.Count - 1
         aMatches(I) = oMatches(I)
       Next I
   End If
   GetOrderNum = aMatches
End Function
于 2013-05-22T18:27:39.337 回答