以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  StartIndex 不能小于 0。  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=129604)

--  作者:zhaohj611718
--  发布时间:2019/1/2 15:34:00
--  StartIndex 不能小于 0。
提示StartIndex 不能小于 0。

代码如下:
Dim rs As String()=e.Form.Controls("TextBox1").Lines
  
    
    If  rs(0).Contains("******************") = False Then  \'先简单判断一下格式是否正确
        msgbox("不可识别的格式!")
        Return
    End If
    
    Dim xg As Integer = rs(3).LastIndexOf("/")    \'找出/的位置
    Dim gngj As String   \'定义gngj来记录国内国际
    If rs(3).SubString(xg-1,1) = "1" Then
        gngj = "国际"
    Else
        If    rs(3).SubString(xg-1,1) = "2" Then
            gngj = "国内"
        End If
    End If
    
    Dim starts,Ends As new List(of Integer)   \'定义集合 来记录有效数据的开始行和结束行
    For i As Integer = 0 To rs.Length -1
        If rs(i).Contains("TKT-NUMBER") Then
            starts.Add(i+2)     \'已经是真实行值了
        End If
        If rs(i).Contains("TOTAL TICKETS") Then
            ends.Add(i-2)    \'已经是真实行值了
        End If
    Next
    
    For x As Integer = 0 To Ends.Count - 1   \'遍历每一大组有效数据
        For ii As Integer = starts(x) To Ends(x)
            Dim datas() As String = rs(ii).trim().Replace("    "," ").Replace("   "," ").Replace("  "," ").Split(" ")  \'这已经是提取到了每一个具体行了,并做好了分割
            Dim ddr As DataRow =  DataTables("机票").SQLFind("票号 = \'" & datas(0).Replace("-","") & "\'")
            If ddr Is Nothing Then   \'若 没有票号重复值
                
                If rs(ii).Contains("VOID") = True Then    \'若包含了viod 要特殊处理
                    Dim dr As  DataRow = DataTables("机票").AddNew   \'先新增一行
                    
                    dr("出票人") = _username
                    dr("旅行社") = _lxs
                    dr("添加日期") = Date.Today
                    dr("十位票号") = datas(0).SubString(4)
                    dr("票号") = datas(0).Replace("-","")
                    dr("航班号") = "VOID"
                    dr("国内国际") = gngj
                    dr("数据来源") = "BSP"
                Else
                    If rs(ii).Contains("REFUND") = True Then    \'若包含了ET-REFUND 要特殊处理
                        Dim dr As  DataRow = DataTables("机票").AddNew   \'先新增一行
                        dr("添加日期") = Date.Today
                        
                        dr("出票人") = _username
                        dr("旅行社") = _lxs
                        dr("十位票号") = datas(0).SubString(4)
                        dr("票号") = datas(0).Replace("-","")
                        dr("航班号") = "REFUND"
                        dr("国内国际") = gngj
                        dr("数据来源") = "BSP"
                    Else
                        Dim dr As  DataRow = DataTables("机票").AddNew   \'先新增一行
                        dr("添加日期") = Date.Today
                        
                        dr("出票人") = _username
                        dr("旅行社") = _lxs
                        dr("十位票号") = datas(0).SubString(4)
                        dr("票号") = datas(0).Replace("-","")
                        dr("行程") = datas(1) & datas(2)
                        dr("票款") = datas(3)
                        dr("导入税款") = datas(4)
                        dr("PNR") = datas(6)
                        dr("出票人") = datas(7)
                        dr("国内国际") = gngj
                        dr("数据来源") = "BSP"
                        
                    End If
                End If
            End If
            
        Next
    Next
    
    Tables("机票").save
    Functions.Execute("机票筛选树")
    
    
    
Else
    MessageBox.Show("权限不足!")
End If

--  作者:zhaohj611718
--  发布时间:2019/1/2 15:36:00
--  
请老师看看,找了半天没结果
********************************************************************************
*                CAAC  MIS  PASSTED-DAILY-SALES-REPORT                         *
*                                                                              *
*   OFFICE : BJS300    IATA NUMBER : 08314412    DEVICE : 1                    *
*   DATE   : 27NOV18                             AIRLINE:   ALL                *
--------------------------------------------------------------------------------
  TKT-NUMBER      ORIG-DEST  COLLECTION   TAXS   COMM       PNR   AGENT         
