Treeコマンドの結果から階層を指定して取り出すスクリプト
2023年04月11日
前回「Treeコマンドの結果から階層を指定して取り出すスクリプトのアルゴリズム」で、Treeコマンド結果の階層判定のアルゴリズムを書いたものの、
instrB関数が半角スペースを2バイトとカウントするせいでうまく動かなかった。
今回は、別の方法で考えてみた。
instrB関数が半角スペースを2バイトとカウントするせいでうまく動かなかった。
今回は、別の方法で考えてみた。
以下は、「Treeコマンドの結果から階層を指定して取り出すスクリプトの検討」で書いた、2層の特徴。整理しておいたのが活きた。
特徴
・全角1文字か半角2文字が2回登場。
・3バイト目と4バイト目がスペース2つ。
・7バイト目と8バイト目に─(罫線)が登場する。
「全角1文字か半角2文字」って、罫線のいずれかまたは半角スペース2つ。
半角スペース2つを全角スペース1つに置換すればいいじゃん!
instrBをinstrに変更して、midBをmidに変更して
バイトから文字に数値を直して完了。
何事もできてしまえば簡単。
LV判定処理は、以下のとおり。
dim testLineU
textLineU = "├─1階層目"
textLineU = "│ ├─2階層目"
textLineU = "│ │ ├─3階層目"
textLineU = "│ │ │ ├─4階層目"
msgbox getTreeLV(textLineU)
function getTreeLV(textLineU)
dim textLine : textLine = replace(textLineU," "," ")
dim LV : LV = 0
if mid(textLine,2,1) = "─" then
LV = 1
elseif mid(textLine,2,1) = " " then
if mid(textLine,4,1) = "─" then
LV = 2
elseif mid(textLine,4,1) = " " then
if mid(textLine,6,1) = "─" then
LV = 3
elseif mid(textLine,6,1) = " " then
if mid(textLine,8,1) = "─" then
LV = 4
end if
end if
end if
end if
getTreeLV = LV
end function
前々回の記事で記載したとおり、以下のスクリプトをベースに上記のレベル判定を行ったうえで、階層別のファイルに出力するスクリプトを作成した。
「CSVファイルのタイトル行を削除してリネームするスクリプト」
上記のソースがなかなか優秀で、
簡単に改造することができた。
ソースコードファイルは こちら。
PR
Comment