删除“ - ”和“\ cr”之间的文本

时间:2012-05-16 10:03:55

标签: c# .net wpf newline streamreader

我想删除“ - ”和“\ cr”之间的文字。

我实际上正在读取一个文件,如果文件中有“ - ”,它应该删除“ - ”以及“\ cr”之前的所有内容。

我正逐行阅读文件。

using (StreamReader readFile = new StreamReader(filePath))
{
    string line;

    while ((line = readFile.ReadLine()) != null)
    {
    }
}

我尝试使用子字符串来查找字符

line.Substring(line.IndexOf("--"),line.IndexOf("\cr"));

但我在查找每行的分隔符时遇到问题

我在考虑写这样的东西

while ((line = readFile.ReadLine()) != null)
{
    if (line.Substring(line.IndexOf("--")) // If it has "--"
    {
      //Then remove all text from between the 2 delimiters

    }
}

请帮忙

由于

修改

问题解决了,虽然我遇到了另一个问题,但我无法删除/* */之间的评论,因为评论出现在多行上。所以我需要删除/* */之间的所有文字。

有任何建议或帮助吗? 感谢

4 个答案:

答案 0 :(得分:4)

一个简单的解决方案是在行上使用正则表达式替换:

line = Regex.Replace(line, @"--.*$", "");

这假设您对\cr的任何意思是该行的实际结尾(如果您使用ReadLine()阅读它,则无论如何都不包括在内),因此这将删除--中的所有内容直到行尾。而不是。

要替换/* ... */条评论,您也可以使用:

line = Regex.Replace(line, @"--.*$|/\*.*?\*/", "");

快速PowerShell测试:

PS> $a = 'foo bar','foo bar -- some comment','foo /* another comment */ bar'
PS> $a -replace '--.*$|/\*.*?\*/'
foo bar
foo bar
foo  bar

答案 1 :(得分:4)

试试这个

line.Substring(line.IndexOf("--"));

正如Joey所提到的,ReadLine()永远不会包含Environment.NewLine和\ cr对应于Environment.NewLine

答案 2 :(得分:1)

仅显示如何从文件中的每一行删除注释。这是一种方式:

var newLines = from l in File.ReadAllLines(path)
               let indexComment =  l.IndexOf("--")
               select indexComment == -1 ? l : l.Substring(0, indexComment);
File.WriteAllLines(path, newLines);      // rewrite all changes to the file

修改:如果您还希望在/**/之间删除所有内容,则这是一种可能的实施方式:

String[] oldLines = File.ReadAllLines(path);
List<String> newLines = new List<String>(oldLines.Length);
foreach (String unmodifiedLine in oldLines)
{
    String line = unmodifiedLine;
    int indexCommentStart = line.IndexOf("/*");
    int indexComment = line.IndexOf("--");

    while (indexCommentStart != -1 && (indexComment == -1 || indexComment > indexCommentStart))
    {
        int indexCommentEnd = line.IndexOf("*/", indexCommentStart);
        if (indexCommentEnd == -1)
            indexCommentEnd = line.Length - 1;
        else
            indexCommentEnd += "*/".Length;
        line = line.Remove(indexCommentStart, indexCommentEnd - indexCommentStart);
        indexCommentStart = line.IndexOf("/*");
    }

    indexComment = line.IndexOf("--");
    if (indexComment == -1)
        newLines.Add(line);
    else
        newLines.Add(line.Substring(0, indexComment));
}

File.WriteAllLines(path, newLines);

答案 3 :(得分:0)

看起来你想要忽略包含注释的行。 <怎么样

if (!line.StartsWith("--")) { /* do stuff if it's not a comment */ }

甚至

if (!line.TrimStart(' ', '\t').StartsWith("--")) { /* do stuff if it's not a comment */ }

忽略行开头的空格。