标题:关于字符串截取和插入的问题
只看楼主
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:325
专家分:114
注 册:2010-2-17
结帖率:69.81%
已结贴  问题点数:20 回复次数:4 
关于字符串截取和插入的问题
有两个问题求教:

1、
一个字符串:“<Total> --- --- --- 629 344 54.69% 0 0.00% 0 0.00% 0 0.00% 0 0.00% 284 45.15%”
想要通过读取空格的方式得到其中的部分字符串。
例如:想要得到第4个空格和第5个空格之间的629。
    不要通过从左数或从右数第几到几个字符的方式,因为数字的位数不一定,可能三位,可能四位,也可能两位。。。。。。

2、一个字符串:“E72439_8#_FM324U03_CP2_2016-12-28-19-00-37.SUM”
想要判断从左数第二个下划线向前数三位(不含本身下划线),如果是下划线(第一个下划线),则在第二个下划线向前数三位(不含本身下划线)位置插入一个0。
例如:E72439_8#_FM324U03_CP2_2016-12-28-19-00-37.SUM 从左数第二个下划线向前数三位(不含本身下划线),还是下划线,则在第二个下划线向前数三位(不含本身下划线)位置插入一个0,变为E72439_08#_FM324U03_CP2_2016-12-28-19-00-37.SUM。
        不要通过从左数或从右数第几到几个字符的方式,因为例如“E72439”的位数不一定,可能六位,可能七位,也可能五位,同样,“FM324U03”的位数也是不一定的。。。。。。

以上两种情况,网上没有找到类似资料,请教教我如何修改。
搜索更多相关主题的帖子: 字符串 下划线 
2017-02-22 17:14
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:934
专家分:5244
注 册:2015-8-10
得分:10 
1. 如果每句都是这样的长度,也就各列都是对齐的(起始位置),可以直接采用mid函数处理。如比说下面的629、632
<Total> --- --- --- 629 344 54.69% 0 0.00% 0 0.00% 0 0.00% 0 0.00% 284 45.15%
<Total> --- --- --- 632 344 54.69% 0 0.00% 0 0.00% 0 0.00% 0 0.00% 284 45.15%
虽然你说数字的位数不一定,但是如果是计算软件输出的,有可能是对齐的,比如先两行的629、32
<Total> --- --- --- 629 344 54.69% 0 0.00% 0 0.00% 0 0.00% 0 0.00% 284 45.15%
<Total> --- --- ---  32 344 54.69% 0 0.00% 0 0.00% 0 0.00% 0 0.00% 284 45.15%
如果不是,可以使用split函数,以空格为分隔条件,(注意,split拆分出来可能有空的字段,需要加以判断——。或者用instr 和循环找到第N、N+1个空格,取其之间的数。

2. 这个写的有点乱,说实话真心没看明白。但是好像和1类似的处理方式。

2017-02-22 19:08
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
得分:10 
用万能的split函数:
dim a() as string,b() as string,c as string,i as integer
a=split("<Total> --- --- --- 629 344 54.69% 0 0.00% 0 0.00% 0 0.00% 0 0.00% 284 45.15%"," --- --- --- ")
a=split(a(1)," ")  //此时数组a里面就全部是数字字符串了,用val(a(0...1...))可获得数值
b=split("E72439_8#_FM324U03_CP2_2016-12-28-19-00-37.SUM","_")
if len(b(1))=2 then b(1)="0" & b(1)
c=""
for i=0 to ubound(b-1)
  c=c & b(i) & "_"
next
c=c & b(i)
//循环完成c就是"E72439_08#_FM324U03_CP2_2016-12-28-19-00-37.SUM"了

[此贴子已经被作者于2017-2-22 20:46编辑过]

2017-02-22 20:45
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:325
专家分:114
注 册:2010-2-17
得分:0 
附件我编写的软件的界面截图、源程序、用来测试的数据。问题都写在界面截图上面了。源程序中搜索“救助”也可找到,请帮助解决。
FM324U03_E72439.rar (91.86 KB)
参数检查.rar (6.34 KB)
2017-02-23 17:15
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
得分:0 
command2_click代码修改如下,可得到正确的测试总数和测试pass数:
Private Sub Command2_Click()
Dim b() As String, i As Integer, Str As String
Call Command1_Click
For z = 0 To 24
Label9(z).Caption = ""
Label13(z).Caption = ""
Label14(z).Caption = ""
Label15(z).Caption = ""
Label11(z).Caption = ""
Label12(z).Caption = ""
Next z

Dim q As Integer
   
For i = 0 To File1.ListCount - 1

Text2.Text = ""
Label2.Top = Label2.Top + Label2.Height
If Label2.Top > Frame4.Height Then Label2.Top = 0
Label1.Caption = ""
Label1.ForeColor = QBColor(12)
Label1.Caption = "正在读取"
Text1.Text = File1.List(i)






'------------------------------------------------------------------------------------------------------------
'片号:(十进制)
        If Right(Dir1.Path, 1) = "\" Then
            Open (Dir1.Path & "\" & File1.List(i)) For Input As #1
        Else
            Open (Dir1.Path & "\" & File1.List(i)) For Input As #1
        End If

    Do Until EOF(1)
        Line Input #1, Str  '读出一整行
        If Left(Str, 9) = "Wafer ID:" Then Label9(i).Caption = Right(Str, 2)                   '片号
        If Left(Str, 8) = "Project:" Then Label11(i).Caption = Right(Str, Len(Str) - 8)        '程序名
        If Left(Str, 7) = "Lot ID:" Then Label12(i).Caption = Right(Str, Len(Str) - 7)         '批号
        If Left(Str, 8) = "Comment:" Then Label13(i).Caption = Right(Str, Len(Str) - 8)        '注释
        If Left(Str, 7) = "<Total>" Then
          b = Split(Str, "---")
          b(3) = Trim(b(3))
          b = Split(b(3), Chr(9))
          Label14(i) = Trim(b(1))                                                              '获取总数
          Label15(i) = Trim(b(2))                                                              '测试Pass数
        End If
    Loop
Close #1

Text2.Text = ""


Next i

'------------------------------------------------------------------------------------------------------------
Text1.Text = ""


Label1.Caption = ""
Label1.ForeColor = QBColor(10)
Label1.Caption = "读取完毕"
Label2.Top = 0
Label2.Left = 0
Label17.Caption = File1.ListCount

'------------------------------------------------------------------------------------------------------------
'If
'Label19.Caption = ""                                                              求助:如果label11数组.Caption完全一致的话,则Label19则显示绿色“一致”,反之显示红色“有异”
'Label19.ForeColor = QBColor(10)                                                         并且label11数组.Caption中所有与label(0).Caption不同的显示成红色
'Label19.Caption = "一致"
'Else
'Label19.ForeColor = QBColor(12)
'Label19.Caption = "有异"
'End If
'------------------------------------------------------------------------------------------------------------


End Sub
2017-02-23 20:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-474453-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.724725 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved