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 に答える