如何从文本文件中取出相同名称的最后一行?

时间:2015-11-11 03:02:33

标签: c# winforms list gridview text-files

我试图将一些数据加载到gridview中,对不起,如果我的措辞不好或很奇怪,但我的意思是,让我说我的文本文件有这些数据

Name1,123
Name1,133
Name1,143
Name2,533
Name2,233
Name2,973
Name2,313
Name3,533
Name3,233
Name3,973
Name3,213
...

我只想取Name1,Name2,Name3的最后一行并插入gridview

Name1,143
Name2,313
Name3,213

随后,我将尝试更新gridview单元格,如果在文本文件中进一步向下,则会再次出现相同的名称。但是啊我试图首先获得这部分。

所以我一直在尝试使用foreach尝试readline,并将它们全部添加进去,然后删除具有相同名称的那些。但它没有删除任何一个。

我的代码目前是

public class LiveData
{

    public string Name { get; set; }
    public double Price { get; set; }

    public static List<LiveData> LoadDataFromFile(string path)
    {
        var data = new List<LiveData>();

        foreach (var line in File.ReadAllLines(path))
        {
            var dataLine = line.Split(',');

            data.Add(new LiveData
            {
                Name = dataLine[0],
                Price = Convert.ToDouble(dataLine[1])
            });
        }
        return data;
    }
}

    private void btnLoadLDgridView_Click(object sender, EventArgs e)
    {
        StreamReader file = new StreamReader(tbTSSelectFile.Text);

        List<LiveData> list = LiveData.LoadDataFromFile(tbTSSelectFile.Text);
        List<LiveData> lst2 = LiveData.LoadDataFromFile(tbTSSelectFile.Text);

        while (file.ReadLine() != null)
        {
            string name = lst2[0].Name;
            foreach (LiveData item in list)
            {
                if (item.Name == name)
                {
                    lst2.Add(item);
                }

            }
            foreach (LiveData item in list)
            {
                if (item.Name == name)
                {
                    lst2.Remove(item);
                }
            }
        gvLiveData.DataSource = lst2;        

    }

我想也许。最后可以使用,但我不知道如何实现它。 文本文件数据应该是Live Stocks数据,因此需要稍后更新。

提前感谢:)

1 个答案:

答案 0 :(得分:0)

在您将文件解析为data变量后,您可以尝试使用Linq:

var lastItems = data.GroupBy(d => d.Name).Select(g => g.Last());

这会使用GroupByLast运算符。