WSH WSF JScript・VBScript で、YAML をパースする方法(js-yaml)
JScript や VBScript で yaml ファイルをパースしたいとき、
wsf形式と外部パッケージのjs-yaml
で、簡単に実現できます。
github.com
実装
yamlファイル。(sample.yaml)
文字コードは、SJISを使用。
# 設定ファイル config: title: "AppName" width: 1280 height: 720
wsf形式が関連付けされていない環境があるので、
サンプルは適当なバッチに埋め込んで使います。
<!-- : @setlocal&pushd %~dp0 @cscript //nologo "%~f0?.wsf" %* || pause @popd&endlocal&exit /b --> <job> <script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.5.14/es5-shim.min.js" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.5.14/es5-sham.min.js" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/js-yaml/3.13.1/js-yaml.js" /> <object id="shell" progid="WScript.Shell" /> <object id="fso" progid="Scripting.FileSystemObject" /> <script language="JScript"> WSH.Quit(function() { try{ // 読み込み var yamlFile = fso.OpenTextFile("sample.yaml", 1, true); var yamlText = yamlFile.ReadAll(); yamlFile.Close(); var doc = jsyaml.load(yamlText); // 表示 WSH.Echo(doc.config.title); WSH.Echo(doc.config.width); WSH.Echo(doc.config.height); // Enter入力待ち WSH.StdIn.ReadLine(); } catch(e){ WSH.Echo(e.name + ":" + e.message); return -1; } return 0; }()); </script> </job>
VBScript 版
<script language="VBScript"> ' 読み込み Set yamlFile = fso.OpenTextFile("sample.yaml", 1, True) yamlText = yamlFile.ReadAll yamlFile.Close Set doc = jsyaml.load(yamlText) ' 表示 WSH.Echo(doc.config.title) WSH.Echo(doc.config.width) WSH.Echo(doc.config.height) ' Enter入力待ち WSH.StdIn.ReadLine ' 解放 Set yamlFile = Nothing Set doc = Nothing </script>
仕組み
js-yaml
では、ES5に対応した環境が求められますが、
wsf 形式は、ES3程度の機能しか使えないのでes5-shim
ライブラリを使って
擬似的にES5環境を扱えるようにします。
読み込んだ後は、jsyaml
オブジェクトを扱うだけです。
その他
オフライン環境で使いたい場合など、
ライブラリの参照にCDNを使いたくなければ、ローカルに保存して使いましょう。
<script src="./es5-shim.min.js" /> <script src="./es5-sham.min.js" /> <script src="./js-yaml.js" />
以上、おわり。