Office中国论坛/Access中国论坛

标题: [求助]如何查找特定字符在字段中第二次出现的位置 [打印本页]

作者: zhang81524    时间: 2006-11-17 02:02
标题: [求助]如何查找特定字符在字段中第二次出现的位置
如何查找特定字符在字段中第二次出现的位置



我的一个字段中大部分都是这样的格式

SS AA BB CC

SSSS AA BBBB CC

SSS AAAAA B CCCC

我要取出其中第二个空格与第三个空之间的AA BB来生成新字段

每个空格之间的长度不等。

不知有什么好的方法
作者: zhang81524    时间: 2006-11-17 03:03
谢谢,公式只能取第1个空格与第2个空格之前的字符

如果要取第4个空格和第6之前字符岂不是要写很长的公式,有没有更好的办法?
作者: wwwwa    时间: 2006-11-17 15:59
思路:用SPLIT分拆字符串,得到数组,用UBOUND、LBOUND判断,直接得到结果。
作者: zhang81524    时间: 2006-11-17 16:47
SPlit好象无法直接在查询语句中使用,看来真的没有直接的办法
作者: wwwwa    时间: 2006-11-17 18:10
以下是引用zhang81524在2006-11-17 8:47:00的发言:


SPlit好象无法直接在查询语句中使用,看来真的没有直接的办法

只能在VBA中使用,而且是最简单的方法。
作者: fengrh    时间: 2006-11-17 19:12
請參考http://www.office-cn.net/forum.php?mod=viewthread&tid=31867&replyID=&skin=1
作者: zhang81524    时间: 2006-11-17 20:54
谢谢,我用了自定义函数

Public Function MidX1(strInput As String, _
                             starnumber As Long, _
                             endnumber As Long) _
                     As String
'------------------------------------------------------------------------------------------

'为了取特定的空格之间的字符

'用法是midX(所选字段,第X次出现的空格,第y次出现的空格)

'例如 midx1("AA BBBB CC DDD",2,3)  =CC

'例如 midx1("AA BBBB CC DDD",1,3)  =BBBB CC

'------------------------------------------------------------------------------------------
  
  strlong = Len(strInput)

i = InStr(1, strInput, " ", vbBinaryCompare)

If IsNull(i) Then
  GoTo 2
  Else
    N = 0
   
End If

  
  
  Do While i <> 0 ' InStrRev(strInput, " ", -1, 1)
  
        N = N + 1
        
        If N = starnumber Then starn1 = i
        
         If N = endnumber Then
        
             starn2 = i
            
             GoTo 1
         Else
         End If
         
         
        
         i = InStr(i + 1, strInput, " ", vbBinaryCompare)

         
  Loop


If i = 0 And N < endnumber Then
   
   MidX1 = Mid$(strInput, starn1 + 1, strlong - starn1)
   
   Else
1
MidX1 = Mid$(strInput, starn1 + 1, starn2 - starn1)

2 End If
  
End Function

[此贴子已经被作者于2006-11-17 12:56:05编辑过]


作者: wwwwa    时间: 2006-11-17 22:48
try:

fg = "AA BBBB CC DDD"
tt = ""
rt = Split(fg, " ")
For I = LBound(rt) To UBound(rt)
MsgBox rt(I) & I
Next
For I = 1 To 3 - 1
tt = tt + rt(I) + " "
Next
MsgBox tt

你可以做成函数调用
作者: fan0217    时间: 2006-11-18 03:16
以下是引用wwwwa在2006-11-17 14:48:00的发言:


try:

fg = "AA BBBB CC DDD"
tt = ""
rt = Split(fg, " ")
For I = LBound(rt) To UBound(rt)
MsgBox rt(I) & I
Next
For I = 1 To 3 - 1
tt = tt + rt(I) + " "
Next
MsgBox tt

你可以做成函数调用

Split函数,返回一个下标从零开始的一维数组。

所以LBound(rt)可以不要了,直接用0。
作者: zhang81524    时间: 2006-11-20 19:18
谢谢了




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3