C# 如何将文件内容映射到现有字典c
因此,我试图做的是基于一个唯一的项映射两个不同文件的内容,在本例中是sampleName。其中一个文件的内容先前已添加到字典中,其中包含一个具有属性的列表和一个sampleName作为键 此示例名称也出现在具有以下格式的第二个文件中:C# 如何将文件内容映射到现有字典c,c#,file,dictionary,mapping,C#,File,Dictionary,Mapping,因此,我试图做的是基于一个唯一的项映射两个不同文件的内容,在本例中是sampleName。其中一个文件的内容先前已添加到字典中,其中包含一个具有属性的列表和一个sampleName作为键 此示例名称也出现在具有以下格式的第二个文件中: *Projectnummer;Datum;wetenschappelijke_naam;zakje;ring;klantnr "aNumber";"aDate";"scientificName";"123456";"12";"aNumber" e
*Projectnummer;Datum;wetenschappelijke_naam;zakje;ring;klantnr
"aNumber";"aDate";"scientificName";"123456";"12";"aNumber" etc..*
如果123456是sampleName,则在以前生成的字典中也会出现这种情况
这里的问题是,对于当前代码,字典CorrectSamplesDict中的错误sampleCode中添加了错误的项。信息的添加不是基于匹配的样本号,而是基于文件中行的顺序
如何检查样本名称是否匹配,以及需要添加哪些信息
try
{
if (File.Exists(fileName))
{
bool headerCollected = false;
int projectNumberId = -1;
int dateId = -1;
int scientificNameId = -1;
int sampleNameId = -1;
int ringId = -1;
int customerIdId = -1;
StreamReader reader = new StreamReader(fileName);
while (reader.Peek() > 4)
{
Sample sample = new Sample();
string line = reader.ReadLine();
line = line.Replace("\"" , string.Empty);
string[] lineParts = line.Split((char)59);
switch (headerCollected)
{
case false:
if (line.ToUpper().Contains("PROJECTNUMMER"))
{
for (int i = 0; i < lineParts.Length; i ++)
{
if (lineParts[i].ToUpper().Trim().Contains("DATUM")) { dateId = i; }
if (lineParts[i].ToUpper().Trim().Contains("WETENSCHAPPELIJKE_NAAM")) { scientificNameId = i; }
if (lineParts[i].ToUpper().Trim().Contains("ZAKJE")) { sampleNameId = i; }
if (lineParts[i].ToUpper().Trim().Contains("RING")) {ringId = i; }
if (lineParts[i].ToUpper().Trim().Contains("KLANTNR")) { customerIdId = i; }
if (lineParts[i].ToUpper().Trim().Contains("PROJECTNUMMER")) { projectNumberId = i; }
}
headerCollected = true;
}
break;
case true:
if (dateId != -1 && lineParts.Length > dateId) { sample.ProjectDate = lineParts[dateId].Trim(); }
if (sampleNameId != -1 && lineParts.Length > sampleNameId) { sample.SampleName = lineParts[sampleNameId].Trim(); }
if (customerIdId != -1 && lineParts.Length > customerIdId) { int.TryParse(lineParts[customerIdId].Trim(), out sample.CustomerNumber); }
if (projectNumberId != -1 && lineParts.Length > projectNumberId) { sample.ProjectNumber = lineParts[projectNumberId].Trim(); }
if (ringId != -1 && lineParts.Length > ringId) { sample.RingNumber = lineParts[ringId].Trim(); }
if (scientificNameId != -1 && lineParts.Length > scientificNameId) { sample.ScientificName = lineParts[scientificNameId].Trim(); }
List<Sample> sampleProperties = null;
Sample sampleVal = null;
if (correctSamplesDict.TryGetValue(sample.SampleName, out sampleProperties))
{
foreach (KeyValuePair<string, List<Sample>> items in correctSamplesDict)
{
foreach (Sample sampleValue in items.Value)
{
// initializes a new object for each iteration
sampleVal = new Sample();
sampleProperties = new List<Sample>();
// These values still are correct sampleVal.HeightOne = sampleValue.HeightOne;
sampleVal.HeightTwo = sampleValue.HeightTwo;
sampleVal.SizeOne = sampleValue.SizeOne;
sampleVal.SizeTwo = sampleValue.SizeTwo;
sampleVal.SampleName = sampleValue.SampleName;
// mapping goes wrong here (wrong sample information to the wrong sampleName)
sampleVal.ProjectDate = sample.ProjectDate;
sampleVal.ProjectNumber = sample.ProjectNumber;
sampleVal.CustomerNumber = sample.CustomerNumber;
sampleVal.RingNumber = sample.RingNumber;
sampleVal.ScientificName = sample.ScientificName;
sampleProperties.Add(sampleVal);
}
}
correctSamplesDict[sampleVal.SampleName] = sampleProperties;
}
break;
default:
break;
}
}
}
}
在您的代码中有许多事情看起来很奇怪:
if (correctSamplesDict.TryGetValue(sample.SampleName, out sampleProperties))
{
foreach (KeyValuePair<string, List<Sample>> items in correctSamplesDict)
{
foreach (Sample sampleValue in items.Value)
{
//skip...
}
}
correctSamplesDict[sampleVal.SampleName] = sampleProperties;
}
您正在布尔变量上使用开关/大小写,而不是if/else
您正在使用一个字典您可以共享您读取@user3309936的示例文件吗?您给出的示例不清楚您在代码中实现的逻辑。第一个示例文件的内容在另一部分代码中实现并保存在字典中。我在本部分中阅读的示例具有我在问题中解释的格式。标题如下所示:Projectnummer;资料wetenschappelijke_naam;扎克耶桑普伦姆;戒指三K党。这个标题包含了所有的信息。我不太清楚我是否理解你想知道的内容。。
if (correctSamplesDict.TryGetValue(sample.SampleName, out sampleProperties))
{
foreach (KeyValuePair<string, List<Sample>> items in correctSamplesDict)
{
foreach (Sample sampleValue in items.Value)
{
//skip...
}
}
correctSamplesDict[sampleVal.SampleName] = sampleProperties;
}
if (correctSamplesDict.TryGetValue(sample.SampleName, out sampleProperties))
{
foreach (Sample sampleValue in sampleProperties)
{
sampleValue.ProjectDate = sample.ProjectDate;
sampleValue.ProjectNumber = sample.ProjectNumber;
sampleValue.CustomerNumber = sample.CustomerNumber;
sampleValue.RingNumber = sample.RingNumber;
sampleValue.ScientificName = sample.ScientificName;
}
}