=========================

 ファイルリスト作成スクリプト
 遊園地の迷路v0.992

 HTML文書スクリプトで書いたファイラー

作者の連絡先

kaz_kimijima@yahoo.co.jp
http://kimijima.at.infoseek.co.jp

=========================

・はじめに

 今回のこの作品ははどちらかというとユーザーの便宜
を図った実用的なユーティリティというよりは
 半ば実験的な試行錯誤をツールとしての作品としてま
とめて
 いわば一種の論文として発表するものです

 ・わたしはやや恥ずかしい

 前回上梓したver0.99の上に発表前に置けるテストが
不十分だったために部分的なケースでしかこのユーティ
リティを使用する事ができなかったようです

 そのケースとは

 Cドライブの比較的サイズの小さなファイルしか検索
することが出来ない

 ということでした

 実際オフィスでの用途としては普通デスクトップ関連
の階層における文書ファイルが閲覧できれば実際上十分
なのでくだんの不都合にも関わらずこのユーティリティ
はある程度のダウンロード数におけるご愛顧をいただい
たようです

 実はプライベートでFドライブに指定されている外付
けHDDに対し大きな動画ファイルにアクセスしようとし
て発生したエラーを追跡しているうちにその不具合が
見つかった次第でした

 (ただし動画ファイルなど巨大なコンテンツに作成HT
ML文書リストの項目からクリックしてインターネットエ
クスプローラー上から呼び出そうとすると
 インターネットエクスプローラーはまずその巨大ファ
イルを手元にダウンロードしてから処理をファイルの拡
張子に関連づけられた対応処理ソフトに渡そうとします
 実際上は巨大ファイルに対してはショートカットエイ
リアスのようにはこの出力HTMLファイルリストは使用で
きません一覧明細としてご利用ください)

 今回その不具合を除去したものがこのバージョンです

 この項目のみ 2009年 春 UPDATEとして

 ・作品の機能

 DOSの時代にパソコンをたしなみとしてはじめた人で
あれば雨後のたけのこのように大量に世に出たファイラ
ーという市販ソフト群をおぼえていることでしょうか

 (比較的素朴なこれらの開発で商品として利潤がでた
なんてことはいまから考えると夢のようです
 ただインターフェースをCやマシン語で書かなければ
ならなかった場合はその限りではありませんが)

 今回のユーティリティはハイパーテキストを使用した
いわばこの種のファイラーです

 同じようなソフトを別の名前で公開してはいますが内
部構造が全くちがうので私の中では違うユーティリティ
です

 ・動作条件

 95以降のWINDOWSのAT互換機で動作します

 インターネットエクスプローラーが必要ですが5.0で
ある必要はありません4.0でも動作するはずです

2009年 春加筆 4.0では動作しません
検索ファイル拡張子を検査する論理がversion5.0以上を
要求します

 メモリやプロセッサは多く要求はしません最低486で8
Mの環境でも動作すると思います

 ・具体的な使用方法

 アーカイブmzjuras2.exeを解凍すると以下のファイル
が出てきます

meize.htm 実行ファイルですインターネットエクスプ
ローラーのスクリプトの論理の形式です

readme.txt テキスト形式のreadmeです論文としての動
作論理解説は含まれません

readme.htm HTML形式のreadmeです動作論理解説が含ま
れます
(動作論理解説が説明図の表示を必要とするためです)

いくつかのjpegファイル readme.htmが必要とする説明
図面です

 動作だけの目的ならmeize.htmだけが必要です
 持ち歩くのであればこのファイルだけで十分です

ーーーーー

まずアーカイブを解凍してできるmeize.htm
をクリックしてください

 このHTMLファイルはどこにあっても動作しますが出力
結果のOUTPUT.HTMはかならずデスクトップに出力されま
す

 これはWINDOWSのインターネットエクスプローラーの
レジストリ設定なので実際上変更はできません

 クリックすると操作画面が現れます

 操作画面
=========================

インターネットエクスプローラのバージョンチェック

操作するドライブ名を入力窓(初期値はCドライブ)
検索するファイルの拡張子窓(初期値はxls)

実行ボタン

=========================

 操作は比較的簡単です

 画面を開いた直後の状態でも実行ボタンを押せば動作
します

 マシン全体を検索する機能を付けようとも思いました
