我有一字串
"BBB-AAA,AAACCCkkkkkDDDDD"
我会从数据库载入一系列的短的字串去匹配,不能限制以下数组出现的先后顺序
1:AAA
2:AAACC
3:A
我希望这个"BBB-AAA,AAACCCkkkkkDDDDD"字串,最后是被2:AAACC所配到
用字串 like * AAA* 或是like AAACC 或是like A都是true的
但是最像的是AAACC,,如何在vb.net语法内设计呢?或是思路怎么做呢?
你怎么定义像?比较长就是像?
那么
Dim str1 = "BBB-AAA,AAACCCkkkkkDDDDD"
Dim tofind() as String = { "AAA", "AAACC", "A" }
Dim query = tofind.OrderBy(Function(x) x.Length).Where(Function(x) str1.Contains(x)).LastOrDefault()
If Not(query Is Nothing) Then
MsgBox query
To Caozhy
其实数据库里是长这样子的,如2:AAACC或是AAACX都算是同一个型号,因此ID是一样的
我会一次从数据库带入一组数据
第一次AAA
第二次AAACC,AAACX其中一个同都可以
第三次A,A0
{ "AAA", "AAACC", "A" }要变成{"AAA","AAACC","AAACX","A","A0"}{1,2,2,3,3}
这样的感觉吗?
最后传出值ID=2
这个是我写的比较简易的,但是有一个问题
TBODescription的字串,应该是id=2,但是被会顺序先的id=1时,就判断true,就跳离回圈了
这时候也不能用那个字串比较长用排序长短来判断,因为TBOProductName,他是数组,有好几个在一起(例如AAA,AAAC,AAA-01都算同一个)
Public Function TestFindTBOFactoryID(ByVal TBODescription As String) As Long
TBODescription = "品牌:refa,型号:CARAT RAY FACE,生产企业:MTG Co., LTD,颜色分类:银,是否电动:否,瘦脸机样式:滚轮式"
Dim TBODescription2 = "品牌:refa,型号:RF-PC2019B 2,生产企业:MTG,颜色分类:银色,是否电动:否,瘦脸机样式:滚轮式"
Dim SqlStr As String
SqlStr = "Select AtTBOProductID, TBOProductName From tbtbofactory "
Dim mytb As New System.Data.DataTable
mytb = mydb.dbDataTable(SqlStr)
'这个表格长成
' AtTBOProductID, TBOProductName
' 1 CARAT RAY,RF-PC2019B TBODescription2这个会被选到
' 2 CARAT RAY FACE TBODescription这个会被选到
' 3 ReFa S CARAT RAY,S CARAT RAY
' 4 CARAT,PEC-L1706
' 5 ReFa S CARAT,S CARAT
' 6 4 CARAT,RF-FC1932B
' 7 CARAT FACE,RF-CF1842B
Dim rowIndex As Long = 0
Dim AtTBOProductID As Long = 1
While rowIndex < mytb.Rows.Count
Dim str As String = mytb.Rows(rowIndex).Item(1)
'切成多段
str = str.TrimEnd(",")
Dim arr() As String = Split(str, ",")
Dim i As Long = 0
For i = 0 To arr.Count - 1
If TBODescription.ToUpper Like "*" & arr(i).ToUpper & "*" Then
AtTBOProductID = mytb.Rows(rowIndex).Item(0)
Exit While
End If
Next i
rowIndex += 1
End While
Return AtTBOProductID
End Function