2013-05-01 107 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

相關問題