[英]c# - Text File to Dictionary
我想將文本文件轉換為列表字典。 字典在其單獨的類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]);
}
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.