【问题标题】:How to take the last line of the same Name from text file?如何从文本文件中获取同名的最后一行?
【发布时间】:2015-11-11 03:02:33
【问题描述】:

我正在尝试将一些数据加载到 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;        

    }

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

提前致谢:)

【问题讨论】:

  • 您不需要删除该值,只需在遍历每个键值对时覆盖每个键即可。最后一个值将是...错误,每个键的最后一个值:)
  • 嗨,我在尝试后意识到这个键值对对我不起作用,因为我实际上有不止 2 个值。因为我只是举个例子。我有什么不同的方法可以做到这一点吗?那不是 linq,因为我没有得到 linq..

标签: c# winforms list gridview text-files


【解决方案1】:

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

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

这利用了GroupByLast 运算符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 2013-06-26
    相关资源
    最近更新 更多