Office中国论坛/Access中国论坛

标题: 请教有关截取字符的问题? [打印本页]

作者: fanion    时间: 2006-4-10 23:32
标题: 请教有关截取字符的问题?
请教有关截取字符的问题?

如:字符有可能是这样:4  4-  5  5-  6  6-  7  7-  8  8-  9  9-  10  10-  11  11-  12  12-  13  13-  1  1-  2  2-  3  3-

      也有可能是这样:36      37     38       39      40     41

现在我想要的是分别截取4 4- 5 5-等为一个字符存到一个数组或变量里面,也是就说不要空格的每一个字符作为一个值。   
作者: 一点通    时间: 2006-4-10 23:35
提示不是很清楚,试下用replace()处理
作者: fanion    时间: 2006-4-10 23:39
这个函数不行啊?我是想把4截取出来放到变量1,4-截出来放到变量2啊?以此类推。
作者: Benjamin_luk    时间: 2006-4-11 01:58
如果每串字符之间的间隔为2空格的话, 可以按下面的方法进行

Function GetStr(L As Integer)
Dim str, str1, I As Integer, J As Integer, rs(99)
str = "4  4-  5  5-  6  6-  7  7-  8  8-  9  9-  10  10-  11  11-  12  12-  13  13-  1  1-  2  2-  3  3-"
str = (Replace(str, "  ", ",")) & ","

For I = 1 To Len(str)
If Mid(str, I, 1) = "," Then
J = J + 1
rs(J) = I
End If
Next I
I = 1

If L > 1 And L <= J Then
GetStr = Mid(str, rs(L - 1) + 1, rs(L) - rs(L - 1) - 1)
ElseIf L = 1 Then
GetStr = Left(str, rs(L) - 1)
ElseIf L > J Then
MsgBox "超出数据范围"
End If
End Function

'//取得字符串
Function ds()
MsgBox GetStr(2) '2表示第2个字符
End Function
作者: fanion    时间: 2006-4-11 02:31
这种方法也不行.因为空格的间隔数是不定的,
作者: Benjamin_luk    时间: 2006-4-11 03:15
等下再帮你修改一下,
作者: fanion    时间: 2006-4-11 03:36
先谢了,
作者: fan0217    时间: 2006-4-11 04:24
有固定间隔符的字符串,最有效的拆分方法是使用:Split()
作者: fanion    时间: 2006-4-11 04:42
如何做啊?不太懂..
作者: fanion    时间: 2006-4-11 04:43
请继续指点一下..
作者: fan0217    时间: 2006-4-11 04:53
老实说,我没有看懂你的问题,能具体点吗?
作者: Benjamin_luk    时间: 2006-4-11 05:10
修改如下:

Function GetStr(L As Integer)
Dim str, str1, I As Integer, J As Integer, rs(99)
str = " 4     4-     5  5-  6  6-  7  7-  8  8-  9  9-  10  10-  11  11-  12  12-  13  13-  1  1-  2  2-  3  3-"
str = (Replace(Trim(str), " ", ","))
''Replace space
MsgBox str
Do Until InStr(1, str, ",,", 1) = 0
str = (Replace(str, ",,", ","))
str = str
Loop
str = str & ","
MsgBox str
''Get "," position
For I = 1 To Len(str)
If Mid(str, I, 1) = "," Then
J = J + 1
rs(J) = I
End If
Next I
I = 1
''Get string
If L > 1 And L <= J Then
GetStr = Mid(str, rs(L - 1) + 1, rs(L) - rs(L - 1) - 1)
ElseIf L = 1 Then
GetStr = Left(str, rs(L) - 1)
ElseIf L > J Then
MsgBox "超出数据范围"
End If
End Function

'//取得字符串
Function ds()
MsgBox GetStr(2) '2表示第2个字符
End Function[em01]
作者: fanion    时间: 2006-4-11 05:22
不在了吗?请贴个代码出来了解一下..
作者: fanion    时间: 2006-4-11 05:24
现在有字符串如下面型式
型式一:“4  4-  5  5-  6  6-  7  7-  8  8-  9  9-  10  10-  11  11-  12  12-  13  13-  1  1-  2  2-  3  3- ”
型式二:“36      37     38       39      40     41 ”
现在要把型式一中的 4截取出来放到变量A,截取4-出来放到变量B,一直截取到3-。
理式二:是把36截取出来变量X,  截取37放到变量Y,一直到41。

作者: Benjamin_luk    时间: 2006-4-11 05:24
代码不是在上面吗?
作者: fanion    时间: 2006-4-11 05:57
你的函数是要我传目前我要截取第几个字串.但问题我是不知道要取第几个啊?能不能用循环的方式截取出来分别放到数组中.
作者: fan0217    时间: 2006-4-11 06:14
下面过程只是在立即窗口中打印,如果要实现放在数组中,请更改Debug.Print处的代码.

Sub MySplit()
Dim strMyStr As String
Dim strTemp As String
Dim i As Integer

strMyStr = "4  4-  5  5-  6  6-  7  7-  8  8-  9  9-  10  10-  11  11-  12  12-  13  13-  1  1-  2  2-  3  3-"

For i = 0 To UBound(Split(strMyStr, "-", -1), 1)
    strTemp = Trim(Split(strMyStr, "-", -1)(i))
  If strTemp <> "" Then
     Debug.Print Split(strTemp, " ", -1)(0)
     Debug.Print Split(strTemp & " ", " ", -1)(UBound(Split(strTemp & " ", " ", -1), 1) - 1) & "-"
  End If
Next
End Sub
作者: Benjamin_luk    时间: 2006-4-11 06:21
帮到底了,再修改如下,已取得a b值了:

Function GetStr()
Dim str, str1, I As Integer, J As Integer, rs(99), K As Integer, a, b
str = " 4     4-     5  5-  6  6-  7  7-  8  8-  9  9-  10  10-  11  11-  12  12-  13  13-  1  1-  2  2-  3  3-"
str = (Replace(Trim(str), " ", ","))
''Replace space
Do Until InStr(1, str, ",,", 1) = 0
str = (Replace(str, ",,", ","))
str = str
Loop
str = str & ","
''Get "," position
For I = 1 To Len(str)
If Mid(str, I, 1) = "," Then
J = J + 1
rs(J) = I
End If
Next I
I = 1
''Get string
If J Mod 2 = 0 Then
For K = 2 To J Step 2
L = K - 1
'//取得A B 值
a = Mid(str, rs(L - 1) + 1, rs(L) - rs(L - 1) - 1)
b = Mid(str, rs(K - 1) + 1, rs(K) - rs(K - 1) - 1)
MsgBox "(" & a & "," & b & ")"
Next K
End If
End Function
作者: msf    时间: 2006-4-11 16:27
LTrim,RTrim,及 Trim 函数示例

本示例使用 LTrimRTrim 函数将某字符串的开头及结尾的空格全部去除。事实上只使用 Trim 函数也可以做到将两头空格全部去除。
  1. Dim MyString, TrimString

  2. MyString = "  <-Trim->  "    '
复制代码
设置字符串初值。

  1. TrimString = LTrim(MyString)
复制代码
  
  1. ' TrimString = "<-Trim->  "
复制代码


  1. TrimString = RTrim(MyString)
复制代码
  
  1. ' TrimString = "  <-Trim->"
复制代码


  1. TrimString = LTrim(RTrim(MyString))
复制代码
  
  1. ' TrimString = "<-Trim->"
复制代码


  1. '
复制代码
只使用
  1. Trim
复制代码
函数也同样将两头空格去除。

  1. TrimString = Trim(MyString)
复制代码
  
  1. ' TrimString = "<-Trim->"
复制代码



作者: fanion    时间: 2006-4-11 16:49
fan0217版主的方法不对啊?当字串变成35      36      37     38      39这种型式就不行了。

还有Benjamin_luk     的AB值我不懂是什么意思,我只要截取出来的每一个字串存到数组就可以了。你的第一种方法是对的,只不过怎么样循环把它存到数组里面啊?
作者: Benjamin_luk    时间: 2006-4-11 17:30
是不是保存到两维数组里?[em03]
作者: Benjamin_luk    时间: 2006-4-11 17:32
试一下,看看行不行了.(主要是当中有字符串,有点难度呀)
[em01

[此贴子已经被作者于2006-4-11 9:47:40编辑过]


作者: fanion    时间: 2006-4-11 18:33
不是你保存到一维数组就好了。你不用管型式二的字串,因为你的方法这两种型式都能处理了。
作者: Benjamin_luk    时间: 2006-4-11 19:12
早说就好了,修改如下:

Function GetStar()
Dim str, str1, I As Integer, J As Integer, rs(99), K As Integer
Dim ds(99, 99) As Variant, H As Integer, AB(99) As Variant
str = " 4     4-     5  5-  6  6-  7  7-  8  8-  9  9-  10  10-  11  11-  12  12-  13  13-  1  1-  2  2-  3  3-"
str = (Replace(Trim(str), " ", ","))
''Replace space
Do Until InStr(1, str, ",,", 1) = 0
str = (Replace(str, ",,", ","))
str = str
Loop
str = str & ","
''Get "," position
For I = 1 To Len(str)
If Mid(str, I, 1) = "," Then
J = J + 1
rs(J) = I
End If
Next I
I = 1
''Get string
H = 0
L = 0
If J Mod 2 = 0 Then
For L = 1 To J
AB(L) = (Mid(str, rs(L - 1) + 1, rs(L) - rs(L - 1) - 1))
Next L
'将数据保存到1维数组AB():
'4, 数组引用: ab(1)
'4- 数组引用: ab(2)
End If
MsgBox AB(2)
End Function
作者: fan0217    时间: 2006-4-11 20:49
以下是引用fanion在2006-4-11 8:49:00的发言:


fan0217版主的方法不对啊?当字串变成35      36      37     38      39这种型式就不行了。

还有Benjamin_luk     的AB值我不懂是什么意思,我只要截取出来的每一个字串存到数组就可以了。你的第一种方法是对的,只不过怎么样循环把它存到数组里面啊?

我只针对你的第一种情况写的.
作者: fanion    时间: 2006-4-11 21:42
我要通用的。
作者: Benjamin_luk    时间: 2006-4-11 22:15
[em03]还没解决问题吗?
作者: fanion    时间: 2006-4-11 23:30
解决了.谢了..




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