※このホームページは、バリアフリーを目指し、音声読み上げソフトに対応しています。

 


新・電子ノートブック Snap Note 3
  フリーソフト Snap Note 3 mini 公開!  

ソフトウェア・デザイン館 Sage Plaisir 21 へようこそ!
隔週月曜更新 : 毎週1つのニュースまたはプログラミング技術を取り上げ、解説します。

東日本大震災 まとめページ

[PR] 最強のスクリプト・ライブラリ vbslib5 が Windows 10 に対応!
[PR] シェル・スクリプトを格段に使いやすくする bashlib1 公開中


週刊 IT プログラミング技術 2018/ 8/13

ワイルドカードを拡張する サブ フォルダー記号と FF-path 属性

フォルダーの中の特定の拡張子を持つファイルだけをコピーや削除したいことが
よくあると思いますが、そのときに使うのが、*.bak のようなワイルドカードです。
* が任意の名前にマッチします。 今回は、ワイルドカードのように、複数のファイルや
フォルダーのパスをまとめて指定する記述法についての話です。 ここで紹介する記述法は、
vbslib を使うツールで使えます。

vbslib は、以下からダウンロードできます。 Windows 用です。
  http://vbslib.osdn.jp/
  http://www.sage-p.com/vbslib/vbslib.htm
  https://github.com/TsNeko/vbslib

バージョン管理ツール Git では、.gitignore ファイル(コミットに入れないパス)に 
glob と呼ばれるパターン マッチングの記述法で書くことができます。 Python スクリプト
でも使えます。 glob はワイルドカードを少し発展させたようなもので、ごく一部の
正規表現が使えます。 ただし「ごく」一部です。 Python のヘルプには、
「glob モジュールは大きなチカラを秘めていて、どんな状況においても役に立ちます」
と大口をたたいていますが、実際はワイルドカードを超えて使えるケースは
非常に限られています。 1文字のどれかにしかマッチしないなんてありえません。
また、サブ フォルダーにあるすべての Debug フォルダーさえ記述できません。

zsh では、** を記述するとサブ フォルダーも含めて検索します。 しかし、
そういう意味であることが ** という記述からでは分かりにくいですし、
シェルを zsh に変更することは厳しいです。

vbslib に付属のツール(例:PickUpCopy)は、パスをまとめて指定するときに
「サブ フォルダー記号」と「FF-path 属性」(File or Folder as files Path attribute)
を、設定ファイル(XML)に記述できます。 また、vbslib には、その記述法を処理する関数を
用意しています。 

サブ フォルダー記号について説明します。 サブ フォルダー記号とは、
パスの最後の \ の左に付ける * または . のことで、この指定によって、
サブ フォルダーを検索するかどうかが変わります。

  ・"*\file.txt" … サブ フォルダーも含めて file.txt を検索する
  ・".\file.txt" … サブ フォルダーも含めないで file.txt を検索する
  ・"fo\*\file.txt" … サブ フォルダーも含めて fo フォルダーの中の file.txt を検索する
  ・"fo\.\file.txt" … fo フォルダーにある file.txt を検索する

また、パスの最後が \ のときは、フォルダー(ファイル以外)を明示的に
指定したことになります。 つまり、必ずフォルダーにマッチさせたいときは、
最後に \ を付けてください。 付けなくてもフォルダーにマッチしますが、
ファイルにもマッチします。

  ・"*\Debug\" … サブ フォルダーも含めて、フォルダー名 Debug を検索する

次に FF-path 属性について説明します。 これは、階層構造を持った書式なら何でも使えますが、
主に XML に記述するときの記述法です。 FF-path 属性の処理モジュールは vbslib にあるの
ですが、XML なら、XML パーサーと FF-path 属性の処理モジュールを結合した専用の関数
new_PathDictionaryClass_fromXML を用意しています。 以下では、XML での記述法を
説明します。

  <Root>
    <Variable name="${ExceptExts}" value="*.obj, *.bak"/>

    <File path="Sample.txt"/>
    <Folder path="SubFolder" attr="ABC">
      <Except path="${ExceptExts}"/>
      <Except path="SubFolder\Debug"/>
    </Folder>
  </Root>

