lycheejam's tech log

チラ裏のメモ帳 | プログラミングは苦手、インフラが得意なつもり。

VBAで深さ優先探索アルゴリズム

概要

ちゃんとしたアルゴリズムなんてソートくらいしかやったことなかったけど
会社でコード書いてたら「これ深さ優先探索とかいうやつじゃね?」ってなったので
忘れないように書いておく

言語はもちろんVBA
CもC#Javaもかわんねーからへーきへーき

前提

ルートのフォルダ名が"text"
その配下に0~5の数字のフォルダが配置され
さらにその下に0~9の数字のフォルダが配置されている
それが6*10*10*10*10の構成で存在してる

枝の先にのみ.txt形式の拡張子でテキストが配置されている。
そのテキストファイルを一つのフォルダに集約する想定

なんかいい感じの図はwikipedia参照
深さ優先探索 - Wikipedia

処理概要

フォルダ名を取得してそのうちの昇順で一番早いやつにまた潜りってのを
再帰関数で延々と繰り返してく

ちなみにこんな単純なんならバッチでやれよって話なんだけど
Windows server環境で実行したらスタックオーバーフロー起こして解決できなかった。
きっとバッチの書き方が悪かったんだろうけど
ちょっと書き方わからなさ過ぎた。

ソース


gist8473c424a27cc885971e6d5ad3772fbc

呼び出した自分自身にフォルダパスを渡してって繰り返し
このソースじゃVBAでファイルコピーかましてるけど遅すぎて6万ファイルとか待ってられないので
前書いた2次元配列使って読み込んだパスを一括転記からの

バッチファイルでファイルパス読み込んでコピー実行ってやり方に落ち着きました。
さすがにローカルでVBA操作してサーバーの6万ファイルコピーとかふざけてるからね

雑感

バッチ処理もうちょっと書けるようになりたい
仕事でバッチ処理書くとかshell書くとかってDB関連でSQLとかばっかだから
もうちょっとなんでも書けるようになりたいね。

バッチとかCとかで書いて処理速度計測してみたいね