【问题标题】:how to delete required string from csv file如何从csv文件中删除所需的字符串
【发布时间】:2013-08-24 19:40:03
【问题描述】:

大家都尝试在一些csv文件中实现删除行; 文件示例:

24 august 2013 г.,,14:00,00:00,;
24 august 2013 г.,,14:00,00:00,;
24 august 2013 г.,2342,14:00,00:00,23424;
24 august 2013 г.,2342,14:00,19:00,23424;

criteria - 24 august 2013 г.,2342

结果必须像

 24 august 2013 г.,,14:00,00:00,;
 24 august 2013 г.,,14:00,00:00,;

我的想法 打开文件 -

FileStream fs = new FileStream(filePath, FileMode.Open, 
            FileAccess.ReadWrite);
        StreamReader sr = new StreamReader(fs);

将所有数据放入数组

        string lines = sr.ReadToEnd();
        string []result = lines.Split(';');

比获取删除数据的标准(一些字符串)

        string criteria = dateTimePicker1.Text.ToString()+','
            +eventNameDeleteTextBox.Text.ToString();
sr.Close();

在数组中搜索,

             int startStr = lines.IndexOf(criteria);//find start position
        int length = lines.IndexOf(';',startStr)-startStr;//find end position

删除 string dataRemoved = lines.Substring(startStr,length); viewTextBox.Text = dataRemoved;

并写入文件更新数据

    FileStream fs1 = new FileStream(filePath, FileMode.Open,
                FileAccess.Write, FileShare.None);
        StreamWriter sw = new StreamWriter(fs1);

        sw.WriteLine(dataRemoved);
        sw.Close();

但它的工作不正确 - 它必须删除的复制字符串到文件的开头并删除所有;符号,我哪里错了?

【问题讨论】:

  • var all=lines.Replace(",2342,",",,").Replace(",23424;",",;"); 不会达到同样的效果吗?您可以将字符串all 写回文件...
  • 但我是否需要从 8 月 24 日开始删除所有活动?想法 - 用户选择事件日期及其名称,然后将其删除

标签: c# arrays search filestream


【解决方案1】:

尝试这样的事情,如果您的文件很小,那么下面的解决方案应该不是问题。

string rawdata = @"24 august 2013 г.,,14:00,00:00,;
24 august 2013 г.,,14:00,00:00,;
24 august 2013 г.,2342,14:00,00:00,23424;
24 august 2013 г.,2342,14:00,19:00,23424;";//consider this is raw file

string[] lines = rawdata.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

List<string> result = new List<string>();
foreach (var line in lines)
{
    if (!line.Contains("24 august 2013 г.,2342"))
    {
        result.Add(line);
    }
}

现在您的预期结果将出现在result 列表中。您可以使用结果列表创建一个新文件。

如果这不能回答您的问题,请提供更多信息。我会尽力提供更好的解决方案。

【讨论】:

  • 试试看,但奇怪的是我得到了和以前一样的结果 - 但认为它一定没有放入Contains的行
  • 出于奇怪的原因,所有数据都添加到了新的List,而Contains 无助于不添加它。我使用类似 dateTimePicker.Text.ToString() 的一些想法,并且还尝试在 Contains 部分中使用 "criteria" - 结果 - 相同......
猜你喜欢
  • 1970-01-01
  • 2022-06-15
  • 2013-09-08
  • 2016-11-05
  • 2018-07-29
  • 2010-11-04
  • 1970-01-01
  • 2015-12-02
  • 2020-10-13
相关资源
最近更新 更多