上記の XML ファイルで指定しているパスは、Sample.txt と SubFolder、
ただし、SubFolder フォルダーの中の *.obj と *.bak と SubFolder\Debug は対象外です。

FF-path 属性は、上記の path 属性のことです。 File タグ、Folder タグのそれぞれに
ある path 属性が、FF-path 属性の機能を持っています。 FF-path 属性には、
サブ フォルダー記号を記述することができます。 なお、FF-path 属性の機能を持っているのが、
File タグと Folder タグであることと、属性名が path であることは、XML ファイルを
使うツールの仕様によって変わる可能性がありますが、vbslib に付属のツールについては、
変わりません。 

Except タグは、対象外のパスを指定するタグです。 FF-path 属性を持っているタグの
子タグとして記述できます。 属性値には、サブ フォルダー記号が使えます。 
また、CSV 形式で複数指定することができます。 なお、Except というタグの名前は固定です。 
path という属性の名前は、親タグから引き継ぎます。 

FF-path 属性には、変数の参照(Variable タグの参照)を記述することができます。 
Variable タグは、FF-path 属性が使える XML ファイルでは必ず記述することができます。 
なお、vbslib には、Variable タグを処理する LoadVariableInXML 関数が用意されており、
FF-path 属性が使えないツールでも使えることがあります。

FF-path 属性は記述する順序に依存しません。 それは、使いやすい仕様であることの
大事な要素です。 順序によって設定が異なるというのは、非常に分かりにくいです。
データファイルは、処理順序を記述するものではないのですから。 

ただし、順序に依存しない仕様では、両方の設定パターンにマッチするときにどちらの
設定であるかが明らかでないと、これも使いにくくなります。 そこで、複数の FF-path 属性に
マッチするとき、それが対象であるか対象外であるかは、以下の優先順位で決まる仕様に
なっています。 上にマッチするほど優先されます。 基本的に長いパス(深いパス)が
特別な設定として優先されると考えてよいです。 しかし、それすら意識しなくても、
自然とそのような優先順位で設定は行われるものです。

  ・ファイルのパス(長い)
  ・ファイルのパス(短い)
  ・ワイルドカードがあるパス(\ 記号を含み、長い)
  ・ワイルドカードがあるパス(\ 記号を含み、短い)
  ・ワイルドカードがあるパス(\ 記号を含まず、長い)
  ・ワイルドカードがあるパス(\ 記号を含まず、短い)
  ・フォルダーのパス(長い)
  ・フォルダーのパス(短い)

たとえば、*\Debug が対象で A\*\Debug が対象外と指定したら、
A 以外のフォルダーの中にある Debug フォルダーにマッチするという意味ですが、
もし、*\Debug が優先されてしまうと、A\*\Debug の設定が完全に無視されてしまいます。
なぜなら、*\Debug ⊃ A\*\Debug (⊃は部分集合を表す)ので、たとえば、A\*\Debug に
マッチする A\B\Debug は、*\Debug にもマッチしてしまうからです。

ところで、クリーンするときは、PickUpCopy ツールをお勧めします。 PickUpCopy は
コピーを作るので、make clean と異なり、苦労して作ったファイルを誤って
消してしまうことがありませんし、コピー元のプロジェクトをフル ビルドしなくて済みます。
それを避けるためにコピーしてからクリーンをするかと思いますが、それこそ PickUpCopy
で行っていることなのですが、削除するファイルをコピーしない分、高速に処理します。

また、.gitignore ファイルを使うと、リポジトリに入らないファイルなのに、
存在するものとしてコンパイルのテストをしてしまうため、不可全なコミットの原因に
よくなってしまうのですが、PickUpCopy ツールでクリーンすると、その不具合の原因を
取り除くため、開発の品質も上がります。 もし、コミットをミスすると、他のメンバーが
数日間更新できなくなるなど、非常にコストが高くつくのに、.gitigore を使い続ける
なんて無責任です。



