如何从 .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