【问题标题】:C# delete each row in a big CSV file that contains a specific value in a specific column [duplicate]C#删除包含特定列中特定值的大CSV文件中的每一行[重复]
【发布时间】:2022-01-28 04:11:40
【问题描述】:

我正在开发一个 Unity 应用程序,我有一个包含 6 列和 5000 多行的 csv 文件。文件可能会显着增长。第二列包含“0”或“1”。不需要所有带有“0”的行。

我想读取 CSV 文件并将第二列中没有“0”的每一行写入一个新的 csv 文件,这样我就有一个新的 CSV 文件,其中只有 1 的行。(“1”也不需要在新的 CSV 文件中。)

我尝试了类似的方法,但我删除了不起作用的部分。也许有人有想法。主要是索引 x 和 i 以某种方式关闭。有时它没有读取第一列,但我可能只是对增量感到困惑。

    public void UpdateCSV()
    {
        string[] values = File.ReadAllText(datapath).Split(new char[] { ',' });
        StringBuilder ObjStringBuilder = new StringBuilder();
        
        // x as index for second column
        int x = 1;
        for (int i = 0; i < values.Length; i++)
        {

            // if column 2 is not 0 it needs to be printed in the new file
            if (values[x] != "0")
            {
                //using ObjStringBuilder.Append() to pass the values of the row that I want to keep

            }

        }

        ObjStringBuilder.ToString().Remove(ObjStringBuilder.Length - 1);
        File.WriteAllText("Assets/Datasets/UpdatedCSV.csv", ObjStringBuilder.ToString());
    }

【问题讨论】:

  • 在发布的代码中,它是在哪里将带有 1 的行“添加”到ObjStringBuilder?该代码似乎被注释掉了,但是,即使没有注释,它也没有添加任何内容。
  • 是的,这就是我在文中写的。我找不到有效的解决方案,所以我在这里发表了评论。最好的解决方案是按照 Poul Bak 的建议使用 ReadAllLines()。

标签: c# csv unity3d


【解决方案1】:

尝试:ReadAllLines - 这将为您提供一系列行。然后像你一样使用Split 函数遍历所有内容并检查values[1]

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

public void UpdateCSV()
{
    string[] lines = File.ReadAllLines(datapath);
    StringBuilder sb = new StringBuilder();
    foreach (string line in lines)
    {
        List<string> values = new(line.Split(','));
        if (values[1] != "0")
        {
            values.Remove(1);  // or values[1] = string.empty;
            string newLine = string.Join(",", values);
            sb.Append(newLine + Environment.NewLine);
        }
    }
    File.WriteAllText("Assets/Datasets/UpdatedCSV.csv", sb.ToString());
}

【讨论】:

  • 请注意,您检查过您发布的答案吗?它有编译器错误。
  • 糟糕,没有测试就写了。现在它应该可以工作了(还添加了必要的“使用”)
  • 谢谢,这正是我所需要的。
  • 错误是:StringBuilder ObjStringBuilder = new StringBuilder();
  • 和 values.Remove("1");
猜你喜欢
  • 2020-11-15
  • 2021-06-20
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
  • 2023-02-17
  • 2023-01-19
  • 2019-05-05
  • 1970-01-01
相关资源
最近更新 更多