| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 479 人关注过本帖
标题:特定字符间循环取字符串处理
取消只看楼主 加入收藏
knight828
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-10-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
特定字符间循环取字符串处理
sn.rar (768 Bytes)
我一文本文件,导入数组,属特定字符间循环取字符串处理问题,如附件所示,代码如下:
程序代码:
Open ypdialog.FileName For Binary As #1
s = Space(LOF(1))
Get #1, , s
  s = Replace(s, Chr$(10), Chr$(13))
      Do Until InStr(1, s, Chr$(13) & Chr$(13), 0) = 0   
        s = Replace(s, Chr$(13) & Chr$(13), Chr$(13))      
      Loop
        ss = Split(s, Chr$(13))
For i = 0 To UBound(ss)
'///////////////////////////////////////////////////////////00AA
   If InStr(1, ss(i), "LOCATION  :  00AA") <> 0 Then
        n1 = i + 1     
        ordertxt.Text = ordertxt.Text & n1 & vbCrLf      
        If n1 <> 0 Then
            For j = n1 To UBound(ss)             
                    HAND.Add Mid(ss(j), 1, 8)  
                    COM.Add Trim(Mid(ss(j), 9, 15))                     
                    If InStr(1, ss(j), "              |          | BONDED | REQUEST | STKROOM | ASSIGN | MAKER |") <> 0 Then                     
                    Exit For                 
                   End If     
            Next j                  
        End If 
    End If     
    If InStr(1, ss(i), "LOCATION  :  00BB") <> 0 Then
        n2 = i + 1
        If n2 <> 0 Then
            For j = n2 To UBound(ss)           
                    HAND.Add Mid(ss(j), 1, 8) 
                    COM.Add Trim(Mid(ss(j), 9, 15))                     
                    If InStr(1, ss(j), "              |          | BONDED | REQUEST | STKROOM | ASSIGN | MAKER |") <> 0 Then                    
                    Exit For                 
                    End If   
            Next j                       
        End If
    End If 
  If InStr(1, ss(i), "LOCATION  :  00CC") <> 0 Then
        n3 = i + 1     
        If n3 <> 0 Then 
            For j = n3 To UBound(ss)              
                    HAND.Add Mid(ss(j), 1, 8) 
                    COM.Add Trim(Mid(ss(j), 9, 15))       
                    If InStr(1, ss(j), "              |          | BONDED | REQUEST | STKROOM | ASSIGN | MAKER |") <> 0 Then                      
                    Exit For                
                    End If     
            Next j                 
        End If
    End If 

 Next i
Close #1


'但不知道哪里问题,第一个特定字符串间的内容被循环了两次?
大家帮忙看看,如何改!
谢谢!

搜索更多相关主题的帖子: 字符串 
2014-11-22 12:34
knight828
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-10-6
收藏
得分:0 
回复 2 楼 xzlxzlxzl
这是我为调试的新做的代码,双for,故而被load两次!
2014-11-22 17:07
knight828
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-10-6
收藏
得分:0 
集合也不止这两个,“LOCATION  :  00AA”里的00AA相当于一个集合的标识,做成一个集合放在数组第一列,以标识数据归类。
有没有办法,一次性跳出双for?
tks!
2014-11-22 17:12
knight828
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-10-6
收藏
得分:0 
程序代码:
k = 0
For i = 0 To UBound(ss)
   If InStr(1, ss(i), "LOCATION  :  00AA") <> 0 Then
        n1 = i + 1
        k = k + 1
        If k > 1 Then
           Exit For
        Else
            If n1 <> 0 Then
                For j = n1 To UBound(ss)
                    HAND.Add Mid(ss(j), 1, 8)
                    COM.Add Trim(Mid(ss(j), 9, 15))
                    If InStr(1, ss(j), "              |          | BONDED | REQUEST | STKROOM | ASSIGN | MAKER |") <> 0 Then
                    Exit For
                    End If
                Next j
        End If
       End If
End If
Next i
'///////////////////////////////////////////////////////////00BB
k = 0
For i = 0 To UBound(ss)
   If InStr(1, ss(i), "LOCATION  :  00BB") <> 0 Then
        n2 = i + 1
        k = k + 1
        If k > 1 Then
           Exit For
        Else
            If n2 <> 0 Then
                For j = n2 To UBound(ss)
                    HAND.Add Mid(ss(j), 1, 8)
                    COM.Add Trim(Mid(ss(j), 9, 15))
                    If InStr(1, ss(j), "              |          | BONDED | REQUEST | STKROOM | ASSIGN | MAKER |") <> 0 Then
                    Exit For
                    End If
                Next j
        End If
       End If
End If
Next i

'///////////////////////////////////////////////////////////00CC
k = 0
For i = 0 To UBound(ss)
   If InStr(1, ss(i), "LOCATION  :  00CC") <> 0 Then
        n3 = i + 1
        k = k + 1
        If k > 1 Then
           Exit For
        Else
            If n3 <> 0 Then
                For j = n3 To UBound(ss)
                    HAND.Add Mid(ss(j), 1, 8)
                    COM.Add Trim(Mid(ss(j), 9, 15))
                    If InStr(1, ss(j), "              |          | BONDED | REQUEST | STKROOM | ASSIGN | MAKER |") <> 0 Then
                    Exit For
                    End If
                Next j
        End If
       End If
End If
取第一次出现的00AA,第二次取到,直接跳出!只是代码有点多,要精简一下。
2014-11-22 17:53
knight828
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-10-6
收藏
得分:0 
回复 6 楼 xzlxzlxzl
如果是load数据,bz的当然可以;我的程序必须取“00AA”“00BB”“00CC”etc作为ID(i)标示所取得的数据段;而且数据内还有其他集合,并不仅仅这一点!
TKS!
2014-11-23 21:04
快速回复:特定字符间循环取字符串处理
数据加载中...
 
   



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

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