2012-06-06 27 views
0

我有一個小問題。用c匹配用戶角色#

我有一個csv文件,第一列中有用戶,第二列中有用戶權利。

下面是該文件的一個示例:

USER,   ENTITLEMENTS 
ACC_EXTRACT, SBL/All Ins Apps 
ACC_EXTRACT, SBL/PRC 
ACC_RECON, SBL/AccountingAdmin 
ACC_RECON, SBL/All Ins Apps 

什麼,我試圖做的是要檢查哪些用戶有特定的 的權利,而我可以分配的作用。例如,用戶ACC_EXTRACT有兩個權利:SBL/All Ins Apps和SBL/PRC ,我想爲他分配角色x。我如何閱讀文件並檢查哪些用戶被分配給哪個用戶?

這是我到目前爲止的代碼,但我不知道它是否工作,或者如果它的效率。

while ((line = sr.ReadLine()) != null) 
     { 
      users = sr.ReadLine(); 
      string[] split = users.Split(','); 

      if (split[1].Contains("SBL/FO/Rpt") | split[1].Contains("SBL/Live Ins    Apps") | split[1].Contains("SBL/Port_Grp") | split[1].Contains("SBL/Prices") | split[1].Contains("SBL/SalesPerson")) 
      { 
       Console.WriteLine(split[1] + " " + split[0]); 
       sw.WriteLine(split[0] + " , " + "Front Office - SalesPerson"); 
       sw.Flush(); 
     } 
     } 

回答

0

首先,你的代碼包含至少兩個錯誤:

你在一個循環
可以使用位或讀取的行兩次(|)運算符代替邏輯一(中|| )

while ((users = sr.ReadLine()) != null) 
{ 
    string[] split = users.Split(','); 
    if (split[1].Contains("SBL/FO/Rpt") || 
     split[1].Contains("SBL/Live Ins Apps") || 
     split[1].Contains("SBL/Port_Grp") || 
     split[1].Contains("SBL/Prices") || 
     split[1].Contains("SBL/SalesPerson")) 
    { 
     Console.WriteLine(split[1] + " " + split[0]); 
     sw.WriteLine(split[0] + " , " + "Front Office - SalesPerson"); 
     sw.Flush(); 
    } 
} 

我也將增加一個擴展方法的字符串類是這樣的:

public static bool ContainsAny(this string s, params string[] values) 
    { 
     return values.Any(x => x.Equals(s)); 
    } 

簡化,如果測試通過這種方式

if (split[1].ContainsAny("SBL/FO/Rpt", "SBL/Live Ins Apps","SBL/Port_Grp", 
          "SBL/Prices","SBL/SalesPerson")) 
    { 
     ..... 
    } 
+0

謝謝史蒂夫 – Trishen