2014-08-31 23 views
0

我有这样的:检查线路有参数否则跳过行

if (line.Contains("nosyn_name_last_exact:(qxq")) 
{ 
    var temp = line.Split(FirstSeparator, StringSplitOptions.RemoveEmptyEntries)[1]; 
    if (temp.Length > 1) 
    { 
     var result2 = temp.Split(SecondSeparator, 
            StringSplitOptions.RemoveEmptyEntries)[0]; 
     //result2[1].Split(')')[0].Dump(); 
     listNames.Add(result2); 
    } 

    //Console.WriteLine(result2);  
} 

,这是输出:

Console.WriteLine("Url " + "\t\t\t\tLast Name"); 
int index = -1; 

foreach (var key in times.Keys) 
{ 
    if (key.Contains("Url")) 
    { 
     index++; 
     Console.WriteLine("{0}: {1} {2}", key, times[key].TotalSeconds, "\t\t" + listNames[index]); 
    } 
    else 
    { 
     Console.WriteLine("{0}: {1}", key, times[key].TotalSeconds); 
    } 
} 

,这是我用的台词:

23.9.66:80/solr_3.6/wiewaswie_live/select/ qt=edismax_nosyn_a2aperson&q=(johanna huisman)&fq={!tag%3Dalldoctypes}doc_type:1&fq=date_main:[18980000 TO 19773112]&facet.query={!ex%3Dalldoctypes}doc_type:3 AND (b_public:1 OR fk_account:(16209514))&facet.query={!ex%3Dalldoctypes}doc_type:2 AND (b_public:1 OR fk_account:(16209514))&spellcheck=true&spellcheck.count=-3&start=230&sort=name_last asc, score desc&omitHeader=true 
2014-08-25 15:36:32,246 DEV avqih5cp053gloqfdtd5iaez 0 Q . http://10.123.9.66:80/solr_3.6/wiewaswie_live/select/ qt=edismax_nosyn_a2aperson&q=(Pieter van der Meulen)&fq={!tag%3Dalldoctypes}doc_type:1&fq=(fk_province:1)&facet.query={!ex%3Dalldoctypes}doc_type:3 AND (b_public:1)&facet.query={!ex%3Dalldoctypes}doc_type:2 AND (b_public:1)&spellcheck=true&spellcheck.count=-3&start=20&sort=name_last asc, score desc&omitHeader=true 
2014-08-25 15:36:32,324 DEV avqih5cp053gloqfdtd5iaez 89 R O http://10.123.9.66:80/solr_3.6/wiewaswie_live/select/ qt=edismax_nosyn_a2aperson&q=(Pieter van der Meulen)&fq={!tag%3Dalldoctypes}doc_type:1&fq=(fk_province:1)&facet.query={!ex%3Dalldoctypes}doc_type:3 AND (b_public:1)&facet.query={!ex%3Dalldoctypes}doc_type:2 AND (b_public:1)&spellcheck=true&spellcheck.count=-3&start=20&sort=name_last asc, score desc&omitHeader=true 
2014-08-25 15:36:32,698 DEV 1eltnkbwb1na30pvxp5nsaxi 0 Q . http://10.123.9.66:80/solr_3.6/wiewaswie_live/select/ qt=edismax_nosyn_a2aperson&q=(willem breedenoord)&fq={!tag%3Dalldoctypes}doc_type:1&facet.query={!ex%3Dalldoctypes}doc_type:3 AND (b_public:1)&facet.query={!ex%3Dalldoctypes}doc_type:2 AND (b_public:1)&spellcheck=true&spellcheck.count=-3&start=0&sort=name_last asc, score desc&omitHeader=true 
2014-08-25 15:36:32,730 DEV 1eltnkbwb1na30pvxp5nsaxi 35 R O http://10.123.9.66:80/solr_3.6/wiewaswie_live/select/ qt=edismax_nosyn_a2aperson&q=(willem breedenoord)&fq={!tag%3Dalldoctypes}doc_type:1&facet.query={!ex%3Dalldoctypes}doc_type:3 AND (b_public:1)&facet.query={!ex%3Dalldoctypes}doc_type:2 AND (b_public:1)&spellcheck=true&spellcheck.count=-3&start=0&sort=name_last asc, score desc&omitHeader=true 
2014-08-25 15:36:32,792 DEV 0pqbpdeurbtlp312ysf12nu1 2321 R O http://10.123.9.66:80/solr_3.6/wiewaswie_live/select/ qt=standard_a2aperson&q=*:*&fq=(nosyn_name_last_exact:(qxqbroekhuijzenqxq))&spellcheck.q=(qxqbroekhuijzenqxq)&fq={!tag%3Dalldoctypes}doc_type:1&fq=date_main:[17000101 TO 18503112]&facet.query={!ex%3Dalldoctypes}doc_type:3 AND (b_public:1)&facet.query={!ex%3Dalldoctypes}doc_type:2 AND (b_public:1)&spellcheck=true&spellcheck.count=-3&start=0&sort=name_last asc, score desc&omitHeader=true 

