[topic] フォルダパス一覧のツリー構造への変換
Posted feedbacks - HSP
モジュール変数をツリー構造に使用しています。
see: モジュール変数でツリー ( Fuji Diablog )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #module m_tree children, content
#modinit str _content
#define global new_tree( %1, %2 = "" ) newmod %1, m_tree, %2
content = _content
dimtype children, 5, 1
return
#defcfunc get_tree_content modvar m_tree@
return content
#modfunc get_tree_child str _content, var result
f = -1
foreach children
if get_tree_content( children.cnt ) != _content : continue
f = cnt
break
loop
if f >= 0 : result = children.f : return
new_tree children, _content
result = children( length(children) - 1 )
return
#modfunc _show_tree str indent
#define global show_tree( %1, %2 = "" ) _show_tree %1, %2
if indent == "" {
mes content
} else {
mes indent + "┗" + content
}
foreach children
show_tree children.cnt, indent + " "
loop
return
#global
paths = {"
abc\\def
abc\\def\\gh
abc\\def\\ij
abc\\jk\\lm
de"}
new_tree tree, "ROOT"
paths_index = 0
repeat
getstr path, paths, paths_index
if strsize == 0 : break
paths_index += strsize
t = tree
path_index = 0
repeat
getstr v, path, path_index, '\\'
if strsize == 0 : break
path_index += strsize
get_tree_child t, v, t
loop
loop
show_tree tree
|



todogzm
#4458()
Rating1/1=1.00
フォルダパスの区切り文字は'\'文字を使用しています。
以下のような1行1パスのフォルダのパスがあった場合、
abc\def
abc\def\gh
abc\def\ij
abc\jk\lm
de
イメージとして、以下のようなツリー構造を構築できればOKです。
ROOT
┗abc
┗def
┗gh
┗ij
┗jk
┗lm
┗de
ツリーですのでルートがあります。上記のフォルダ一覧はルート以下にぶら下げてください。また、同じフォルダにぶら下がっているサブフォルダの名前は重複させてはいけません。
上記のような出力は結果の分かりやすさとしてあった方がいいですが、なければないで構いません。また、ASやJavaFXでグラフィカルな結果を表示するプログラムでも構いませんが、データ構造はちゃんと作ってください。
[ reply ]