c#中带有开始和结束标记的简单注释函数
本文关键字:简单 注释 函数 结束 开始 | 更新日期: 2023-09-27 18:18:32
我正在创建一个代码编辑器,它将某些行定义为注释,这些行必须标记为开始和结束标记。代码看起来像这样:
StreamReader sr = new StreamReader(filePath);
if (File.Exists(newFilePath))
File.Delete(newFilePath);
while (!sr.EndOfStream)
{
string line = sr.ReadLine();
if (line.Contains("CALL") && !line.Contains("//")) //look for functions(macro's) that get called, ignore comments.
{
if (line.Contains("WAIT('DI'")||line.Contains("WAIT('DO'")) //Comment the line when it contains any of these
CommentOverride(line, newFilePath);
else //if none of the above, writeline but give error message
WriteLine(line, newFilePath);
}
}
private void CommentOverride(string code, string filePath)
{
WriteLineToFile(" : ! BEGIN OVERRIDE COMMENT ;", filePath);
string commentedLine = code.Insert(5, "//");
WriteLineToFile(commentedLine, filePath);
WriteLineToFile(" : ! END OVERRIDE COMMENT ;", filePath);
}
当一行中有多行需要注释时,每行都有自己的开始和结束标记。这将导致代码比需要的多很多。现在我尝试使用流阅读器读取下一行并提前检查。但是这样我就不能再检查线路了。我尝试使用另一个流阅读器只读取下一行,但这种方式流阅读器sr仍然会找到下一行并再次注释它。导致该行被注释两次。
我可能只是忽略了显而易见的解决方案,但我还没能弄清楚如何做到这一点。
可能一个好的方法是在while循环之外保持一个状态,然后在重写时将其标记为活动:
bool overrideActive = false;
while (!sr.EndOfStream)
{
string line = sr.ReadLine();
if (line.Contains("CALL") && !line.Contains("//"))
{
if (line.Contains("WAIT('DI'")||line.Contains("WAIT('DO'"))
{
CommentOverride(line, newFilePath, overrideActive);
overrideActive = true;
}
else
{
WriteLine(line, newFilePath);
overrideActive = false;
}
}
}
private void CommentOverride(string code, string filePath, bool overrideActive)
{
if (!overrideActive)
{
WriteLineToFile(" : ! BEGIN OVERRIDE COMMENT ;", filePath);
}
string commentedLine = code.Insert(5, "//");
WriteLineToFile(commentedLine, filePath);
if (!overrideActive)
{
WriteLineToFile(" : ! END OVERRIDE COMMENT ;", filePath);
}
}
感谢您的帖子修复了它。它看起来像这样:
private void CommentOverride(string code, string filePath, int lineNumber, string inputFilePath)
{
if (!overrideActive)
{
WriteLineToFile(" : ! BEGIN OVERRIDE COMMENT ;", filePath);
overrideActive = true;
}
string commentedLine = code.Insert(5, "//");
WriteLineToFile(commentedLine, filePath);
string nextLine = GetLine(inputFilePath, lineNumber + 1);
if ((!nextLine.Contains("WAIT('DI'") && !nextLine.Contains("WAIT('DO'")))
overrideActive = false;
if(!overrideActive)
WriteLineToFile(" : ! END OVERRIDE COMMENT ;", filePath);
}
谢谢!