参考
>>> http://ja.pymotw.com/2/glob/

Sage Plaisir 21 のブログやツイッターを読もう!

Sage Plaisir 21 では、ここのホームページのほかにブログとツイッター も行っています。
ブログは、こちら。
ツイッターは、こちら。

Sage Plaisir 21 メールマガジンを読もう!

週刊 IT ニュース&コラム』には、 このページに掲載している コラムの他に、注目ニュースを集めたリンク集も、掲載しています。 日々多く集まる IT 情報から、注目すべき話題をコラム形式で取り上げますので、 ぜひチェックしておきましょう。 (サンプル、および登録)


Sage Plaisir 21 Contents
[ English | 日本語 ]

自動化ツールのダウンロード (2017-01-04) update!

急速な IT 革命により開発スピードの向上が課題になっています。 その鍵になるのがツールの活用または開発です。 一般的なものから専門的なものまで使えるツールを公開しています。

技術資料&オープンソース (2012-03-19)

扱う技術が多くなってくるにつれ、 技術はマスターするものではなく調べるものになり、 どれだけ実践に即した資料を集められるかどうかが、 勝負になります。標準的な技術の資料だけでなく、 プログラムソースやライセンスフリーのライブラリも公開しています。

オブジェクト指向プログラミング設計 (2000-04-01)

Visual Basic 7 にもついに本格的なオブジェクト指向の 機能が追加され、ソフトウェア技術者には必須の知識に なりつつあります。長年の研究の成果から、最新の応用方法まで 様々なメモを公開しています。

ソフトウェア・デザイン館より(技術エッセイ)   (2000-11-01)

プロの経験を通じて習得したソフトウェア全般に関する 技術を解説しています。 ソフトウェアとは何かといった根本的なことを通じて、 デザインに関するポイントをわかりやすく説明しています。


          
 ソフトウェア
デザイン館
Sage Plaisir 21

Simple and Visual

SagePlaisir21サーチ
パワード・バイ・グーグル

週刊 IT ニュース&コラム

8/13 ワイルドカードを拡張する サブ フォルダー記号と FF-path 属性

7/30 CPU のリターン予測機能に見つかった脆弱性 スペクターRSB

7/16 メンバー変数は、グローバルのスタイルにする - リーダブル コード(52)

7/2 車のキーがスマホに置き換わる Digital Key

6/18 関数の引数は、グローバルとローカルの両方のスタイルにする - リーダブル コード(51)

6/4 EUの個人データ保護法GDPRの施行が開始され早速訴えられる

5/21 グローバルかローカルかを瞬時に分かるようにする - リーダブル コード(50)

5/ 7 漫画の海賊版サイトをブロッキングできるよう政府が体制整備

4/23 if節と主節を逆にするな - リーダブル コード(49)

4/ 9 Facebook で入手した個人情報がトランプ氏を当選させたとして炎上

3/26 カバレッジ100%を目標にしないほうが品質が高い

3/12 グーグルがよしとする Web ページかどうかを自動診断する Lighthouse

2/26 正常条件を示す、括弧の内側の空白を消すな - リーダブル コード(48)

2/12 コインチェックから NEM が流出、仮想通貨全体の信用低下

1/29 テスト プログラムに必須のコメント

1/15 CPU の投機実行とキャッシュに見つかった脆弱性 スペクターとメルトダウン

12/18 メモリーやコンピューターなど、語尾の長音記号を省略するな

12/4 ツイッターが認証済みアカウントの定義を変更

11/20 関数の直後に空白を入れるな - リーダブル コード(47)

11/4 無線LANの暗号 WPA2 に脆弱性 KRACKs、ただし危険度は小

10/23 XML にローカル変数が使えるようになる vbslib の LoadLocalVariableInXML

10/9 スマート スピーカー Google Home が日本で発売

9/25 XML に変数が使えるようになる vbslib の LazyDictionaryClass

9/11 京セラが汎用的な IoTユニットを開発。屋外での監視作業を自動化へ

