仅在评论后删除文本( - )

时间:2012-05-16 12:45:44

标签: c# text

我的项目目前正在删除 - 符号之后的所有文本,因为它代表一个评论。 我的代码现在是在评论之前删除文本文件中文本中的所有文本。

到目前为止,这是我的代码:

static void Main( string[] args )
    {
        string line = null;
        string line_to_delete = "--";
        string desktopLocation = Environment.GetFolderPath( Environment.SpecialFolder.Desktop );
        string text = Path.Combine( desktopLocation, "tim3.txt" );
        string file = Path.Combine( desktopLocation, "tim4.txt" );

        using (StreamReader reader = new StreamReader( text ))
        {
            using (StreamWriter writer = new StreamWriter( file ))
            {
                while (( line = reader.ReadLine() ) != null)
                {
                    if (string.Compare( line, line_to_delete ) == 0)
                        File.WriteAllText( file, File.ReadAllText( text ).Replace( line_to_delete, "" ) );
                    continue;
                }
            }

我如何指定它必须只删除te 感谢

3 个答案:

答案 0 :(得分:2)

您可以使用RegEx或以下代码

var @index = line.IndexOf(line_to_delete);
if(@index != -1){
    var commentSubstring = line.Substring(@index, line.Length - @index); //Contains only the comments
    line.Replace(commentSubstring, "").ToString()//Contains the original with no comments
}

如果评论在下面的布局中

Blah blah - 一些评论 - 更多评论

adasdasd asfasffa

asasff - 更多评论

答案 1 :(得分:2)

s.indexOF第一次搜索“ - ” s.remove从indexof开始并删除所有内容。 编辑:根据Jays评论修复了异常

        string s = "aa--aa";
        int i = s.IndexOf("--");
        if (i >= 0)
            s = s.Remove(i);
        MessageBox.Show(s);

或者我在这里为你排好了

        string s = "aa--aa";
        s = s.IndexOf("--") >= 0 ? s.Remove(s.IndexOf("--")) : s;

答案 2 :(得分:1)

代码中的问题是,只有当文件包含一行完全等于“ - ”的行时,才会发生替换(这是写入输出文件的唯一指令)。

此外,如果您使用WriteAllText和ReadAllText,则不需要while循环,并且无论如何都不能使用它们,因为这样您只会删除“ - ”,而不会删除之后的所有内容。 / p>

我认为这样的事情应该有效:

using (StreamReader reader = new StreamReader( text ))
{
    using (StreamWriter writer = new StreamWriter( file ))
    {
        while (( line = reader.ReadLine() ) != null)
        {
            int idx = line.IndexOf(line_to_delete);
            if (idx == 0) // just skip the whole line
                continue;
            if (idx > 0)
                writer.WriteLine(line.Substring(0, idx));
            else
                writer.WriteLine(line);
        }
    }
}