2011-09-10 118 views
0

我的文字file..i工作想知道如何來搜索文本文件中的字符串,然後執行對string.I操作已經寫了代碼,但有一些問題「如果條件」,當特定的字符串來臨時,控制跳到下一line..it不列入該字符串進行任何操作.. 下面是文本文件,從中我試圖線找到「MerchantNo:105838015」並在其上再進行子字符串操作,只得到number..There在該線路之間的空間.. MERCHANTNO:105838015代理代碼00913如何搜索文本文件中的字符串在C#中

這是代碼:

StreamReader sr = new StreamReader(fldr); 
     string line = null; 

     while ((line = sr.ReadLine()) != null) 
     { 
      str = line.Trim().Split(' '); 
      for (int i = 0; i < str.Length; i++) 
      { 
       if (str.ToString().ToUpper().Contains("MERCHANTNO:105838015")) 
       { 
         //str = line.Split(' '); 
         string MNo1 = line.Substring(15, 23); 
         MNo = Convert.ToInt32(MNo1.ToString()); 
       } 
       break; 

      } 

      //MessageBox.Show("Line is:" +line); 
     } 

     MessageBox.Show("MerchantNo is:" +MNo); 

請問我說我要做什麼?

+0

你爲什麼叫SUBSTR與15,23? –

+1

你一直在尋找的正是這樣的字符串:... 105838015?如果您事先知道這個號碼,則不需要解析並將其轉換爲Int32,因爲您已經知道它。從你的代碼中,你正在尋找它的硬編碼。 –

+0

你想改變洞穴流嗎?我不知道你想做什麼操作 - 因爲你的代碼說你描述什麼:什麼都不做,但檢查「MERCHANTNO:105838015」和子轉換從那裏到一個int變量MNO ...什麼*(?)應該*代碼呢? – Carsten

回答

4

我懷疑這就是問題所在:

if (str.ToString()...) 

你調用ToString一個字符串數組上。我懷疑你的意思是:

if (str[i].ToUpper().Contains(...)) 

話雖如此,但你爲什麼那麼使用一個子不明確的 - 爲什麼你打電話MNo1.ToString()MNo1已經是一個字符串...

我也建議你使用:

if (str[i].IndexOf("MERCHANTNO:105838015", 
        StringComparison.CurrentCultureIgnoreCase) > -1) 

(或類似的東西,這取決於你想用什麼樣的文化),而不是上殼體內各部分。

你也應該考慮使用foreach循環,而不是一個for循環:

foreach (string part in line.Trim().Split(' ')) 
{ 
    if (part.IndexOf(...) > -1) 
    { 
     ... 
    } 
} 
+0

我一直在使用,如果(STR [1] .IndexOf(「MERCHANTNO:105838015」嘗試, StringComparison .CurrentCultureIgnoreCase)) ,但它顯示了我的錯誤「無法隱式轉換類型‘詮釋’到‘布爾’」 ......還我會盡量做到如你所說,使用foreach循環.. – Nazima

+0

@Nazima:道歉,我忘了把之前編輯過的'> -1'位編輯好了。 –

0

這是一個有點混亂認爲這是什麼代碼做的,但我想你想確保,如果該文件包含此merchantno?您應該使用正則表達式,而不是子戲法。

隨着文本文件:

MERCHANTNO:10583218015 AGENT CODE 00913 
MERCHANO: 10421523838015 AGENT CODE 00913 
Some teeeext MERCHANTNO:105838015 AGENT CODE 00913 
Some text salalala ME 

和代碼:

var regi = new Regex(@"MERCHANTNO:\s*([0-9]*)"); 
string need = "105838015"; 
bool found = false; 

using (StreamReader reader = new StreamReader("file.txt")) 
{ 
    string line; 
    while ((line = reader.ReadLine()) != null) 
    { 
     var match = regi.Match(line); 
     if (match.Groups.Count == 2) 
     { 
      if (match.Groups[1].Value == need) 
      { 
       found = true; 
       break; 
      } 
     } 
    } 
} 

Console.WriteLine("Found: {0}", found); 

也許這是你想要的嗎?整我。

(對於字符串值測試,以避免012 == 12 INT解析)

1

我覺得如果你使用正則表達式您可以快速解決您的問題。所有的 首先在一個可變的讀取整個文件,然後應用正則表達式這一點。

您可以使用在表達分組獲得數量分別象下面這樣:

 int number = 0; 
     using (var sr = new StreamReader(fileName)) 
     { 
      string fileContent = sr.ReadToEnd(); 
      Regex regex = new Regex(@"(?<=.*MERCHANTNO:)(?<number>\d*)"); 
      var match = regex.Match(fileContent); 
      if (match.Groups["number"].Success) 
      { 
       number = Convert.ToInt32(match.Groups["number"].Value); 
      } 
     } 

     MessageBox.Show("MerchantNo is:" + number);