【问题标题】:Edit and/or Delete a row on CSV file编辑和/或删除 CSV 文件中的一行
【发布时间】:2016-12-30 09:01:47
【问题描述】:

我有一个 CSV 文件。我需要编写一个代码,我们可以通过用户名从 CSV 中获取一行。我需要从 CSV 文件中更新或删除该行。我设法通过用户名获取行数据。但我不知道如何编写更新或删除功能的代码。我获取单行的代码如下

  StreamReader reader = new StreamReader(System.IO.File.OpenRead(@"C:\Test\test.CSV"));

        UserDetailsViewModel objInput = new UserDetailsViewModel();

        while (!reader.EndOfStream)
        {
            string line = reader.ReadLine();
            if (!String.IsNullOrWhiteSpace(line))
            {
                string[] values = line.Split(',');
                if (values[0] == "Bharat")
                {
                    objInput.FirstName = values[0];
                    objInput.LastName = values[1];
                    objInput.Address1 = values[2];
                    objInput.Address2 = values[3];
                    objInput.City = values[4];
                    objInput.State = values[5];
                    objInput.ZipCode = values[6];
                    break;

                }
            }
        }
        reader.Dispose();
        return View(objInput);

请有人帮我写一个更新和删除 CSV 文件的代码。

提前致谢。

【问题讨论】:

  • 到目前为止你尝试过什么?你不如写下你作为一个人会怎么做,然后从那里开始
  • 到目前为止,我可以从 CSV 中获取数据并存储到数组中。我仍在尝试在不影响整个 CSV 文件的情况下更新 CSV 上的单行。现在它用更新的值覆盖整个 CSV。

标签: c# asp.net asp.net-mvc file csv


【解决方案1】:

您可以使用以下方法达到您想要的结果。

-> 首先你必须阅读你的 .csv 文件。

-> 然后遍历文件的每一行,同时你可以选择任何一行进行编辑/删除,然后对该行进行更改并将该行存储到字符串列表中。

-> 最后你必须将字符串列表写入文件。就是这样。

例如:

    List<String> lines = new List<String>();
    using (StreamReader reader = new StreamReader(System.IO.File.OpenRead(@"C:\Test\test.CSV"));)
    {
        String line;
        while ((line = reader.ReadLine()) != null)
        {
            if (line.Contains(","))
            {
                String[] split = line.Split(',');

                if (//condition for Edit record like : split[1] == "abc" etc.)
                {
                    // update that 
                    split[1] = "xyz";
                    line = String.Join(",", split);
                    lines.Add(line);
                }
                if (//condition for Delete row.)
                {
                    // don't add that row into string list
                }
            }

        }
    }

    using (StreamWriter writer = new StreamWriter(@"C:\Test\test.CSV", false))
    {
        foreach (String line in lines)
            writer.WriteLine(line);
    }

【讨论】:

  • 使用上面的代码会覆盖整个 CSV。例如,我试图修改第二行的数据。它修改数据并覆盖整个文件并显示单个更新的行
  • 是的。它会覆盖整个 CSV 文件,但我认为没有更新单行的方法。因为如果我们想修改文件中的任何记录,那么我们必须再次将整个文件数据写入文件。
【解决方案2】:

读取和写入 csv 通常比乍看起来要复杂。 为该任务使用像 KBCsv (https://github.com/kentcb/KBCsv) 这样的库

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多