が手順が煩雑になりますし不用意にサーバーのネットワ
ークドライブにアクセスしやすい画面でもよくないと思
いましたのでドライブ名は逐次指定にしました
 恣意的にアクセスしようと思えばできますのでこれは
気持ちの問題ですが

 特になにも指定しない場合はCドライブに存在する

拡張子XLS excelのファイル

 の拡張子のファイルリストをクリックアクセス可能な
HTMLファイルとしての出力をおこないます
(ただしサーバーにある最新のExcelのファイルをクラ
イアントの、古いバージョンのExcelで開こうとしても
エラーになることがありますのでご注意ください
 これは表の規格やマクロウィルス対策で付け加わった
MSExcelの仕様です)

・ドライブ名を変更するとそのドライブ名のなかの
・拡張子を変更するとその拡張子のファイルを

検索します

 ドライブ名の指定は半角英字一文字です
半角コロンはつけないでください

 拡張子の指定は半角英数三文字指定ですが
 特殊な中間ファイル用の二文字拡張子
 あるいはネット由来の4文字の拡張子(HTMLやJPEGな
ど)
 にも対応します

 英数以外の使用可能な文字記号は#$%&=-_@です
 明らかにシステム用のメタキャラクタは除外しました
、
 ドライブ・拡張子とも不適切な入力の場合にはエラー
メッセージが表示されます

 処理が無事に終了した場合にはデスクトップに出力さ
れているOUTPUT.HTMをクリックしてください

 それぞれのファイルにリンクできるファイルリストが
ディレクトリ別に整理されて表示されているとおもいま
す

・!!処理が終了しない場合

 暴走するような論理は記述していませんが

 もしも処理が終了しないで数分以上かかる場合は要注
意です
 参考環境ですが開発環境の数ギガあるハードディスク
では約一分弱で処理は終了しました

 そのような場合には処理の途中でもデスクトップにあ
るoutput.htmをマウスの右クリックでファイルのプロパ
ティを参照してください

 もしもファイルが数十メガバイトにもなっていたとし
たらあきらかに動作異常です

 インターネットエクスプローラとウィンドウズをとも
に強制終了しシステムを再起動した場合でも現象が起こ
る場合ではおそらくそのマシンシステムではこのツール
は使えません
 そのような現象がおこるばあいには対象のファイルシ
ステムをウィンドウズが適切に認識してない可能性があ
ります
 もしそのような異常な環境で処理を放置してしまいま
すとディスクの容量いっぱいに超巨大な出力ファイルが
できる可能性があります

 このユーティリティを使用する場合には終了するまで
使用者貴兄がその前に待機をしていてください

 一般的にスタンドアロンのウィンドウズマシンでは問
題はないと思いますが

 UNIXのサンバホストにウィンドウズクライアントがネ
ットワークドライブとしてログインしている場合とか
 モトローラやパワーPCやMIPSなど非インテル互換シス
テム上のNTやバーチャルPC環境での動作はまったくわか
りません

 絶対に重要なシステムあるいは重要なマシンのリソー
スをダイナミックに参照するシステム上では使用しない
でください

・ソースコードについて

 研鑽目的で論理を追いかけることはかまいませんが
 このコードを修正したプログラムを第三者に配布する
ことは非常に危険なのでやめてください

 プログラマが少ないのは論理が難しいことではなくて
ひとえに無責任な人が多すぎるからです

 以下は余談ですが

 自分が設計したものでもないのに
 構造を理解しないままパッチやオーバークロックを試
みる風潮は自分はあまり好ましいものだとは思っていな
いのが自分の感想です

(SEはラプトルのフェンス電流を切ってはいけません)


・使用条件と免責

 フリーウエアです
 配布や使用資格条件は常識の範囲内で特に制限はあり
ません
 また、くどいですが自己責任で使用してください

 重要なマシンでの操作や重要なデータをバックアップ
をとっていないなどの状況下で使用することはお避けく
ださい

 作者はこのユーティリティを使用して生じたあらゆる
不具合に責任を負いません

 具体的にもっともありそうなのは拡張子EXEのかたち
で検索をしてしまいうっかりWINDOWSシステム内部のア
ンインストール関係の実行ファイルを起動してしまうこ
とでしょうか

 Cドライブの直下WINDOWSフォルダにはシステムファイ
ルがあります
 十分注意してください


・論文本体(よみとばしても結構です)

 たまにはこういうような実験報告としての記述があっ
てもいいのかもしれないと思い
 以下を記述するものです

 このプログラムの性格

 実用的な側面ではこれはPCのすべてのローカルドラ
イブに存在するファイルのリストを出力するプログラム
です
 以前の拙作「WEB結合」のHTMLファイルリスト出力機
能に当たる機能をインターネットエクスプローラのVBス
クリプトで表現したものです
 WEB結合のファイルリスト処理はDOSシェルのdirコマ
ンド(Bオプション)に事実上全く依存していました

 今回のプログラムは実際上の使用勝手としては前作と
あまり変わりありませんが今回は全く新しい発想にもと
づいて論理を記述しました

 実際作った本人も

「こんなことがほんとにできるんだ」

と稼働した瞬間におどろいたものです

=========================
=========================

 このプログラムの重要な動作要素は

「自分のコピーに対する再帰呼び出し」

ということです

 以下に詳しく説明いたしますので言葉だけ覚えておい
てください

・ファイルの検索の実際について

 このプログラムはVBライブラリが提供するフォルダ・
ファイルオブジェクトコレクションというものを連続処
理して実現されています

 実際上にあるドライブのディレクトリとファイルの階
層構造は樹形図の階層構造として理解することができま
す

ファイルの樹形図

c:\-----
  |
  ------
   |
   ------
    |
    ------



 このような階層構造においてすべての小枝の末端(こ
の問題においては一個一個のファイル)をすべて検索の
意味で「なめていく」ためにはどのような論理が必要で
しょうか

 今回はマシンの高速性に依存するという条件において
多少論理的に無駄があっても木訥にしかし確実に処理が
可能な論理を使用いたしました

 それは迷宮の脱出の論理と呼ばれるべきものかもしれ
ません

 遊園地の等身大迷路やボードゲームのダンジョンのよ
うなラビリンスにおいて、

 時間(迷宮問題の難解度によっては天文学的な時間を
も意味することがありますが、今回は計算機の驚異的な
計算速度に依存してもかまわないという意味においてこ
の項は不問にしましょう)

 と食料だけはたっぷりある場合においてもっとも強力
な方法が今回の論理です

(もちろんこの迷宮にはミノタウロスのような天敵は生
息していないことにします)

 そもそもすべてのプログラムというものは手続き型の
プロセスなのでその記述の各段階はしばしば数列論にお
ける漸化式のようなものとして表現されますが
 その漸化式としてのプログラムとして上記の迷宮の問
題を実現したとき

 そのプログラムの記述は実は当初自分が思っていたも
のよりはかなり簡単なものでした

 ・考え方のアウトライン

 意外な事実と思われるかもしれませんが

 もし制限時間が無制限であれば
 探索者の片方の手を左側の壁ないし右側の壁にずっと
滑らせ続けて歩きさえすれば必ず迷宮の外側にでること
ができます

 もし迷路に出口がない場合には必ず入った入り口に戻
ることができます

 コンピュータのドライブのディレクトリ構造も、この
出口と入り口が同じ穴の迷路として理解することができ
ます

 ドライブディレクトリの検索論理を作成する必要のた
めには
 あとはこの、手をずっとかべにつけた着けたままで歩
くことという必要条件を具体的なプログラム論理のうえ
で構築出来さえすればよいわけです

 ・プログラムのためにシステムが提供している機能

 VBコンパイラだけでなくインターネットエクスプロー
ラやほかのEXCELなどのofficeアプリケーションが利用
することのできる
 VisualBasicスクリプト環境というものは
 Windowsのシステムフォルダの中にDLLファイルとその
機能として組み込まれています

 このDLLファイルが提供する機能の多くは階層構造を
持った変数(場合によっては手段関数のアドレスをも含
むその意味ではダイナミックな変数)の束であり、これ
らは構造体という名称で呼ばれています

 今回このIE用VBスクリプトが利用するフォルダファイ
ルコレクションというものも同様な操作・アクセス可能
な構造体です

 じつはこのフォルダファイルコレクションが具体的に
は前にふれたのファイル樹形図の操作論理上の実体です

・フォルダファイルコレクションの性質

 この構造体は樹でいうところの幹の根本から変数的な