所以,如果一行包含参数:nosyn_name_last_exact:(qxq

然后它必须显示结果,否则滑动该行。但是我得到错误:索引超出了数组的范围。这段代码:

catch (Exception e) 
{ 
    Console.WriteLine("An error occured while attempting to access the source file at {0}", sourceFile); 
} 

OKE,如果我这样做是这样的:

var source = "2014-08-25 15:36:32,730 DEV 1eltnkbwb1na30pvxp5nsaxi 35 R O http://10.123.9.66:80/solr_3.6/wiewaswie_live/select/ qt=edismax_nosyn_a2aperson&q=(willem breedenoord)&fq={!tag%3Dalldoctypes}doc_type:1&facet.query={!ex%3Dalldoctypes}doc_type:3 AND (b_public:1)&facet.query={!ex%3Dalldoctypes}doc_type:2 AND (b_public:1)&spellcheck=true&spellcheck.count=-3&start=0&sort=name_last asc, score desc&omitHeader=true"; 
string[] FirstSeparator = new string[] { "nosyn_name_last_exact:(qxq" }; 
string[] SecondSeparator = new string[] { "qxq)" }; 
var temp = source.Split(FirstSeparator, StringSplitOptions.RemoveEmptyEntries)[1]; 
var result = temp.Split(SecondSeparator, StringSplitOptions.RemoveEmptyEntries)[0]; 
result.Dump("Result: "); 

我得到的错误:

指数数组的边界之外。

,但如果我这样做是这样的:

var source = "2014-08-25 15:36:32,792 DEV 0pqbpdeurbtlp312ysf12nu1 2321 R O http://10.123.9.66:80/solr_3.6/wiewaswie_live/select/ qt=standard_a2aperson&q=*:*&fq=(nosyn_name_last_exact:(qxqbroekhuijzenqxq))&spellcheck.q=(qxqbroekhuijzenqxq)&fq={!tag%3Dalldoctypes}doc_type:1&fq=date_main:[17000101 TO 18503112]&facet.query={!ex%3Dalldoctypes}doc_type:3 AND (b_public:1)&facet.query={!ex%3Dalldoctypes}doc_type:2 AND (b_public:1)&spellcheck=true&spellcheck.count=-3&start=0&sort=name_last asc, score desc&omitHeader=true"; 
string[] FirstSeparator = new string[] { "nosyn_name_last_exact:(qxq" }; 
string[] SecondSeparator = new string[] { "qxq)" }; 
var temp = source.Split(FirstSeparator, StringSplitOptions.RemoveEmptyEntries)[1]; 
var result = temp.Split(SecondSeparator, StringSplitOptions.RemoveEmptyEntries)[0]; 
result.Dump("Result: "); 

那么结果将是: 结果:

broekhuijzen

但是我对文本文件更多的线,因此,如果没有找到,然后跳过。

奥凯,我现在有这样的:

var source = "2014-08-25 15:36:32,792 DEV 0pqbpdeurbtlp312ysf12nu1 2321 R O http://10.123.9.66:80/solr_3.6/wiewaswie_live/select/ qt=standard_a2aperson&q=*:*&fq=(nosyn_name_last_exact:(qxqbroekhuijzenqxq))&spellcheck.q=(qxqbroekhuijzenqxq)&fq={!tag%3Dalldoctypes}doc_type:1&fq=date_main:[17000101 TO 18503112]&facet.query={!ex%3Dalldoctypes}doc_type:3 AND (b_public:1)&facet.query={!ex%3Dalldoctypes}doc_type:2 AND (b_public:1)&spellcheck=true&spellcheck.count=-3&start=0&sort=name_last asc, score desc&omitHeader=true"; 
string[] FirstSeparator = new string[] { "nosyn_name_last_exact:(qxq" }; 
string[] SecondSeparator = new string[] { "qxq)" }; 
var temp = source.Split(FirstSeparator, StringSplitOptions.RemoveEmptyEntries); 
if(temp.Length > 1) 
{ 
temp[1].Split(')')[0].Dump(); 
//var result = temp.Split(SecondSeparator, StringSplitOptions.RemoveEmptyEntries)[0]; 
//result.Dump("Result: "); 
} 

,结果是:broekhuijzenqxq。但它必须是:broekhuijzen,所以没有qxq

我只是不明白为什么它放在这里错了:

foreach (var key in times.Keys) 
      { 
       if (key.Contains("Url")) 
       { 
        index++; 
        Console.WriteLine("{0}:{1} {2}",key, times[key].TotalSeconds, "\t\t" + listNames[index]); 
       } 
       else 
       { 
        Console.WriteLine("{0}:{1}",key, times[key].TotalSeconds); 
       } 
      } 

它计数9 - 这样是正确的,但我仍然得到错误BYT这line:listNames [index]); -

