DOBON.NET DOBON.NETプログラミング掲示板過去ログ

テキストファイルから階層構造を読み取り、テキストファイルに書き出す方法について

環境/言語:[widowsXP]
分類:[.NET]

こんにちは。
先日はアドバイスありがとうございました。
ツリー式掲示板の破損修復を行ってますが、次についてアドバイス頂ければ非常に助かりますので、ぜひよろしくお願いします。

<やりたい事>
ABC.txtを1行づつ上から読み込み、ツリー階層を解析しながら並べ替えてTEST.txtに書き出す。

<ABC.txtの中身>
no 1080
Follow 240
Tree 180
<本文>
.
no 1079
Follow 1078
Tree 20
<本文>

no 1078
Follow 20
Tree 20
<本文>

no 1077
Follow 532
Tree 180
<本文>



no 20
Tree 20
<本文>

記事の特徴としては、以下となります。
※記事と記事は"."で区切られている。
※Followはその記事の上の階層を示す記事番号。
※Treeは、ツリーのTOPとなる記事番号を示す
※ツリーのTOP記事には、"Follow"は存在しない。
※FollowとTreeが同じ記事番号の場合は、必ずツリーTOP記事の真下にぶら下がる記事となる。

つまり、上記ファイルを以下のように並べ替えられれば良い事になります。

no 20
Tree 20
<本文>

no 1078
Follow 20
Tree 20
<本文>

no 1079
Follow 1078
Tree 20
<本文>

no 1077
Follow 532
Tree 180


<補足>
Treeのトップは、記事番号20で、この記事にはFollowは含まれてなく、Treeも自分の記事をさしているので一番上に持っていきます。
その下には、同じTREE番号を示してかつFollowとTree番号が同じであるため、1078の記事になります。さらにその下の階層には、同じTREE番号を示してかつFollowが1078を示す1079の記事が来る・・・という感じです。

このように並び替えるには、各noとFollowとTreeの値を1行読み込むたびに変数に入れ、連結したものを配列に入れなおしてからソートする感じだと思いますが、コーディングしてみると以外に難しく、と言いますかフローチャートすら書けない状態です・・
どんな事でも結構ですので、アドバイスお願いできたらありがたいです。

どうかよろしくお願いします。
2009/06/01(Mon) 01:03:56 編集(投稿者)

■No24653に返信(iceさんの記事)
> ツリー式掲示板の破損修復を行ってますが、次についてアドバイス頂ければ非常に助かりますので、ぜひよろしくお願いします。
cboardのデータファイルかな、これは。

とりあえず、イメージを。
あくまで1つのアプローチに過ぎないので、自分で考えてみて下さい。

--- ここから読み込み処理 ---

1. 1行読む。ファイルの終端であれば5へ。
2. 正規表現で振り分ける。

A-1.no\t(\d+)にマッチする場合
A-2.(念のため)一時変数の値をクリアする
A-3.noの数値を保持しておく。

B-1.follow\t(\d+)にマッチする場合
B-2.一時変数follow_numberに数値を入れておく。

C-1.tree\t(\d+)にマッチする場合
C-2.一時変数tree_numberに数値を入れておく。

D-1."."だけの場合
D-2.一時変数の内容をまとめてクラスか構造体にしてList等に放り込む
D-3.一時変数の内容のクリアして、1に戻る

E-1.その他
E-2.特に分岐先で処理をしない

3.一時変数textに文字列を連結する。
4.1に戻る

※正規表現はPerlらしく書いています。.NETだと若干異なるかもしれません。

--- ここまでが読み込み処理 ---

5.Listに放り込んだものを解釈して、並べ替える。
6.並べ替えたものをファイルに書き出す。



読み込みの部分を細かく書きましたが、今回の目的にはデータの表現方法、ファイルからの読み込みと自分のデータ形式への変換、データの並べ替え、自分のデータ形式からファイルへの変換と書き込みといった要素が混じっています。
大きな問題で考えると躓くことも多いので、細かく分割して考える必要があるかもしれません。

また、本文に"no\t123"とか、".\n"とか書かれていた場合にどのようにファイルに書き出されるか、どのようにアプリとして扱わないといけないかもちゃんと検討しておきましょう。
> cboardのデータファイルかな、これは。

はい、C-Bordの掲示板です。
壊れてしまったのですが、ツリー情報を持っていたファイルが壊れてしまい、自分でツリー構造を再構築しようと試みています。

> あくまで1つのアプローチに過ぎないので、自分で考えてみて下さい。
ありがとうございます。
細かい留意事項まで親切に書いて頂き、本当に助かります。

処理を見る限り自分にはかなり敷居が高いようですが、なんとか頑張って作ってみたいと思います。

DOBON.NET | プログラミング道 | プログラミング掲示板