構造を出発させ(つまり幹の根本が階層ゼロに当たりま
す)

 それぞれの変数の束を

 その根幹の出発点からみて
 それぞれの変数が第何階層の分岐なのか、そこで何本
の枝に分かれているのかという情報をデジタル整数とし
て記録する事によって管理しています

 これを分岐の点の場所位相をそろえて表現すると以下
の図のようになります

 図1  

・ファイル構造体上での要求された問題の記述と解法の
仕方

 この論理上に「壁に手を着けたまま法」を適用すると
さらに次の図になります

 図2 

 図を見るとわかるようにプログラムはその分岐(ここ
ではフォルダが自分よりの下位階層のフォルダを持って
いるかどうかという案件に相当します)においてさらに
下位の分岐があれば一気に階層を下っていくことが「壁
に手を着けたまま法」が要求するプログラム上必要な論
理です

 そしてその論理路においての論理上の底に到着します
が
 深海魚は尾根のむこうにもっと深い海淵がある可能性
をかんがみ、
 論理路においての分岐の峰まで浮上します

 これも壁手法が要求する論理です



A まず最初の同深度階層に達したらさらに下の階層があるかどうか調べる
B さらに下の階層がある場合はさらに下に進み自分より下の階層がない場合には浮上する
C 一つ上の階層に戻り同じ深度の次のフォルダの穴に入る

A dush ふたたび新しい枝でさらに下の階層があるかどうか調べる

以降延々繰り返し

 これを繰り返し無人論理はドライブというフォルダディレ
クトリ海溝のすべての深さの海底を調査するのです
 もちろん途中の対象ファイルをチェックしながらです

 (この概念自体は拙作マルチテキストwin版で実装し
てはいました)

 プログラムの基本的な設計は次のようになります

=========================
使用変数の宣言

プログラムの開始 ーーーーーー

もっとの上層のフォルダに入る(ルートフォルダといいます)

 自分のフォルダ中のファイルの名前を
 調べ上げて出力論理に出力します

論理関数ブロックの開始<<<<<<<<<<<<<<
現在のフォルダよりも下位のフォルダがあるか      ^
yes:下位のフォルダがあります            ^
                           ^
 下位のフォルダをコレクションのリスト順に呼び出す  ^            ループの始まり
                           ^
 呼び出されたフォルダにおいて            ^
 この論理関数ブロックを「多重呼び出し」する>>>>

 下位フォルダのコレクションがつきるまでこのloopを繰り返す

yesの終わり

no:下位のフォルダはありません


  ここで多重呼び出しされた子供の論理ブロックは自動
終了し自動的に親フォルダを管理している一階層上の論
理ブロックに制御が移ります

論理ブロックの終わり

ーーーーーー
出力論理 関数扱いなので与えられたファイル名の束を
テキストファイルとして連続の出力するだけの部分です

ーーーーーー

プログラムの終わり

=========================

  イメージできなければきわめて難解な処理をしている
ように思えますが高校数学でいうところの数列級数や微
積分の概念が理解できればそんなには難解ではないと思
われます

  この論理でいうところの「多重呼び出し」こそが「複
数コピーに対する再帰呼び出し」です

  記述とプログラムの動的な流れが見かけ上二重に見え
るので一見とっかかりにくいのですが

  プログラム上の論理ブロックは確かに

「テキストファイル上の

「記述としては一回しか」

記述されてはいませんが」


  しかしたとえば上から第4階層のフォルダをプログラ
ムが処理している場合には
 コンピュータの動作メモリーのうえでは論理のブロッ
クの記述のそれぞれ動作状態の異なるコピーが4つそれ
ぞれ独自の状態で展開されていることになるわけです

第一階層の論理が  記述のクローンであるところのこの動作がメモリーにプログラムが、終わるまで常駐する
第二階層を呼び出し

第二階層の論理が  記述のクローンであるところのこの動作も上記のプロセスとべつの人生として
          別の動作状態としてメモリー上に常駐する
第三階層を呼び出し

第三階層の論理が  以下同文
第四階層を呼び出す

第四階層はファイル名を出力関数に渡す 以下同文そして校長先生のお話<<(笑)

  これらがすべてメモリー上に展開し、
 なおかつそれらはプログラム上の記述としてはただ一