类型“System.ArgumentOutOfRangeException”未处理的异常在mscorlib.dll发生

其他信息:索引超出范围。必须是非负数且小于集合的大小。

+0

有什么尝试?好像你在瞄准一个不存在的文件 – Noctis 2014-08-31 09:44:10

+0

?当然我有文件,那不是问题。 const string sourceFile = @“testSolar.txt”;但问题是,当文件中不存在属性nosyn_name_last_exact时,它不会扫描该行 – savantKing 2014-08-31 09:47:46

+0

不太清楚您如何使用什么以及您期望的位置。什么是'times',它与'listNames'(如果有的话)有什么关系,等等。 – Noctis 2014-08-31 10:08:50

回答

0

我的猜测是:
你分裂,并试图在这里数组索引1访问元素:var temp = source.Split(FirstSeparator, StringSplitOptions.RemoveEmptyEntries)[1]; 很显然,如果拆分不包含您的分隔符,你不会有该元素,所以你会得到一个超出界限的例外。

您应该只有代码INSIDE块是位在您检查source变量实际上有你.Contains("nosyn_name_last_exact:(qxq"))


尝试:

if (line.Contains("nosyn_name_last_exact:(qxq")) 
{ 
    string[] FirstSeparator = new string[] { "nosyn_name_last_exact:(qxq" }; 
    string[] SecondSeparator = new string[] { "qxq)" }; 
    var temp = line.Split(FirstSeparator, StringSplitOptions.RemoveEmptyEntries)[1]; 
    var result = temp.Split(SecondSeparator, StringSplitOptions.RemoveEmptyEntries)[0]; 
    result.Dump("Result: "); 
} 

不应该抛出

+0

如果您显示它,将更清晰 – savantKing 2014-08-31 13:09:43

+0

您提问或评论的方式是通过留言。不是通过编辑答案。如果你想要的话,你可以编辑你的问题。在任何情况下,如果仍然遇到数组异常,请在其中放置一个调试点,并确保您的数组具有您尝试访问的项目(显然,事实并非如此,因为它会引发异常,但在你的代码中将很容易找出为什么或发生了什么) – Noctis 2014-08-31 13:54:40

+0

Iv添加更多信息 – savantKing 2014-08-31 14:05:38