none
讀文字檔 where contains 集合 RRS feed

  • 問題

  • 我現在有段程式

    var Fi = from rline in File.ReadLines(htmlFilePath)
                         where !rline.Contains("殼")
                         select new { Line = rline };

    但Where的部分,為了要可以再增加

    所以想改為一樣用讀取檔案的方式來做

    於是我改成

    var Fi_2 = from rline in File.ReadLines(htmlFilePath2)
    select new { Line = rline };

    var Fi = from rline in File.ReadLines(htmlFilePath)
    where Fi_2.Any(s => !rline.Contains(s.Line))
    select new { Line = rline };

    但這行無效 ,想請問我該怎麼做呢??

    謝謝
    2013年1月29日 下午 04:00

解答

  • Hi,

    你的Any用錯了吧~~

    var Fi_2 = from rline in File.ReadLines(htmlFilePath2)
      select rline;

    var Fi = from rline in File.ReadLines(htmlFilePath)
    where !Fi_2.Any(s => rline.Contains(s))
    select rline;


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/

    • 已提議為解答 亂馬客 2013年1月31日 上午 01:22
    • 已標示為解答 犀利 2013年1月31日 上午 09:18
    2013年1月30日 上午 02:47

所有回覆

  • 先把 fi 濾完,再到 fi_2 做你要的查詢。


    學習不是查個 Google 套個書上的範例就算了,而是去熟悉了解每個程式碼背後的意義,否則就算學個幾百年,它也不會是你的。

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2013年1月30日 上午 12:23
    版主
  • Hi,

    你的Any用錯了吧~~

    var Fi_2 = from rline in File.ReadLines(htmlFilePath2)
      select rline;

    var Fi = from rline in File.ReadLines(htmlFilePath)
    where !Fi_2.Any(s => rline.Contains(s))
    select rline;


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/

    • 已提議為解答 亂馬客 2013年1月31日 上午 01:22
    • 已標示為解答 犀利 2013年1月31日 上午 09:18
    2013年1月30日 上午 02:47
  • 您好,
    不知道有沒有誤會您的想法,
    如果是字串array的比較,可參考「Enumerable 方法」!

    string htmlFilePath2 = @"h:\a.txt";
    string htmlFilePath = @"h:\b.txt";
    var Fi = from rline in File.ReadLines(htmlFilePath)
    		 select rline;
    
    var Fi_2 = from rline in File.ReadLines(htmlFilePath2)
    		   select rline;
    
    var Fi_Except = Fi.Except(Fi_2);
    var Fi_Intersect = Fi.Intersect(Fi_2);
    
    var Fi_Except2 = Fi.Except(from rline in File.ReadLines(htmlFilePath2)
    						   select rline);
    var Fi_Intersect2 = Fi.Intersect(from rline in File.ReadLines(htmlFilePath2)
    								 select rline);


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年1月30日 上午 02:54
  • 我想用 Fi_2 來過濾 Fi

    用了 where !Fi_2.Any(s => rline.Contains(s)) 

    會出現 "無法從關閉的 TextReader 讀取。"

    而 var Fi_Except = Fi.Except(Fi_2);

    是不是要整句一樣才算呢??

    我的 Fi 的資料像是這樣 : 雙色拼接雕花流蘇牛津鞋

    而 Fi_2 : 鞋

    想用 Fi_2 去過濾掉 Fi 中所有的鞋子

    謝謝
    2013年1月30日 下午 12:04
  • 蹂躪大大說的應該就符合您的需求!

    請參考下面的Code,

    /*
    a.txt的內容為
    雙色拼接雕花流蘇牛津鞋
    牛津鞋
    1
    雙色鞋
    雕花筆
    2
    3
    4
    雙色鞋
    5
    
    b.xtx的內容為
    鞋
    筆
    
    依 蹂躪 所說的,結果為
    1
    2
    3
    4
    5
    */
    
    string htmlFilePath = @"h:\a.txt"; // 雙色拼接雕花流蘇牛津鞋 ...等資料
    string htmlFilePath2 = @"h:\b.txt"; // 鞋
    var Fi_2 = from rline in File.ReadLines(htmlFilePath2)
    		 select rline;
    var Fi_ExceptF2 =  from rline in File.ReadLines(htmlFilePath)
    					where !Fi_2.Any(s => rline.Contains(s))
    					select rline ;


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年1月31日 上午 01:24