8/28 変数の展開を遅延評価する vbslib の LazyDictionaryClass

8/14 HTML5 版ゲームのサービス開始や会社の設立が相次ぐ

7/31 人が死んだバグ、セラック25の事故から学ぶべき Nancy 教授の教訓

7/17 チケットの転売対策にも普及したSMS認証とその闇

7/3 Keyword Substitution の違いを無視して比較する DiffWithoutKS

6/19 安心して手軽にボランティア活動ができる &HAND

6/5 使っていないソースのセクションをカットする DoTextShrink

5/22 ツイッターの機能にフォーラムの機能を追加したマストドン

5/8 ソース ファイルの一部を隠す CutSharpIf, CutComment

4/24 iOS アプリ版ツイッターだけが17歳未満で使用禁止になる

4/10 マージがコンフリクトしても自動解決する ThreeWayMerge

3/27 あなたの机や壁がタッチパネルになる Xperia Touch

3/13 ソース ファイルの英訳と WHITE SQUARE エンコーディング判定法

2/27 運送業大手 UPS がトラックからドローンを発着する実験に成功

2/13 使いなれた外部プログラムを vbslib から起動する Setting コマンド

1/30 Nintendo Switch の新しいコントローラー Joy-Con

1/16 プログラム ソースの静的設定を一度に行う vbslib の Switches

12/19 銀行の API 仕様の公開へ、金融制度ワーキング グループ

12/5 よく使うコードの断片として登録するべきデバッグ用スニペット

11/21 ファンクション キーを Touch Bar に置き換えた MacBook Pro

11/7 人工知能の進化にみる論理的思考の限界と新しい開発プロセスの必要性

10/24 アマゾンが講談社の電子書籍を無断で配信を停止

10/10 レアケースの処理が最初に来る条件式を書くな - リーダブルコード(46)

9/26 東京ゲームショウ2016、PS4, PSVR 対応ゲームが本格化

9/12 数字があれば詳細に分析できているとは限らない

8/29 乾電池が IoT になる MaBeee が一般販売を開始

8/15 バカにはできない定性的な見積もりの代表 KKD 法

8/ 1 スマホ向けゲーム、ポケモンGOのダウンロードが開始され社会現象に

7/18 メインの処理の前の空行を詰めるな - リーダブルコード(45)

7/ 4 Webサービスを連携する IFTTT のイントラネット版、Microsoft Flow

6/20 名前空間のエイリアスは省略するな - リーダブルコード(44)

6/ 6 それぞれの工程に専門家を配置する工程別分業開発

5/23 それぞれの工程に専門家を配置する工程別分業開発

5/ 8 人間の手をスマート ウォッチのタッチパッドにする SkinTrack

4/25 テスト駆動開発では、失敗するようなテストを書くな

4/11 Windows で bash が動く Windows Subsystem for Linux 発表

3/28 手戻りの少ない仕様には、必ずテスト コードが存在する

3/14 連邦裁判所が命じた捜査協力を拒否するIT業界が隠していること

2/29 哲学の成果に基づいて、仕様書と同時にサンプルやテストを作ろう

2/15 Visual Studio Code がスマホ向けライブラリー Cordva に対応

2/ 1 ウォーターフォールは最後だけで、まずプロトタイピングをしよう

1/18 たった 5ドルのコンピューター Raspberry Pi Zero が発売

12/28 ルールをルールにするな - リーダブル・コード(43) 特別編

12/14 IBM、人工知能で適切な Web API を提案する API Harmony を発表

11/30 ヨーダ記法で書くな (4) - リーダブル・コード(42)

11/16 Android のアドウェアが2万を超えるアプリで検出される

11/ 2 ヨーダ記法で書くな (3) - リーダブル・コード(41)

10/19 フォルクスワーゲンが排出ガス処理の無効化プログラムを認める

10/ 5 ヨーダ記法で書くな (2) - リーダブル・コード(40)

9/21 3D Touch の iPhone 6s、大画面の iPad Pro を発表

