C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 階層構造の書き出し


(過去ログ 69 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■40399 / inTopicNo.1)  階層構造の書き出し
  
□投稿者/ プリマ (1回)-(2009/08/25(Tue) 00:09:55)

分類:[C#] 

はじめまして、VC#2008でC#を使っています
階層構造のテキストへの書き出しで質問なのですが

root ─ nameA ─ nameB┬nameC────nameH┬nameI─nameK
                      ├nameD─nameF      └nameJ┬nameL─nameO
                      └nameE─nameG             ├nameM─nameP
                                                 └nameN─nameQ

という階層を持ったものを

root{
      nameA{
           nameB{
                nameC{
                nameD{
                      nameF{
                          }
                      }
                nameE{
                      nameG{
                          }
                      }
                nameH{
                      nameI{
                           nameK{
                               }
                           }
                      }
                nameJ{
                      nameL{
                           nameO{
                               }
                           }
                      nameM{
                           nameP{
                               }
                           }
                      nameN{
                           nameQ{
                               }
                           }
                      }
                 }
            }
     }
}

こういったようにテキストに書き出すにはどうしたらいいのでしょうか?

各オブジェクトは
名前、一つ上の親の名前、一つ下の子の名前を持ったクラスです

よろしくお願いします


引用返信 編集キー/
■40400 / inTopicNo.2)  Re[1]: 階層構造の書き出し
□投稿者/ Hongliang (454回)-(2009/08/25(Tue) 00:39:26)
その例からは規則性がさっぱり分かりませんが、
// C-HとD-Fって差はあるの? IとJはどっちもHの下じゃないの? インデントどうなってるの? など
まあ普通に現在のノードと深さを引数にとってストリームに書き出すのを再帰的に行うだけじゃないですかね。
というか、名前? 直接ノードオブジェクトを持ってるんじゃなくて?
引用返信 編集キー/
■40401 / inTopicNo.3)  Re[1]: 階層構造の書き出し
□投稿者/ 魔界の仮面弁士 (1252回)-(2009/08/25(Tue) 00:41:51)
2009/08/25(Tue) 09:50:55 編集(投稿者)
No40399 (プリマ さん) に返信
> という階層を持ったものを
(中略)
> 各オブジェクトは
> 名前、一つ上の親の名前、一つ下の子の名前を持ったクラスです
その、「〜という階層を持ったもの」がどのように管理されているかにもよりますが、
たとえば、Xml や TreeNode のような構造を取れるのであれば、再帰的に処理できるかと思います。


> こういったように
nameC の階層が、私の想定した出力結果と異なる…。


> テキストに書き出すにはどうしたらいいのでしょうか?
たとえば XML の階層であれば、こんな感じで出力できます。
手元に VS2008 が無いので、メモ帳開発ですが:


// C:\WINDOWS\Microsoft.NET\Framework\v3.5\csc.exe /out:c:\sample.exe c:\sample.cs
using System;
using System.Xml.Linq;
class Foo {

  static void Main() {
    // 元データとなる階層情報
    XDocument doc = CreateSampleData();

    // テキストに出力
    // (ここではテストして、コンソールに出力しています)
    Write(doc.Root, 0);

    Console.WriteLine("Enter を押してください。");
    Console.ReadLine();
  }


  static void Write(XElement node, int indent) {
    string blank = new string(' ', indent * 4);
    Console.WriteLine(blank + node.Name + "{");
    foreach(XElement child in node.Elements()) {
      Write(child, indent + 1);
    }
    // blank += new string(' ', node.Name.ToString().Length);
    Console.WriteLine(blank + "}");
  }


  static XDocument CreateSampleData() {
    return XDocument.Parse(@"
        <root>
            <nameA>
              <nameB>
                <nameC>
                  <nameH>
                    <nameI>
                      <nameK/>
                    </nameI>
                    <nameJ>
                      <nameL>
                        <nameO/>
                      </nameL>
                      <nameM>
                        <nameP/>
                      </nameM>
                      <nameN>
                        <nameQ/>
                      </nameN>
                    </nameJ>
                  </nameH>
                </nameC>
                <nameD>
                  <nameF/>
                </nameD>
                <nameE>
                  <nameG/>
                </nameE>
              </nameB>
            </nameA>
          </root>"
    );
  }
}

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -