【发布时间】:2012-11-07 05:50:47
【问题描述】:
大家好,我需要一些帮助来创建一个将普通语法转换为人类可读格式的函数:
语法如下:
[OPENTAG]
(type)name:value
[OPENTAG]
(type)name:value
(type)name:value
(type)name:value
[/CLOSETAG]
[/CLOSETAG]
想把它变成这样:
[开放标签] (类型)名称:值 [开放标签] (类型)名称:值 (类型)名称:值 (类型)名称:值 [/关闭标签] [/关闭标签] private string textFormater(string input)
{
string[] lines = Regex.Split(input, "\r\n");
int tabs = 0;
string newtext = "";
foreach (string line in lines)
{
Match m = Regex.Match(line, "\\[.*\\]");
bool isTop;
bool isTopClose = false;
string tabtext = "";
if (m.Success)
{
if (line.Contains("/"))
{
tabs--;
isTopClose = true;
}
else
{
tabs++;
}
isTop = true;
}
else
{
isTop = false;
}
if (isTop && !isTopClose && tabs == 1)
{
newtext += line;
}
else if (isTop && !isTopClose)
{
for (int i = 1; i <= tabs - 1; i++)
{
tabtext += "\t";
}
newtext += "\r\n" + tabtext + line;
}
else
{
for (int i = 1; i <= tabs; i++)
{
tabtext += "\t";
}
newtext += "\r\n" + tabtext + line;
}
}
return newtext;
}
我有 atm 解决方案,但代码如此混乱和缓慢,在 2mb 的文件中需要很长时间 :) 感谢您的帮助!
干杯
【问题讨论】:
-
你的意思是你只想缩进?您应该能够通过文件一次完成此操作。您能否发布您已有的解决方案并就您的代码提出更直接的问题?
-
到底是什么问题?
-
我想把这个语法解析成人类可读的形式。我发布了我当前的解决方案,但我知道它有点糟糕。我需要一个更快的解决方案,因为在 2mb 的文本文件中这个解决方案需要很长时间:7
-
一开始为什么要用Regex.Split?它比 string.split() 快吗?另外,当 string.indexOf() 足够好时,为什么 Regex.Match() ?再次,它更快吗?
标签: c# syntax tags formatting human-readable