C#删除第i行文本文件,如果它与特定术语不同

时间:2018-01-30 10:07:50

标签: c# text-files

我正在编辑文本文件并将内容从一个值更改为另一个值。 到目前为止一切正常,但是当我删除该文件的一行时,我已经走到了尽头。 我想要一个函数来读取具有类似内容的文件......

  

姓名彼得

     

长度185

     

姓名苏珊

     

长度

     

姓名哈利

     

长度177

并删除所有包含单词Length NOT后跟任何内容的行并给出结果

  

姓名彼得

     

长度185

     

姓名苏珊

     

姓名哈利

     

长度177

我使用过代码

System.IO.File.WriteAllLines(
   strLabelExportTotal,
   File.ReadAllLines(strLabelExportPreLenAdjust)
      .Select(1 => 1 == "LENGTH " ? "LENGTH 0" : 1));

设置如果缺少单词Length之后的值,则应该将值设为0.但现在我希望该行消失...

3 个答案:

答案 0 :(得分:1)

您可以使用以下步骤:

  1. 以字符串
  2. 阅读所有文字
  3. 将行拆分为字符串:\n作为拆分器
  4. 删除不需要的字符串/行LENGTH
  5. 合并剩余的列表并写入文件
  6. 代码:

    string fileText = File.ReadAllText(path);            
    var list = fileText.Split('\n').ToList();
    list.Remove("LENGTH");
    File.WriteAllLines(path, list);
    

    OR

    var list = File.ReadAllLines(path).ToList();
    list.Remove("LENGTH");
    File.WriteAllLines(path, list);
    

答案 1 :(得分:1)

您将所有行作为可枚举的行,并且当前您输出的行数与输出完全相同。 .Select()方法不会更改正在处理的项目数。

您可能希望将.Select()方法更改为.Where()方法,该方法仅输出与某个谓词匹配的行。

如:

System.IO.File.WriteAllLines(
   strLabelExportTotal,
   File.ReadAllLines(strLabelExportPreLenAdjust)
      .Where(x => x != "LENGTH "));

希望这有帮助

答案 2 :(得分:0)

@import 'custom.css';

代码中的第一行从路径C:\ file.txt读取文件,并将其作为字符串数组(每行都是此数组中的元素)

代码进程中的第二行是数组,它过滤并生成一个名为arr2的新数组,其中新数组没有任何行等于长度。

代码中的第三行将新数组写入文件C:\ file.txt