2011-11-11 100 views
0

我有一個名爲Function類的功能,如下圖所示:發送一個字符串數組作爲參數傳遞給函數

public int SearchedRecords(String [] recs) 
{ 
    int counter = 0; 
    String pat = "-----"; 
    String[] records = recs; 

    foreach (String line in records) 
    { 
     if (line.Contains(pat) == true) 
     { 
      counter++; 
     } 
    } 

    return counter; 
} 

我打電話來,從我的主類這種方法是這樣的:

 String [] file = File.ReadAllLines("C:/Users.../results.txt"); 
     int counter = Function.SearchedRecords([]file); 

但我得到一個錯誤說:

;預計

有什麼不對?


另一個問題是:在上述功能從一個文件中的所有行計數與他們的圖案-----(即使具有更短劃線,或者如果線短劃線之前或之後有一些字符)。我對嗎?

這就像Java中的模式,所以也許有另一種方式。
你能賜教嗎?

+1

'如果(line.Contains(PAT)==真)'可以改爲'如果(line.Contains(PAT))'不失去任何意義 –

回答

4

從參數中刪除[]。

例如

int counter = Function.SearchedRecords(file); 

是的,你約的行爲假設包含方法是正確的 - 你會匹配包含連續五年破折號,任何線路無論是之前或之後他們什麼字符。

如果你想解析正好五破折號,沒有之前或之後沒有什麼,我建議看看RegEx類(正則表達式)。

+0

謝謝,但現在我得到一個其他錯誤..一個對象引用對於非靜態字段,方法,por屬性是必需的(Function.SearchMethod([]) – tequilaras

+3

這是因爲你像一個靜態方法那樣調用SearchedRecords,但並沒有將它聲明爲一個。代碼你需要創建一個新的實例或者定義類似這樣的方法:「public static int SearchedRecords(String [] recs)」 –

+0

working .. thanks ... – tequilaras

1

將其更改爲

int counter = Function.SearchedRecords(file); 
+0

謝謝,但現在我得到了一個其他的錯誤..一個對象的引用是非靜態字段,方法,por屬性(Function.SearchMethod([]) – tequilaras

1

從方法調用中刪除'[]'。是的,你的功能似乎在計算你想要的。

+0

謝謝,但現在我得到了一個其他錯誤..一個對象引用是非靜態字段,方法,por屬性(Function.SearchMethod([])所必需的 – tequilaras

2

變化

int counter = Function.SearchedRecords([]file); 

int counter = Function.SearchedRecords(file); 

,是的,這將工作,對於字符串。 但是,Contains區分大小寫,如果您匹配的是名稱或具有字母字符的其他字符串,則該案例必須完全相同才能匹配,例如, line.Contains("Binary Worrier")將不匹配一個字符串「Hello hello」。

而且,整個文件讀入內存是好的,如果你知道該文件將永遠是小,這種方法獲取低效率的較大的文件。 最好總是使用類似System.IO.StreamReaderSystem.IO.File.ReadLines(在.Net 4和更高版本中可用),這些允許您一次使用文件一行。例如

using (var reader = new System.IO.StreamReader("MyFile.txt")) 
{ 
    while(!reader.EndOfStream) 
    { 
     string line = reader.ReadLine(); 
     if (line.Contains(pattern)) 
      counter++; 
    } 
} 
1

首先,您需要創建一個函數類的實例,然後運行該函數。希望下面的代碼可以幫助

Function fb = new Function(); 
int counter = fb.SearchedRecords(file); 

現在,你正在使用SearchRecords爲靜態類不需要實例化的靜態函數。

1

您可以在更短的方式使用LINQ做到這一點:

int counter = file.Count(line => line.Contains("-----")); 
相關問題