删除两行之间的文本

时间:2018-10-24 01:55:16

标签: c# text-files streamreader

我正在尝试删除两个不同行之间的行。目前,我有:

string s = "";
String path = @"C:\TextFile";
StreamWriter sw = new StreamWriter(path, true);
StreamReader sr = new StreamReader(path, true);

s = sr.ReadLine();

if (s=="#Start")
{
    while (s != "#End")
    {
        sw.WriteLine(s);
        //need something here to overwrite existing data with s not just add s
    }
}  

sr.Close();
sw.Close();  

我的文本文件的内容如下:

#Start
facebook.com
google.com
youtube.com
#End     

我尝试遵循Efficient way to delete a line from a text file,但是它会删除任何包含某个字符的文件,而在包含.com的范围之外的其他行中,我不想删除

我想删除开始和结束之间的所有内容,因此在该方法运行后,文本文件的其余部分为

#Start
#End

3 个答案:

答案 0 :(得分:0)

您有两个问题:

  1. 您只读取第一行,然后在各处使用该值。显然,如果s == "#Start"也不能满足条件s == "#End",等等。
  2. 即使您正在阅读每一行,您也希望在#End之后不会有更多数据-您不会遍历其余各行,而只是停止写入。根据您的问题,我认为您想写入文件中的所有行,而只在#Start和#End之间进行更改。

-

也许下面的恒定循环会更好吗?:

string s;
bool inRewriteBlock = false;
while ((s = sr.ReadLine()) != null)
{
    if (s == "#Start")
    {
        inRewriteBlock = true;
    }
    else if (s == "#End")
    {
        inRewriteBlock = false;
    }
    else if (inRewriteBlock)
    {
        sw.WriteLine(s);
        //need something here to overwrite existing data with s not just add s
    }
    else
    {
        sw.WriteLine(s);
    }
}

默认情况下,代码将逐字读取输出的每一行。但是,如果读取的是#Start,它将进入一种特殊的模式(inRewriteBlock == true),您可以根据需要重写这些行。达到#End后,它将转换回默认模式(inRewriteBlock == false)。

答案 1 :(得分:0)

您应该检查并重写#Start和#End之间的所有内容,而不是文件仅以“ #Start”开始。

您可以尝试以下方法:

data.map(({ name, models }) => (
    <React.Fragment>
        <div>Name: { name }</div>
        {
          models.map(model => (
            <div>{ model }</div>
          ))
        }
      </React.Fragment>
    ))

答案 2 :(得分:0)

您可以简单地执行以下操作:(这假定文件可以存储在内存中)

string path = @"C:\\Users\\test\\Desktop\\Test.txt";

List<string> fileData = File.ReadAllLines(path).ToList();
// File.ReadAllLines(path).ToList().Select(y => y.Trim()).ToArray().ToList(); will remove all trailing/preceding spaces in data
int startsWith = fileData.IndexOf("#Start");
int endsWith = fileData.IndexOf("#End");

if(startsWith != -1 && endsWith != -1)
  fileData.RemoveRange(startsWith+1, endsWith-1);

File.WriteAllLines("C:\\Test\\Test1.txt", fileData.ToArray());

它不考虑特殊情况,例如startsWith位于文件末尾而没有endwith。