繁体   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