当前位置:编程学习 > VB >>

VB 字符串 判断 分隔字符 问题?请指教,谢谢!

字符串a中的字段有一下3种形式的分隔:
(1)*****空格(N个)*****空格(N个))*****空格(N个)......
(2)*****tab*****tab*****tab......
(3)*****,*****,*****,......

要求判断字符串中的字段是以什么字符间隔的,若是以空格间隔,还需要判断是几个空格一组来间隔的。

请指教,谢谢!


--------------------编程问答-------------------- 间隔标准吗?判断长度应该可以用len --------------------编程问答--------------------

Option Explicit

Private Sub Command1_Click()
    Dim strP As strting
    Dim intP As String
    strP = "*****  *****  *****"
    intP = InStr(1, strP, " ", vbTextCompare)
    If intP <> 0 Then Debug.Print "间隔是空格"
    intP = InStr(1, strP, ",", vbTextCompare)
    If intP <> 0 Then Debug.Print "间隔是逗号"
    intP = InStr(1, strP, vbTab, vbTextCompare)
    If intP <> 0 Then Debug.Print "间隔是制表符"
End Sub

--------------------编程问答--------------------
引用 2 楼  的回复:
VB code

Option Explicit

Private Sub Command1_Click()
    Dim strP As strting
    Dim intP As String
    strP = "*****  *****  *****"
    intP = InStr(1, strP, " ", vbTextCompare)
    If int……


嗯,这个方法我使用了,不过如果是空格间隔,我需要知道是几个空格一组间隔的,这种方法貌似无法实现的,是否有办法知道空格个数呢?请指教,谢谢! --------------------编程问答--------------------
引用 3 楼  的回复:
引用 2 楼 的回复:
VB code

Option Explicit

Private Sub Command1_Click()
Dim strP As strting
Dim intP As String
strP = "***** ***** *****"
intP = InStr(1, strP, " ", vbTextCompare)
If int……


嗯……

同样的办法,变通一下,在找到了第一个空格后,继续向后面找第一个*,这样就能计算出空格的数量了 --------------------编程问答-------------------- --------------------编程问答-------------------- 固定多个空格分隔时,确定空格个数:

Dim n As Integer, p1 As Long, p2 As Long

p2 = InStr(1, a, Space(1))
If p2 Then 
  Do 
    n = n + 1
    p1 = p2
    p2 = Instr(p1, a, Space(1))
  Loop While p2 = p1 + 1
End If
--------------------编程问答-------------------- 奇怪的很,p2 = Instr(p1, a, Space(1)) p1没起作用,每次都是从第一个字符开始计数的。

刚试了一下,p2 = InStr(3, "abcf,defg", ",")  p2=5 
           p2 = InStr(1, "abcf,defg", ",")  p2=5

InStr([start, ]string1, string2[, compare])  start咋不起作用呢?


--------------------编程问答-------------------- 哪位知道原因呢?奇怪的很,不知哪不对的。 --------------------编程问答-------------------- 怎么不起作用了?返回的是string2从start开始第一次出现在string1的位置,从第3位开始查找,第一次出现","是在第5个字符上,从第1位开始查找,","是也在第5个字符上第一次出现 --------------------编程问答-------------------- 很温馨的小屋 --------------------编程问答--------------------
引用 9 楼  的回复:
怎么不起作用了?返回的是string2从start开始第一次出现在string1的位置,从第3位开始查找,第一次出现","是在第5个字符上,从第1位开始查找,","是也在第5个字符上第一次出现


不好意思,我没懂你的意思,从第三位查找,怎么是第5个字符呢? --------------------编程问答-------------------- 是有 Bug:

  Do 
    n = n + 1
    p1 = p2 + 1
    p2 = Instr(p1, a, Space(1))
  Loop While p2 = p1 + 1

否则会找到同一个匹配。 --------------------编程问答-------------------- 返回的是string1中所在的位置,不是start开始计数,start开始查找是指忽略start前的字符。 --------------------编程问答-------------------- 找到一个好办法,不过效率很低。
Dim i%
Const s = "123    444    5655"
Do While Replace(s, Space(i + 1), "") <> s
    i = i + 1
Loop
MsgBox i'这个i就是你要的空格数,会显示4
--------------------编程问答-------------------- 再上一个更短的代码,可直接运行:
With CreateObject("vbscript.regExp")
    .Pattern = "\s+"
    MsgBox "空格长度是:" & Len(.Execute("123    444    5655")(0).Value)
End With
--------------------编程问答-------------------- 试问楼主
字符串“A空格Tab,B空格Tab,C”
是用什么字符间隔的?
(^_^) --------------------编程问答--------------------
引用 16 楼  的回复:
试问楼主
字符串“A空格Tab,B空格Tab,C”
是用什么字符间隔的?
(^_^)


哦,给我输入的文件时标准的,只是无法确认其在输出时是以哪种字符为间隔的,你说的这种情况出现的可能性非常小,要不设计文件输出的人的思维习惯是不是有点奇怪呢,呵呵 --------------------编程问答-------------------- 用二进制读取抓每次连续出现32的数量? --------------------编程问答--------------------
引用 17 楼  的回复:
引用 16 楼 的回复:
试问楼主
字符串“A空格Tab,B空格Tab,C”
是用什么字符间隔的?
(^_^)


哦,给我输入的文件时标准的,只是无法确认其在输出时是以哪种字符为间隔的,你说的这种情况出现的可能性非常小,要不设计文件输出的人的思维习惯是不是有点奇怪呢,呵呵

如果是这个目的,就按照0f123的5楼办法处理。
处理文件我的习惯是不管三七二十一,先把各种复杂格式全都整理成统一的清爽格式,然后再解析处理。 --------------------编程问答--------------------
引用 17 楼  的回复:
引用 16 楼 的回复:
试问楼主
字符串“A空格Tab,B空格Tab,C”
是用什么字符间隔的?
(^_^)


哦,给我输入的文件时标准的,只是无法确认其在输出时是以哪种字符为间隔的,你说的这种情况出现的可能性非常小,要不设计文件输出的人的思维习惯是不是有点奇怪呢,呵呵

如果是这个目的,就按照0f123的5楼办法处理。
处理文件我的习惯是不管三七二十一,先把各种复杂格式全都整理成统一的清爽格式,然后再解析处理。
补充:VB ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,