0

我正在解释具有以下格式的嵌套列表的文本文件

- todo
  - clean kitchen
    - do dishes
    - sweep floor
  - cook dinner
    - defrost fish
  - shopping
    - milk
    - eggs

我想将这些项目放入 <ul></ul> 列表中。我正在尝试找出这样做的逻辑,目前通过空格数计算“深度”并ul根据最后一个深度是更高还是更低来添加开始或结束标签是一个可怕的混乱。

必须有一个聪明,整洁的逻辑来做这件事,我错过了?

4

1 回答 1

1

应该很容易通过使用来确定级别string.IndexOf

string line = file.ReadLine();
int level = line.IndexOf('-');
level = (level - 1)/2;

处理关卡的逻辑更有趣一些。像下面这样的东西应该很好用。

int lastLevel = -1;
string line;
while ((line = file.ReadLine()) != null)
{
    int level = GetLevel(line); // from code above
    int diff = level - lastLevel;
    if (diff > 1)
    {
        // skipping multiple levels forward is probably an error.
        throw new ApplicationException();
    }
    if (diff == 1)
    {
        // next level. Add a <ul>
        WriteUl();
    }
    else if (diff == 0)
    {
        // same level. Add an <li>
        WriteLi(line);
    }
    else
    {
        // need to add </ul>, possibly multiple times
        do
        {
            WriteUlEnd();
            --lastLevel;
        } while (lastLevel > level);
    }
    lastLevel = level;
}

如果你只有你展示的数据,那真的是唯一的方法。你必须计算空间。

于 2013-03-01T22:42:16.347 回答