2013-05-01 110 views
0

我正在创建窗口窗体,它已经创建,我必须使用该代码和现在进一步处理的想法是,该代码在一个地方工作,但它不会在其他工作,它会给我一个错误消息长度不能小于零长度不能小于零

这是我的代码:

aspx.cs代码:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Data; 

namespace AQCConsolidator1 
{ 
    public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void btnGetData_Click(object sender, EventArgs e) 
    { 
     List<String> list = new List<String>(); 
     List<String> list1 = new List<String>(); 

     string request = @"RP/DCA1S219C/DCA1S219C   SL/SU 9APR13/2223Z 4YYTR7     
45 FA PAX 257-7242858184/ETOS/USD736.23/08APR13/DCA1S211E/49881     
    134/S3-6/P1                
46 FA PAX 257-7242858185/ETOS/USD736.23/08APR13/DCA1S211E/49881     
    134/S3-6/P2                
030 AF/FA 257-7242215364/ETOS/USD778.23/07APR13/DCA1S219C/     
    49881134/OS 850 K 31MAY TIAVIE/OS 087 K 31MAY VIEJFK/OS     
    088 L 09JUN JFKVIE/OS 847 L 10JUN VIETIA/MBYETI/PETRAQ(     
    ADT)                  
030 AF/FA 257-7242215365/ETOS/USD778.23/07APR13/DCA1S219C/     
    49881134/OS 850 K 31MAY TIAVIE/OS 087 K 31MAY VIEJFK/OS     
    088 L 09JUN JFKVIE/OS 847 L 10JUN VIETIA/MBYETI/JORGJIE(    
    ADT)                  
030 RF-WS-NMC-US/WSTMTFTP CR-DCA1S219C 49881134 SU 9999WS/RO     
    -9CCF46CE TNGW33TMT 00000000 07APR1829Z         
030/035 CF/FA 257-7242215364/ETOS/USD778.23/07APR13/DCA1S219C/     
    49881134/OS 850 K 31MAY TIAVIE/OS 088 L 09JUN JFKVIE/OS     
    087 K 31MAY VIEJFK/OS 847 L 10JUN VIETIA/MBYETI/PETRAQ(     
    ADT)                  
030/035 AF/FA 257-7242215364/ETOS/USD778.23/07APR13/DCA1S219C/     
    49881134/OS 850 K 31MAY TIAVIE/OS 087 K 31MAY VIEJFK/     
    MBYETI/PETRAQ(ADT) 

string request1 = @"RP/DCA1S219C/DCA1S219C   SL/SU 7FEB13/2215Z 8TXSAK     
36 FA PAX 125-7239038457/ETBA/07FEB13/DCA1S211E/49881134      
    /S4-5/P3                 
37 FA PAX 125-7239038458/ETBA/07FEB13/DCA1S211E/49881134      
    /S4-5/P1                 
38 FA PAX 125-7239038459/ETBA/07FEB13/DCA1S211E/49881134    @  
    /S4-5/P2                 
39 FB PAX 0700449140 TTP/ET/RT/INVJ OK ETICKET/S4-5/P1-3      
40 FE PAX BA ONLY/NONREF/NONEND SEE GGAIRBAGUSA -BG:BA/S4-5/P3     
41 FE PAX BA ONLY/NONREF/NONEND SEE GGAIRBAGUSA -BG:BA       
    /S4-5/P1-2                
42 FI PAX 0700449140 INV 0011436178/S4-5/P1-3         
43 FI PAX 0700449140 INV 0011436178/S6/P1-3          
44 FI PAX 0700449140 INV 0011436178/S7/P1-3          
45 FM *M*0.00A                 
46 FP CHECK                  
47 FT *BT1195364                
48 FV PAX BA/S4-5/P3               
49 FV PAX BA/S4-5/P1-2               
50 FY BULK/TBULK"; 
string request2 = @"RP/DCA1S219C/DCA1S219C   SL/SU 9APR13/2223Z 4YYTR7     
45 FA PAX 257-7242858184/ETOS/USD736.23/08APR13/DCA1S211E/49881     
    134/S3-6/P1                
46 FA PAX 257-7242858185/ETOS/USD736.23/08APR13/DCA1S211E/49881     
    134/S3-6/P2                
47 FB PAX 0800499541 TTP/ET/INVJ/RT OK ETICKET/S3-6/P1-2      
48 FE *M*//REFTHRUAGT/NONEND             
49 FI PAX 0800499541 INV 0011466820/S3-6/P1-2         
50 FI PAX 0800499541 INV 0011466820/S7/P1-2          
51 FI PAX 0800499541 INV 0011466820/S8/P1-2          
52 FM *M*8                  
53 FP CHECK                  
54 FT *815ZU                 
55 FV PAX OS/S3-6/P1-2"; 

list.Add(request); 
list.Add(request1); 
list.Add(request2); 

     MyClass1 obj1 = new MyClass1(); 
     DataTable datatable1 = obj1.GetNumber(list); 
     } 
    } 
} 

如果删除请求从我aspx.cs文件,则该代码的工作,但如果我包括它它给这个错误仍然等待回复我添加检查条件BU牛逼还是把它给我的错误

这是我的类代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 
using System.Text.RegularExpressions; 

namespace AQCConsolidator1 
{ 
class MyClass1 
{ 
    string output; 
    string subs; 

    DataTable dt = new DataTable(); 
    DataRow dr = null; 

    public DataTable GetNumber(List<string> request) 
    { 
     dt.Columns.Add("TickitNumber", typeof(string)); 

     foreach (string data in request) 
     { 
      string item = data; 
      while (item.Trim() != "") 
      { 
       dr = dt.NewRow(); 
       int r1 = item.IndexOf("\r",3); 
       subs = item.Substring(0, r1); ///Got error in this line 
       if (subs.Contains("ET")) 
       { 
        Regex regexs = new Regex(@"[0-9||-]{14}"); 
        foreach (Match m in regexs.Matches(subs)) 
        { 
         output = m.ToString(); 
         dr["TickitNumber"] = output; 
        } 
        dt.Rows.Add(dr); 
       } 
       item = item.Substring(subs.Length); 
       r1 = item.IndexOf("\r\n", 0); 
       item = item.Substring(r1); 
      } 
     } 
     return dt; 
    } 
} 
} 
+0

*哪里*是错误?你已经提交了很多代码,只是对发生的事情进行了模糊的描述。 – 2013-05-01 15:44:26

+0

你是否已经通过调试器来确保你的空字符串不止一个? – 2013-05-01 15:44:44

+0

'item.IndexOf(“\ r”,3)''item'中可能没有'“\ r”',所以这会返回'-1',然后你会试着'item.Substring(0 ,-1)'这不起作用。 – Corak 2013-05-01 15:45:02

回答

8
int r1 = item.IndexOf("\r",3); 
subs = item.Substring(0, r1); ///Got error in this line 

IndexOf将返回-1作为索引,如果没有找到该字符串。因此,您正试图在下一行中从索引0到索引-1调用SubString。您应该添加一个检查以确保在继续之前找到“\ r”。

+0

如何添加检查@Esoteric – amitesh 2013-05-01 16:07:16

+1

@amitesh - 当然你知道如何使用如果声明!你可以使用类似'if(r1> = 0){// code here}的东西。'只有在item = item.Substring(subs.Length);时r1> = 0 – 2013-05-01 19:33:47

+0

错误才执行其余的代码。这条startIndex的行不能大于字符串的长度。 – amitesh 2013-05-02 07:43:19

相关问题