1

我想删除“--”和“\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

4 回答 4

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
于 2012-05-16T10:07:07.663 回答
4

试试这个

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

正如乔伊所说,ReadLine() 永远不会包含 Environment.NewLine 和 \cr 对应于 Environment.NewLine

于 2012-05-16T10:08:50.980 回答
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);
于 2012-05-16T10:48:58.370 回答
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 */ }

忽略行首的空格。

于 2012-05-16T10:18:41.127 回答