如何从 .CSV 文件中删除不合适的行并使用 C# 再次保存该文件?

Posted

技术标签:

【中文标题】如何从 .CSV 文件中删除不合适的行并使用 C# 再次保存该文件?【英文标题】:How to delete unsuitable rows from .CSV file and save that file again by using C#? 【发布时间】:2017-05-15 07:41:29 【问题描述】:

我想通过使用浏览按钮并按下索引按钮来选择一个 .csv 文件,然后从 .csv 文件中删除一些不合适的行并保存它。请帮我这样做。这对解决我的问题很有帮助。

这是我的 .csv 文件,如下所示。

Date,Step Time, Mode Duration (secs),Duration (in Hrs),Schedule,Index,Mode

30/03/2017 23:31:35,42824.98027,0,180,0,1,TRUE
30/03/2017 23:31:36,42824.98028,0.00001,180,0,1,TRUE
30/03/2017 23:31:38,42824.9803,0.00002,180,1,2,TRUE
30/03/2017 23:31:39,42824.98031,0.00001,180,1,1,TRUE
30/03/2017 23:31:41,42824.98034,0.00002,180,1,1,TRUE
30/03/2017 23:31:41,42824.98034,0,180,2,2,TRUE
30/03/2017 23:31:43,42824.98036,0.00002,180,2,1,TRUE
30/03/2017 23:31:45,42824.98038,0.00002,180,2,1,TRUE
30/03/2017 23:31:45,42824.98038,0,180,3,2,TRUE
30/03/2017 23:31:47,42824.98041,0.00002,180,3,1,TRUE
30/03/2017 23:31:49,42824.98043,0.00002,180,3,1,TRUE
30/03/2017 23:31:49,42824.98043,0,180,4,2,TRUE
30/03/2017 23:31:51,42824.98045,0.00002,180,4,1,TRUE
30/03/2017 23:31:53,42824.98047,0.00002,180,4,1,TRUE

注意: 在这个 .csv 文件中,我想通过考虑以下条件来删除行。

模式持续时间(秒)=0 且索引=2

我的代码如下,但不完整。

using System.Globalization;
using System.IO;
  private void btnIndex_Click(object sender, EventArgs e)
        
            List<Graph> ObservingData = new List<Graph>(); // List to store all 

            // Loops through each lines in the CSV
            foreach (string line in System.IO.File.ReadAllLines(tbOutputFilePath.Text).Skip(1)) // .Skip(1) is for skipping header
            

                string[] CsvLine = line.Split(',');
                Graph Instance1 = new Graph();

                Instance1.Date = DateTime.ParseExact(CsvLine[0], dateFormatString, CultureInfo.InvariantCulture); 
                Instance1.StepTime = double.Parse(CsvLine[1]);
                Instance1.ModeDuration = double.Parse(CsvLine[2]);
                Instance1.Duration = int.Parse(CsvLine[3]);
                Instance1.ScheduleStep = int.Parse(CsvLine[4]);
                Instance1.Index = int.Parse(CsvLine[5]);
                Instance1.Mode = (CsvLine[6] == "TRUE" ? true : false);

                if (Instance1.ModeDuration == 0 && Instance1.Index == 2) 
                
                    continue;
                    //write code

                
            
         

【问题讨论】:

您已经尝试过什么了吗?你的具体问题是什么?现在你的“问题”实际上是“请做我的工作”的请求,仅此而已。 读取所有文本,转换为对象数组,过滤,回写,这对你来说很难吗? 只是要明确一点...您是否需要有人真正编写整个内容?你做过什么吗? @LeiYang 我在这里添加了我的代码。我想知道如何从 .csv 文件中选择该行并保存更新的 .csv 文件。请帮我这样做。我对这种语言比较陌生. 已有一些库可以读取csv,比如nuget 【参考方案1】:

我假设您的问题是写入文件...

private void btnIndex_Click(object sender, EventArgs e)

    List<Graph> ObservingData = new List<Graph>(); // List to store all 

    using (StreamWriter sw = new StreamWriter("your new file.csv"))
    
        // Loops through each lines in the CSV
        foreach (string line in System.IO.File.ReadAllLines(tbOutputFilePath.Text).Skip(1)) // .Skip(1) is for skipping header
        

            string[] CsvLine = line.Split(',');
            Graph Instance1 = new Graph();

            Instance1.Date = DateTime.ParseExact(CsvLine[0], dateFormatString, CultureInfo.InvariantCulture);
            Instance1.StepTime = double.Parse(CsvLine[1]);
            Instance1.ModeDuration = double.Parse(CsvLine[2]);
            Instance1.Duration = int.Parse(CsvLine[3]);
            Instance1.ScheduleStep = int.Parse(CsvLine[4]);
            Instance1.Index = int.Parse(CsvLine[5]);
            Instance1.Mode = (CsvLine[6] == "TRUE" ? true : false);

            if (Instance1.ModeDuration != 0 || Instance1.Index != 2)
            
                sw.WriteLine(line);

            
        

        sw.Close();
    



请您考虑阅读help ask

如果你不能具体,我猜没有人会帮助你

【讨论】:

非常感谢您的帮助先生,我能理解我错了。但是我没有要求任何人澄清我的问题。这就是我向你询问的原因。我是新来的这种语言。再次感谢您 此代码运行良好。但标题列的名称不在新的 .csv 文件中。先生您能解释一下吗。我从代码中删除了 skip(1) 关键字。然后错误消息即将出现“An mscorlib.dll 中发生未处理的“System.FormatException”类型异常附加信息:输入字符串的格式不正确。” .所以你能解释一下吗?请给我一个解决方案。 好的,先生,我做到了。非常感谢您的帮助。

以上是关于如何从 .CSV 文件中删除不合适的行并使用 C# 再次保存该文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除错误行错误的行并使用 pandas 或 numpy 读取剩余的 csv 文件?

DT::datatable - 选择要删除的行并写入没有闪亮的 csv

如何使用 C# 从远程位置将 Excel csv 或 xls 文件的行读入 ASP.NET 应用程序?

使用python脚本从csv文件中删除重复的行

c#在datagridview中删除指定行并更新到数据库

将 CSV 文件中的行跳过到某个单词 C#