.net C# -检查Hashtable Key中字符串的一部分

np8igboo  于 2022-12-24  发布在  .NET
关注(0)|答案(1)|浏览(147)

我有两个.csv文件-
文件1-

EmployeeId  Username         BranchId   NewJoinee EmpType  AccessDetails
5543101    abc.username      40000        0        64     60060||60060
5543102    someone.username  40000        0        64     52474||52474
5543103    ABC.someone       40000        0        NULL     NULL
5543104    XZ.someone        40000        0        64      pppA082||

访问权限详细信息“列包含的详细信息为"CardNumber|分泌素|标记编号
File 2也是如此

EmployeeId  Username         BranchId   NewJoinee EmpType  AccessDetails
5000101    abc.username      40500        0        64     5555||60060
5000102    someone.username  40500        0        64     52474||1234
5000103    ABC.someone       40500        0        NULL     NULL
5000104    XZ.someone        40500        0        64      10A082||5644

我要对比这两份文件,我的条件是-

  • 如果卡号匹配但令牌ID不匹配,则不执行任何操作
  • 如果卡号不匹配但令牌ID匹配,则不执行任何操作
  • 如果访问详细信息为空,则将此员工详细信息打印到另一个文件
  • 如果卡号和令牌ID不匹配,则将此员工详细信息打印到另一个文件

我现在正在做这个,但是使用这个方法我只能实现第一个条件。我使用哈希表来存储文件的内容。我把卡号作为键,其余的细节作为值。
这就是我存储File 1的值的方式

if (!_File1.ContainsKey(cardnumber))
 _File1.Add(cardnumber, username + "," + branchId + "," + employeeID + "," + cardnumber + "," + tokennumber + "," + empType + "," + newJoinee);

以类似的方式,我将file 2的内容存储在另一个哈希表中,然后执行以下操作来读取file 2的数据并进行比较

//readingFile2 data
row = SplitCSV(line);

employeeID = row[employeeIndex].Trim().ToString();
username = row[UsernameIndex].Trim().ToString();
branchID = row[branchIdIndex].Trim().ToString();
newJoinee = row[njIndex].Trim().ToString();
emptype = row[emptypeIdIndex].Trim().ToString();
accessdetails = row[ValueIndex].Trim().ToString();

if (!accessdetails.Equals("NULL"))
{
    string[] values = value.Split('|');
    cardnumberfile2 = values[0];
    tokenumberFile2 = values[2];
}
else
{
    cardnumberfile2 = employeeID;
    tokennumberfile2 = "";
}

if(_file1.ContainsKey(cardnumberfile2))
{
   //reading values from File1
  
   // As cardnumber in file2 is present in the file1, then do nothing
}

我在想也许我应该把钥匙

key = cardnumber+tokennumber

然后可能执行一些操作,搜索令牌ID或卡号是否存在于此密钥中。因为在上述方法中,我可以测试卡号是否存在,因为它是两个文件中的密钥,但如果卡号不同,令牌编号相同(示例表中的第1行),此方法将失败
其次,我不知道如何处理空值列,因为这些记录没有唯一的链接值。
另外,我不拥有这些数据。我不能改变它。

wvmv3b1j

wvmv3b1j1#

可能有2个Map。数据结构可能如下所示:

List<ClassMappedToFileItem> fileData; //data loaded from the file
Dictionary<string, int> cardNumbers; // value is an index pointing to an item in the fileData list
Dictionary<string, int> tokenIds; // value is an index pointing to an item in the fileData list

相关问题