我想删除“ - ”和“\ 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
}
}
请帮忙
由于
修改
问题解决了,虽然我遇到了另一个问题,但我无法删除/* */
之间的评论,因为评论出现在多行上。所以我需要删除/* */
之间的所有文字。
有任何建议或帮助吗? 感谢
答案 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 */ }
忽略行开头的空格。