ブロックの論理ブロックでしか過ぎないということがこ
こでは重要なことなのです

 これはすくなくともVBのライブラリがある設定された
任意の論理ブロック(関数とかプロシージャとかの名前
で呼びます)の内側論理から自分自身の元の記述をを再
び呼び出し、読み出すことができるからなのです

  専門的なたとえではこの事情は
 クラス構造体とインスタンスとしてのコピーのその関
係にちかいものです
 構造体というものはあくまでも記述で動的な実体では
ありません

 変数の束であるところのクラスの構造体というものは
この場合のテキストファイル上の記述コードに近い存在
です

 実はこういうことができるとは
 ある意味ウィンドウズライブラリの仕様としては正直
驚きでした

 いわば記述上の論理ブロックの中に小さな論理矛盾が
あった場合
 それが繰り返し呼び出しの課程で複利計算式に増大し
てしまうことにもなるようです

 たとえばプログラムが終了したときに共通資産を初期
化あるいは開放しないような行儀のわるいコードをかい
たばあい
 素朴な一過程性のプログラムならば影響は比較的軽微
ですみますが
 かなりの課程をくりかえす呼び出しモジュールでは
マシンの資産を食いつぶすことも可能でしょう

 そのおそれがあった今回の動的変数は書き込みファイ
ルポインタとよばれるもので
 たとえば練習問題として巨大なのテキストファイルを
はくようなコードを書くためにはこのような同一モジュ
ールくりかえし呼び出しが便利です

 現実の実装上では
 安全のためFOR文などで回数を明示的に指定するもの
ですが
 過去にネットのブリッジをパンクさせたワーム増殖騒
動はこの種の現象です
 無制限に増殖するワームと呼ばれるプログラムがサー
バの部品をつぎつぎのっとってしまったのでした

 ・以下余談

 たぶん一般的にはコードに「クレタ人はうそつきだ」
と書いてはいけないのでしょう

 システムが知恵熱を出して悩みます(笑)

 2001年宇宙の旅のディスカバリー号の悲惨な結果
は作品の記述によるとその苦悩が暴走を招いたことにな
っていましたが
 続編でその人工知能が「真実をありがとう」と告白し
たテロップに多少印象をもったのはわたしだけではない
とおもいます
 しかし家畜をのぞく生活しているすべての生き物
が年賀状とお歳暮を含めた政治という知的ゲームのなか
でいきているのですから人工知能にも予測不可能な非線
形の世界でも柔軟に生きていけるつよさが必要なのでし
ょう
 だがまだ現実には計算機はそこまで賢くはありません

 ですからジャンクフードの嗜好のあるなしに関わらず
あまりシステムや第三者をからかう地雷のようなものは
公開するという意味では作らないようにするのがマナー
なのかもしれません
 でないと迷宮の中心にいるのはミノタウロスではなく
て危険を具現化した獣脚類であるということになるんで
しょうね

「いいか社会と恐竜を甘く見るなよ」というせりふが劇
中にありました

 職人肌の人はしばしば吸収期のどうして小僧を嫌った
りかわいがったりするものですが
 前に進む欲求はとうといものですが
 あちこちにいばらの藪があることを知るにはどうして
も子供部屋からでなければなりません

 現実に現実の物理学に反映させて物事を実現させよう
とするとき
 たいていのアウトラインよりも3倍から5倍の手間と
コストがかかるようです
 現場に立つことなく
 官僚主義と物語を記号化して受け止めることが当たり
前になるようになると生活が運営できなるという意味で
社会が崩壊します

 個人的な感想ですが
 源氏物語に始まる日本の王朝絵巻物文化は非常に危険
です
 ジャパニメーションは文化として腐敗する鴨川の死体
を認めようとしません

 実験冒険を趣旨とする自然科学としての理系離れは時
代が近代から中世に移行することを意味します
 自分の主観で物事を考える風潮がなくなると個性は雑
音となり
 人権は相対的に低下し刑罰は相対的に厳罰化します

 このことは全世界的な文明史の巨大な潮流なのでけっ
して誰にもとめることはできません

 

 注 映画に出てくるあの生き物はどちらかというとデ
ィノニクスですね

 (CopyRight Sスピルバーグ & Mクライトン)

この項おわり


余白の美