2010-10-20 143 views
2

我正在研究從頁面上的文本文件獲取文本的應用程序。 實例鏈接:http://test.com/textfile.txtC#字符串操作

該文本文件包含以下文本:

1 Milk Stuff1.rar 
2 Milk Stuff2.rar 
3 Milk Stuff2-1.rar 
4 Union Stuff3.rar 

我所試圖做的是如下,從每一行去除一切,不同的是啓動「單詞」 'Stuff'以'.rar'結尾。

問題是,大多數像使用.Remove,.Split或.Replace這樣的簡單解決方案最終都會失敗。這是因爲,例如,格式化使用空格字符串結束返回此:

1 
Milk 
Stuff1.rar\n2 
Milk 
Stuff2.rar\n3 
Milk 
Stuff2-1.rar\n4 
Union 
Stuff3.rar\n 

我敢打賭,因爲它看起來是不是很難,但我會apreciate任何幫助,您可以給我。

PS:只要是明確的,這就是我想要它返回什麼:

Stuff1.rar 
Stuff2.rar 
Stuff2-1.rar 
Stuff3.rar 

我目前使用此代碼的工作:

  client.HeadOnly = true; 
      string uri = "http://test.com/textfile.txt"; 

      byte[] body = client.DownloadData(uri); 
      string type = client.ResponseHeaders["content-type"]; 
      client.HeadOnly = false; 

      if (type.StartsWith(@"text/")) 
      { 
       string[] text = client.DownloadString(uri); 

       foreach (string word in text) 
       { 
        if (word.StartsWith("Patch") && word.EndsWith(".rar")) 
        { 
         listBox1.Items.Add(word.ToString()); 
        } 
       } 
      } 

這顯然是不工作的,但你明白了。

預先感謝您!

+0

一個基於正則表達式的解決方案的思考。 – Kangkan 2010-10-20 08:52:26

回答

5

這應該工作:

 using (var writer = File.CreateText("output.txt")) 
     { 
      foreach (string line in File.ReadAllLines("input.txt")) 
      { 
       var match = Regex.Match(line, "Stuff.*?\\.rar"); 

       if (match.Success) 
        writer.WriteLine(match.Value); 
      } 
     } 
+0

非常感謝!我不知道你可以在正則表達式中使用通配符,這實際上很有意義。 :D我會盡快將其標記爲答案。感謝您的快速響應。 – Nick 2010-10-20 08:56:27

2

我會試圖爲這類事情使用正則表達式。

喜歡的東西

Stuff[^\s]*.rar 

將退出只是你需要的文本。

如何像一個函數:

public static IEnumerable<string> GetStuff(string fileName) 
{ 
    var regex = new Regex(@"Stuff[^\s]*.rar"); 
    using (var reader = new StreamReader(fileName)) 
    { 
     string line; 
     while ((line = reader.ReadLine()) != null) 
     { 
      var match = regex.Match(line); 
      if (match.Success) 
      { 
       yield return match.Value; 
      } 
     } 
    } 
} 
+0

感謝您的幫助,我決定使用上面的代碼,因爲它的工作原理並不是那麼耗費空間。但是再次感謝,我讚賞它。 – Nick 2010-10-20 09:04:17

+0

沒問題 - 你經常得到多個建議,你可以選擇最適用的事實是SO的強項之一。 – 2010-10-20 09:08:13

0
for(string line in text) 
{ 
    if(line.EndsWith(".rar")) 
    { 
     int index = line.LastIndexOf("Stuff"); 
     if(index != -1) 
     { 
      listBox1.Items.Add(line.Substring(index)); 
     } 
    } 
}