阅读文本文件并添加到列表中

时间:2014-09-20 11:43:06

标签: c# list file-io

我有这样的文本文件。我想逐行阅读并将这些信息存储到List<Store>Store是自定义类型。

Store ID: 01
Name: Kingfisher
Branch Number: 1
Address: 23 Emerson St
Phone: 422361609
-----END OF RECORD-----

Store ID: 02
Name: Harvey
Branch Number: 2
Address: 23 Korby St
Phone: 422361609
-----END OF RECORD-----

Store ID: 175
Name: Roger
Branch Number: 4
Address: 275 Carmody Rd
Phone: 428395719
-----END OF RECORD-----

这是我正在使用的。因为记录始终与列表中显示的顺序一致,所以我逐行阅读并分配store.IDstore.name,...直到它到达记录的最终属性为{{1然后,它会将它添加到List中,并在store.phoneNumber循环时继续foreach循环。

但问题是当我在列表中搜索时,它只能返回最终记录。似乎List只有一个元素,这是最终记录。任何人都可以指出我错在哪里吗?

Store ID

4 个答案:

答案 0 :(得分:4)

我会使用LINQ代替Batch方法来创建批量的行,以便您可以轻松设置属性:

File.ReadLines("path")
.Batch(5)
.Select(x => x.ToList())
.Select(values => new Store 
                  {
                     ID = values[0].Split(':').Trim(),
                     name = values[1].Split(':').Trim(),
                     branchNo = int.Parse(values[2].Split(':').Trim()),
                     address = values[3].Split(':').Trim(),
                     phoneNumber =int.Parse(values[4].Split(':').Trim())
                  }.ToList();

您需要添加对MoreLINQ库的引用才能使用Batch方法。

答案 1 :(得分:1)

        List<Store> stores = new List<Store>();
            var storeTemp = new Store();

        foreach (string line in File.ReadAllLines(@"C:\Store.txt"))
        {
            // You needto create a new instance each time
            if (line.Contains("Store ID: "))
                storeTemp.ID = line.Substring(10);
            if (line.Contains("Name: "))
                storeTemp.name = line.Substring(6);
            if (line.Contains("Branch Number: "))
                storeTemp.branchNO = Convert.ToInt32(line.Substring(15));
            if (line.Contains("Address: "))
                storeTemp.address = line.Substring(9);
            if (line.Contains("Phone: "))
            {
                storeTemp.phoneNumber = Convert.ToInt32(line.Substring(7));
                stores.Add(storeTemp);
                storeTemp = new Store(); // You need to recreate the object, otherwise you overwrite same instance

            }
        }

答案 2 :(得分:0)

您每次都会在storeTemp的内存中创建一个新空间。目前,您正在将数据写在同一位置。

答案 3 :(得分:0)

只需将商店类型从Class更改为Struct

即可