9/ 7 ヨーダ記法で書くな (1) - リーダブル・コード(39)

8/24 Windows10 のオンライン無料アップグレード開始。無料期間は1年

8/10 ポインター宣言を表す * を変数に付けるな - リーダブル・コード(38)

7/26 Nintendo DS, Wii を開発した 任天堂の岩田聡社長がご逝去

7/13 カッコの内側の空白の有無を統一するな - リーダブル・コード(37)

6/29 日本年金機構から個人情報流出。対策法の改善を考察する

6/15 連続した空白を1つにまとめるな - リーダブル・コード(36)

6/ 1 iOS や Android 向けのソースもビルドできる Windows 10

5/18 インクリメントの演算子を書くな - リーダブル・コード(35)

5/ 4 Apple Watch 発売。スマホが普及した現代に必要かどうか

4/20 大文字小文字に統一するな - リーダブル・コード(34)

4/ 6 Google の次世代 JavaScript、Dart は Chrome に組み込まない方針へ

3/23 配列を pointer と名付けるな - リーダブル・コード(33)

3/ 9 Lenovo 製 PC に付属の Superfish に Web サイトを偽装する脆弱性

2/23 ハンガリアン記法を使うな - リーダブル・コード(32)

2/ 9 現実世界にホログラムを表示することが現実的になる HoloLens

1/26 this ポインターを省略するな - リーダブル・コード(31)

1/12 新型 MacBook Air は、USB Type-C 端子のみ搭載されると予想

12/22 キャピタライゼーションを無視したルールを作るな - リーダブル・コード(30)

12/ 8 Visual Studio Professional と同じ機能の無料版 VS Comminuty

11/24 性能を暗黙的に示すルールを作るな - リーダブル・コード(29)

11/10 W3C より HTML 5 がついに勧告される

10/27 実装依存回避のために独自の定義をするな - リーダブル・コード(28)

10/13 多くの Linux で使われる bash に重大な脆弱性が多数発生

9/29 #define のシンボルを大文字だけにするな - リーダブル・コード(27)

9/15 富士通が発表した設計書からプログラムを自動生成するツールの使い道

9/1 連続した空行、空白、アンダースコアを禁止にするな - リーダブル・コード(26)

8/18 YouTube のような無料の PDF 文書投稿サイト PDFy

8/4 処理内容を示していない関数名を禁止にするな - リーダブル・コード(25)

7/21 Facebook がニュースフィードの一部を減らして無断で心理実験

7/7 プリプロセッサーを行頭に書くな - リーダブル・コード(24)

6/23 Google が YouTube からインディーズレーベルを締め出し

6/9 計算順序を明示する冗長な括弧は書くな - リーダブル・コード(23)

5/26 Google と OpenSSL にパスワードなどが盗み取られる脆弱性

5/12 アドレスに &演算子を強制するな(2) - リーダブル・コード(22)

4/28 STAP 細胞の疑惑を最初に指摘した匿名検証サイト PubPeer

4/14 アドレスに &演算子を強制するな(1) - リーダブル・コード(21)

3/31 マイクロソフトの Office 365 が iPad に対応、閲覧は無料

3/17 アドレスやポインターを配列にするな - リーダブル・コード(20)

3/3 仮想通貨 ビットコイン の大手取引所 Mt.Gox が民事再生法を申請

2/17 カード節と分岐を一緒にするな - リーダブル・コード(19)

2/3 Google Chrome から CSS Regions 標準のサポートを廃止する検討

1/20 複雑な条件式は AND と OR だけにするな - リーダブル・コード(18)

もっと前の記事

自動化ツールのダウンロード

Snap Note 3 mini - サクサク使える自由ノート  new!

Plastic Window 1.20 - ウィンドウを半透明に  new!

Shortcut Director 1.00 - ショートカットのリンク切れ修正

Archives Folderizer SV 1.10 - 圧縮解凍

デジタルスクラップブックSVG Cats 2

その他のツール

オブジェクト指向プログラミング設計

技術資料

All Text composed by T's-Neko ts-neko@sage-p.com,