簡體   English   中英

c# - 文本文件到字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM