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

 


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

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

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

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


週刊 IT プログラミング技術 2017/10/23

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

vbslib の LoadLocalVariableInXML を使うとローカル変数が使える XML に簡単に
対応できるようになります。(ローカル変数が使えるかどうかは、XML をロードする
スクリプトによります。)

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

前回、vbslib では、Variable タグを変数定義として扱うことを説明しました。 
Variable タグで定義した場合、同じファイルの中のどこからでも変数の値を参照
できます。 XML をロードするスクリプトによっては、他のファイルからでも参照
できることもあります。 このようにどこからでも参照できる変数を、一般に
グローバル変数と呼びます。

しかし、どこからでも参照できることが逆に、副作用を伴うケースもあります。
例を挙げます。 

<Example>

<Group  name="1">
<Variable  name="${Base}"  value="C:\Base1"/>
<File>${Base}\FileA.txt</File>
<File>${Base}\Sub\FileB.txt</File>
<File>${Base}\Sub\FileC.txt</File>
</Group>

<Group  name="2">
<Variable  name="${Base}"  value="C:\Base2"/>
<File>${Base}\FileD.txt</File>
<File>${Base}\Sub\FileE.txt</File>
</Group>

</Example>

${Base} 変数が 2か所で定義されています。
この XML をロードすると、すでに定義されているという警告が echo 表示されますが、
そのまま続きを実行します。 変数を参照すると、参照する場所に関わらず、下で定義
した値になります。 つまり、File タグの間のテキストは、

C:\Base2\FileA.txt
C:\Base2\Sub\FileB.txt
C:\Base2\Sub\FileC.txt
C:\Base2\FileD.txt
C:\Base2\Sub\FileE.txt

になります。

C:\Base1\FileA.txt
C:\Base1\Sub\FileB.txt
C:\Base1\Sub\FileC.txt
C:\Base2\FileD.txt
C:\Base2\Sub\FileE.txt

ではありません。

XML はデータを表現しており、スクリプト言語のような手順を表現していません。
よって、変数と呼びますが、スクリプト言語での「定数」に相当します。

このように変数名(シンボル)が衝突してしまったときでも、変数を参照できる範囲を
一部に限定すれば、衝突しません。 Variable タグの代わりに LocalVariable タグを 
XML に記述すれば、参照できる範囲を一部に限定できます。 その範囲(スコープ)は、
LocalVariable タグの兄弟か子、別の言い方をすれば、LocalVariable タグの親の子です。
このような変数を、一般にローカル変数と呼びます。

<Example>

<Group  name="1">
<LocalVariable  name="${Base}"  value="C:\Base1"/>
<File>${Base}\FileA.txt</File>
<File>${Base}\Sub\FileB.txt</File>
<File>${Base}\Sub\FileC.txt</File>
</Group>

<Group  name="2">
<LocalVariable  name="${Base}"  value="C:\Base2"/>
<File>${Base}\FileD.txt</File>
<File>${Base}\Sub\FileE.txt</File>
</Group>

</Example>

File タグの間のテキストは、

C:\Base1\FileA.txt
C:\Base1\Sub\FileB.txt
C:\Base1\Sub\FileC.txt
C:\Base2\FileD.txt
C:\Base2\Sub\FileE.txt

になります。

vbslib の XML のローカル変数は、XML の仕様を変えるわけではないので、
XML をパースして取得できる値は、変数が展開された値ではありません。 
それぞれのローカル変数のスコープに合わせて、変数展開をする関数を呼ぶ
必要があります。 

まず、変数を使わずに XML をパースするスクリプトを示します。

path_of_XML = "Example.xml"
Set root = LoadXML( path_of_XML,  Empty )  '// LoadXML は vbslib の関数
For Each  a_file_tag  In  root.selectNodes( "Group/File" )
    value_with_variable = a_file_tag.selectSingleNode( "text()" ).nodeValue
Next

次に、グローバル変数を展開するスクリプトを示します。

path_of_XML = "Example.xml"
Set root = LoadXML( path_of_XML,  Empty )
Set global_variables = LoadVariableInXML( root,  path_of_XML )  '// ★追加
For Each  a_file_tag  In  root.selectNodes( "Group/File" )
    value_with_variable = a_file_tag.selectSingleNode( "text()" ).nodeValue
    value = global_variables( value_with_variable )  '// ★追加
Next

最後に、グローバル変数だけでなくローカル変数も展開するスクリプトを示します。

path_of_XML = "Example.xml"
Set root = LoadXML( path_of_XML,  Empty )
Set global_variables = LoadVariableInXML( root,  path_of_XML )
For Each  a_file_tag  In  root.selectNodes( "Group/File" )
    Set variables = LoadLocalVariableInXML( _
        a_file_tag,  global_variables,  path_of_XML )  '// ★追加
    value_with_variable = a_file_tag.selectSingleNode( "text()" ).nodeValue
    value = variables( value_with_variable )  '// ★変更
Next

5行目の LoadLocalVariableInXML が、ローカル変数をロードする関数です。
global_variables にロードされているグローバル変数と、ロードしたローカル変数の
両方が返り、variables に格納されます。 LoadLocalVariableInXML 関数の
第1引数には、変数を展開する値を持っている XML要素、または、その兄弟の 
XML要素を指定します。


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 ニュース&コラム

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,