上次,在論壇里,我要分離“1 x bcd_9292”諸如之類的字串分離出數量1和字串內容bcd_9292。上次專門要感謝“sysdzw”,幫我解決了這個問題。我上次的問題里,其實還有幾種情況沒有考慮,如下:
(1)1 X CVA_8901,1 X ABC,2 X CAD;
(2)1 x cva202
(3)2x DEE15043, DEA20201 該情況如何分離
(4)2 x DEE150431 x DEA20201
這種情況 您能否再看看,當出現(3)因為一個是沒有匹配出數量,有提示;(4)這種情況,x前的數字寫到前面去了,也希望能有提示。
這個正則運算式絕對強大,但是我現在面對(3)和(4)的情況,想要有提示。(3)第二個sku的數量是人為原因沒寫;(4)是兩個字串連在一起寫了,導致第二個的數量分離不出來。
謝謝大家!
uj5u.com熱心網友回復:
正則運算式主要是在有規則的字串查找想要的資料。至于你現在的要求主要應該是語法檢測了。建議采用 split 陳述句對每個單詞進行檢測比較快。
uj5u.com熱心網友回復:
Private Sub Command1_Click()
Call Grammar("1 X CVA_8901,1 x ABxC,2 X CAD")
End Sub
'********************
'以下只對 [數字 X 字符,數字 X 字符] 型別的資料進行語法檢測,
'以下只是給出語法是否合規,不能將錯誤的字符段進行修正為合規的
Private Function Grammar(ByVal strCheck As String) As Boolean
Dim i As Single
Grammar = True
Dim Arr() As String
Arr = Split(strCheck, ",")
If UBound(Arr) > 0 Then
'有多個資料段
For i = 0 To UBound(Arr)
Grammar = GraSection(Arr(i), i + 1)
If Grammar = False Then
Exit For
End If
Next
Else
'只有一個資料段
Grammar = GraSection(Arr(0), 1)
End If
End Function
Private Function GraSection(ByVal strCheck As String, ByVal Index As Long) As Boolean
GraSection = True
Dim Arr() As String
Arr = Split(UCase$(strCheck), " X ")
Select Case UBound(Arr)
Case 0
'表示這個資料段有錯誤
MsgBox "請確認第" & Index & "條資料是否有X號連接符!"
GraSection = False
Case 1
If Not IsNumeric(Arr(0)) Then
MsgBox "請確認第" & Index & "條資料的數欄位是為數字!"
GraSection = False
End If
Case Else
'表示這個資料段有錯誤
MsgBox "請確認第" & Index & "條資料是否與后面的資料出現連接問題!"
GraSection = False
End Select
End Function
uj5u.com熱心網友回復:
你的原始資料是什么樣子的?就是各種資料堆積在一起是什么樣子的?可以復制上來也可以截圖。uj5u.com熱心網友回復:
歸納一下:資料出現主要有以下格式:下面的(1)(2)都是差不多,正常的形式。(1)1 X CVA_8901,1 X ABC,2 X CAD;
(2)1 x cva202
請看還有幾種方式:
(3)2 x DEE15043, DEA20201
(4)2 xDEE15043, DEA20201
(5)2x DEE15043, DEA20201
(6)2xDEE15043, DEA20201
這個(3)(4)(5)(6)的主要特點是:兩組之間用逗號分隔著,但是逗號后的這個缺少"數量 x",我這樣例舉:主要看逗號前面,數字與x和后面的編號之間,空格的問題,都要考慮。
(7)2 x DEE150431 x DEA20201
(8)2x DEE150431 x DEA20201
(9)2 xDEE150431 x DEA20201
(10)2 x DEE150431x DEA20201
(11)2 x DEE150431 xDEA20201
(12)2 x DEE150431xDEA20201
這組(7)(8)(9)(10)(11)(12)主要是兩組之間沒有逗號分隔,由于錄入的疏漏,中間忘記逗號,還有就是第二組的數量直接跟在第一組的編號后面。如“2 x DEE150431 x DEA20201”其實這個1是第二組的數量。主要是x與前面數字和后面的編號的空格問題。這類也要統一提示,是問題資料。
uj5u.com熱心網友回復:
請求幫我看看!uj5u.com熱心網友回復:
這個就是 x 前面必須有個數字的問題。讀到逗號,直接讀第二個資料
沒有逗號 讀到x 提示一下,前面數字中的最后一個字符是否x的前綴數字,是分割一下,并加逗號。
uj5u.com熱心網友回復:
參考《編譯原理》中的詞法分析和有限狀態自動機。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/139666.html
標籤:VB基礎類
