gpt4 book ai didi

c# - 文本文件到字典

转载 作者:太空宇宙 更新时间:2023-11-03 22:53:58 24 4
gpt4 key购买 nike

我想把一个文本文件变成一个列表字典。字典在其单独的类 BaseDict 中声明为:

public static Dictionary<string, List<string>> myLists = new Dictionary<string, List<string>>();

填充它的方法在不同的类中,如下所示:

 public void TextFileToDictionary2()
{
using (var sr = new StreamReader(File_Path))
{
string line = null;
List<string> InputLineList = new List<string>();
while ((line = sr.ReadLine()) != null)
{
InputLineList.Clear();

// Slice Substrings
string AP = line.Substring(0, 7);
string Address = line.Substring(8, 45);
string JDate = line.Substring(54, 3);
string BMFline = line.Substring(57, 6);
string POD = line.Substring(68, 11);
string DateApok = line.Substring(79, 4);
string checkdigit1 = line.Substring(83, 1);
string poso = line.Substring(84, 9);
string checkdigit2 = line.Substring(93, 1);
string GDate = line.Substring(94, 8);
string AType = line.Substring(102, 2);
string NinPacket = line.Substring(106, 5);

// Construct List
InputLineList.Add(AP);
InputLineList.Add(Address);
InputLineList.Add(JDate);
InputLineList.Add(BMFline);
InputLineList.Add(POD);
InputLineList.Add(DateApok);
InputLineList.Add(checkdigit1);
InputLineList.Add(poso);
InputLineList.Add(checkdigit2);
InputLineList.Add(GDate);
InputLineList.Add(AType);
InputLineList.Add(NinPacket);

//Console.WriteLine(InputLineList[0] + InputLineList[1] + InputLineList[2]);
//BaseDict.niarxosfileadv.Add(POD, InputLineList);
BaseDict.myLists.Add(POD, InputLineList);
Console.WriteLine(BaseDict.myLists[POD][0] + BaseDict.myLists[POD][1] + BaseDict.myLists[POD][2]);


}
Console.WriteLine("#");
Console.WriteLine(BaseDict.myLists["70503490702"][0] + BaseDict.myLists["70503490702"][1] + BaseDict.myLists["70503490702"][2]);
Console.WriteLine(BaseDict.myLists["33221051805"][0] + BaseDict.myLists["33221051805"][1] + BaseDict.myLists["33221051805"][2]);

foreach (KeyValuePair<string, List<string>> kvp in BaseDict.myLists)
{
Console.WriteLine("#");
Console.WriteLine(kvp.Key + "@" + kvp.Value[0] + kvp.Value[1]);
Console.WriteLine(kvp.Key + "@" + BaseDict.myLists[kvp.Key][0] + BaseDict.myLists[kvp.Key][1]);
}
}
}

输入文件如下所示:

0000039#XXXXXX                25000YYYYYYY    #1491505400010070503490702030750000078006201
0000040#zzzzzz 21300FFFFFFF #1491487800010533221051805030720000245001201

我的问题是它似乎没有正确加载字典,这个声明:

BaseDict.myLists.Add(POD, InputLineList);
Console.WriteLine(BaseDict.myLists[POD][0] + BaseDict.myLists[POD][1] + BaseDict.myLists[POD][2]);

为键值对生成了正确的结果,但是下面的键值对(带有硬编码键,循环后的键)只给我在字典中输入的最后一个键的值。

最佳答案

您在每个循环中重写您的列表。 List是引用类型,所以每次循环都要新建List,防止Dictionary改写数据

使用一些类而不是子字符串列表也更好

List<string> InputLineList;
while ((line = sr.ReadLine()) != null)
{
InputLineList = new List<string>();
// InputLineList.Clear();

// Slice Substrings
string AP = line.Substring(0, 7);
string Address = line.Substring(8, 45);
string JDate = line.Substring(54, 3);
string BMFline = line.Substring(57, 6);
string POD = line.Substring(68, 11);
string DateApok = line.Substring(79, 4);
string checkdigit1 = line.Substring(83, 1);
string poso = line.Substring(84, 9);
string checkdigit2 = line.Substring(93, 1);
string GDate = line.Substring(94, 8);
string AType = line.Substring(102, 2);
string NinPacket = line.Substring(106, 5);

// Construct List
InputLineList.Add(AP);
InputLineList.Add(Address);
InputLineList.Add(JDate);
InputLineList.Add(BMFline);
InputLineList.Add(POD);
InputLineList.Add(DateApok);
InputLineList.Add(checkdigit1);
InputLineList.Add(poso);
InputLineList.Add(checkdigit2);
InputLineList.Add(GDate);
InputLineList.Add(AType);
InputLineList.Add(NinPacket);

//Console.WriteLine(InputLineList[0] + InputLineList[1] + InputLineList[2]);
//BaseDict.niarxosfileadv.Add(POD, InputLineList);
BaseDict.myLists.Add(POD, InputLineList);
Console.WriteLine(BaseDict.myLists[POD][0] + BaseDict.myLists[POD][1] + BaseDict.myLists[POD][2]);


}
...

关于c# - 文本文件到字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46362447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com