----------------  ---------  ----------- -----  ------    -----   -----         
232-3115320164    BJS BJS-EX   350.00    350.00  0.00%     KW756C 8086          
232-3115320165    BJS BJS-EX   350.00    350.00  0.00%     JV0K5L 8086          
232-3115320166    BJS BJS-EX   350.00    350.00  0.00%     JV0K5L 8086         
232-3115320177    BJS BJS-EX   350.00    350.00  0.00%     HQHKCC 8086          
232-3115320178    BJS BJS-EX   350.00    350.00  0.00%     HQHKCC 8086          
*==============================================================================*

--  作者:有点甜
--  发布时间:2019/1/2 16:09:00
--  

我这样测试没问题,请测试弹出的值分别是什么。

 

Dim _username, _lxs
msgbox(ClipBoard.GetText)
Dim rs As String()=ClipBoard.GetText.Replace(chr(10),"").split(chr(13))
If  rs(0).Contains("******************") = False Then  \'先简单判断一下格式是否正确
    msgbox("不可识别的格式!")
    Return Nothing
End If

Dim xg As Integer = rs(3).LastIndexOf("/")    \'找出/的位置
Dim gngj As String = ""   \'定义gngj来记录国内国际
msgbox(xg)
If xg >= 0 Then
    If rs(3).SubString(xg-1,1) = "1" Then
        gngj = "国际"
    Else
        If    rs(3).SubString(xg-1,1) = "2" Then
            gngj = "国内"
        End If
    End If
End If

Dim starts,Ends As new List(of Integer)   \'定义集合 来记录有效数据的开始行和结束行
For i As Integer = 0 To rs.Length -1
    If rs(i).Contains("TKT-NUMBER") Then
        starts.Add(i+2)     \'已经是真实行值了
    End If
    If rs(i).Contains("TOTAL TICKETS") Then
        ends.Add(i-2)    \'已经是真实行值了
    End If
Next
msgbox(starts.count)
msgbox(Ends.count)
For x As Integer = 0 To Ends.Count - 1   \'遍历每一大组有效数据
    For ii As Integer = starts(x) To Ends(x)
        Dim datas() As String = rs(ii).trim().Replace("    "," ").Replace("   "," ").Replace("  "," ").Split(" ")  \'这已经是提取到了每一个具体行了,并做好了分割
        Dim ddr As DataRow =  DataTables("机票").SQLFind("票号 = \'" & datas(0).Replace("-","") & "\'")
        If ddr Is Nothing Then   \'若 没有票号重复值
           
            If rs(ii).Contains("VOID") = True Then    \'若包含了viod 要特殊处理
                Dim dr As  DataRow = DataTables("机票").AddNew   \'先新增一行
               
                dr("出票人") = _username
                dr("旅行社") = _lxs
                dr("添加日期") = Date.Today
                dr("十位票号") = datas(0).SubString(4)
                dr("票号") = datas(0).Replace("-","")
                dr("航班号") = "VOID"
                dr("国内国际") = gngj
                dr("数据来源") = "BSP"
            Else
                If rs(ii).Contains("REFUND") = True Then    \'若包含了ET-REFUND 要特殊处理
                    Dim dr As  DataRow = DataTables("机票").AddNew   \'先新增一行
                    dr("添加日期") = Date.Today
                   
                    dr("出票人") = _username
                    dr("旅行社") = _lxs
                    dr("十位票号") = datas(0).SubString(4)
                    dr("票号") = datas(0).Replace("-","")
                    dr("航班号") = "REFUND"
                    dr("国内国际") = gngj
                    dr("数据来源") = "BSP"
                Else
                    Dim dr As  DataRow = DataTables("机票").AddNew   \'先新增一行
                    dr("添加日期") = Date.Today
                   
                    dr("出票人") = _username
                    dr("旅行社") = _lxs
                    dr("十位票号") = datas(0).SubString(4)
                    dr("票号") = datas(0).Replace("-","")
                    dr("行程") = datas(1) & datas(2)
                    dr("票款") = datas(3)
                    dr("导入税款") = datas(4)
                    dr("PNR") = datas(6)
                    dr("出票人") = datas(7)
                    dr("国内国际") = gngj
                    dr("数据来源") = "BSP"
                   
                End If
            End If
        End If
       
    Next
Next