0

我对此有一个小问题。

我有一个 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();
        }
       }
4

1 回答 1

0

首先,您的代码至少包含两个错误:

您在一个循环中读取该行两次
您使用按位 OR (|) 运算符而不是逻辑运算符 (||)

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 测试

    if (split[1].ContainsAny("SBL/FO/Rpt", "SBL/Live Ins Apps","SBL/Port_Grp",
                             "SBL/Prices","SBL/SalesPerson"))
    {
        .....
    }
于 2012-06-06T08:29:25.280 回答