FAQ/ DioVISTAバッチ処理入門¶
DioVISTA のバッチ処理について、初歩的な部分を教えていただけないでしょうか。
テクニカルリファレンス バッチ処理/ 概要 を拝見しても、うまくできませんでした。
初歩からやり方を教えていただけないでしょうか。
回答¶
チュートリアルを作成しました。
下記の手順を実施して、概要をつかんでいただけますでしょうか。
準備¶
- DioVISTAが動作するPCを用意してください。
-
演習用のプロジェクト project_Tsurumi.zip を入手します。
- 適当な場所に展開します
- ここでは、
C:\temp\
に展開したとします - プロジェクトを
C:\temp\
に展開した画面
-
演習用のプロジェクトをDioVISTAでシミュレーションできることを確認します。
- DioVISTA で プロジェクトファイル [鶴見.fsxproj] を開きます。
- シミュレーション開始ボタンを押します
- 下図の結果が表示されることを確認します
- DioVISTA で [鶴見.fsxproj] を実行した画面
-
PowerShell を実行するための準備をします。
- FAQ/ PowerShell入門 にあるように、PowerShell と Windows Terminal をインストールします。
- 以後、このチュートリアルでは Windows Terminal を
wt
と表記します。
変数の設定¶
-
wt
を立ち上げます。 -
DioVISTA の実行ファイルのパスを変数に格納します。
- ここでは、
C:\Program Files\Hitachi\DioVISTA Flood\bin
にインストールされているとします - 次の2行にわたる文字列を1行ずつコピーして
wt
に貼り付けます
1 2
$exe = "C:\Program Files\Hitachi\DioVISTA Flood\bin\dfsCalc64.exe" &$exe --version
- ビルド番号が表示されることを確認します
- 例
1
Build 2021-11-01 19:34:14 +0900 (0ea5431acb3bad3a7b4d5a35b9bc1f470b597f29)
- ここでは、
-
DioVISTA のデータ変換プログラムのパスを変数に格納します。
- 次の文字列をコピーして
wt
に貼り付けます。
1 2
$conv = "C:\Program Files\Hitachi\DioVISTA Flood\bin\dfsConv64.exe" dir $conv
ソースコードの解説
- 2行名:
dir
コマンドは、DOS のdir
コマンドやLinux のls
とほぼ同じです。これは Get-ChildItem の別名です。
- ファイル情報( dfsConv64.exeについて)が表示されることを確認します
-
例
1 2 3 4 5
Directory: C:\Program Files\Hitachi\DioVISTA Flood\bin Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2021/06/17 21:34 323160 dfsConv64.exe
- 次の文字列をコピーして
-
DioVISTAの設定ファイルのパスを変数に格納します。
- 次の文字列をコピーして
wt
に貼り付けます。
1 2 3
[xml]$xml = cat "$env:LOCALAPPDATA\hitachi\DioVISTA\DioVISTA.xml" $d = $xml.Configuration.settings.dataset dir $d
ソースコードの解説
- 1行名:
cat
コマンドは、DOS のtype
コマンドや Linux のcat
とほぼ同じです。これは Get-Content の別名です。 - 1行目:
$env:LOCALAPPDATA
は DOS の環境変数%LOCALAPPDATA%
と同じです。つまりここでは、ファイル%LOCALAPPDATA%\hitachi\DioVISTA\DioVISTA.xml
を読み込んでいます。参考: FAQ/ データセットファイルのパス - 2行目: xml要素
Configuration.settings.dataset
を変数$d
に格納しています。
- ファイル情報( dataset.iniについて)が表示されることを確認します。
-
例
1 2 3 4 5
Directory: D:\mapdata Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2019/11/07 17:30 408 dataset.ini
- 次の文字列をコピーして
基本コマンド¶
-
上述の 変数の設定 を実行しておいてください。
-
DioVISTAを実行します。
- 次の文字列をコピーして
wt
に貼り付けます
1 2
cd C:\temp &$exe -d $d -m 25 -o BP001 -O . -I 300 -t 36000 鶴見.fsxproj
ソースコードの解説
- 1行名:
cd
コマンドは、DOS のcd
コマンドとほぼ同じです。これは Set-Location の別名です。 - 2行名:
$exe
すなわちdfsCalc64.exe
のオプションについては、テクニカルリファレンス バッチ処理/ 計算の実行 をご参照ください。
- 計算が実行されます。
- 計算結果 BP001 をDioVISTA の画面で確認します。
- 次の文字列をコピーして
-
DioVISTA結果ファイルをMLIT形式に変換します。
- 次の文字列をコピーして
wt
に貼り付けます
1
&$conv csv -d 40 -s $d -G -o . BP001
ソースコードの解説
- 1行名:
$conv
すなわちdfsConv64.exe
のオプションについては、テクニカルリファレンス バッチ処理/ MLIT CSV形式への変換 をご参照ください。
- MLIT 形式のCSVファイルが
C:\temp\BP001
に出力されたことを確認します。
Note
C:\temp\
フォルダにMETADATA.CSV
およびKENSAKU\WL_STATION.CSV
がないことについて、次の警告が表示されますが、結果のCSVファイルは出力されます。1 2
.\METADATA.CSV: ファイルがオープンできません。 .\KENSAKU\WL_STATION.CSV: ファイルがオープンできません。
- 次の文字列をコピーして
応用コマンド¶
- 上述の 変数の設定 を実行しておいてください。
-
鶴見川の上流端流量を [tsurumi_q_ts.csv] に格納された時系列に変更します。
- 次の文字列をコピーして
wt
に貼り付けます。
1 2 3 4 5 6
$csv = cat tsurumi_q_ts.csv $inflow="{0} {1}" -f $csv.Length, (($csv -split "," ) -join " ") [xml]$xml = cat 鶴見.fsxproj $river = $xml.floodSim.conditions.diffusionalRivers.diffusionalRiver |where{$_.name -eq "鶴見川"} $river.inflow = $inflow $xml.Save("C:\temp\鶴見川2500.fsxproj")
コードの解説
- 1行目: [tsurumi_q_ts.csv] の内容を 変数
$csv
に格納します。 - 2行目:
$csv
の内容を、DioVISTA プロジェクトファイル(fsxproj)で使う書式に変換し変数$inflow
に格納します。-f
は Format演算子 です。 - 3行目: [鶴見.fsxproj] の内容を 変数
$xml
に格納します。 - 4行目: [鶴見.fsxproj] の中に xml要素
floodSim.conditions.diffusionalRivers.diffusionalRiver
は複数ありますが、そのうち 属性name
が "鶴見川" と等しい要素を抽出し、変数$river
に格納します。where
は Where-Object の別名です。 - 5行目: 鶴見川の上流端流量を示すxml要素
inflow
の内容を、2行目で作成した内容に置き換えます。 - 6行目: 編集した内容をファイル "C:\temp\鶴見川2500.fsxproj" として保存します。ここでは保存するファイルをフルパスで指定します。
- DioVISTAでプロジェクトファイル [鶴見川2500.fsxproj] を開きます。
- 鶴見川の上流端流量が、[tsurumi_q_ts.csv] に格納された時系列になっていることを確認します。
- 次の文字列をコピーして
-
鶴見川の破堤点情報を変更します。
- 次の文字列をコピーして
wt
に貼り付けます
1 2 3 4 5 6
[xml]$xml = cat 鶴見.fsxproj $river = $xml.floodSim.conditions.diffusionalRivers.diffusionalRiver |where{$_.name -eq "鶴見川"} $breach = $river.riverBreaches.riverBreach|where{$_.name -eq "鶴見川_破堤箇所1"} $breach.name = "BP002" $breach.distance = "5000" $xml.Save("C:\temp\BP002.fsxproj")
コードの解説
- 1行目: [鶴見.fsxproj] の内容を 変数
$xml
に格納します。 - 2行目: [鶴見.fsxproj] の中に xml要素
floodSim.conditions.diffusionalRivers.diffusionalRiver
は複数ありますが、そのうち 属性name
が "鶴見川" と等しい要素を抽出し、変数$river
に格納します。 - 3行目: 鶴見川 の子要素
riverBreaches.riverBreach
は複数ありますが、そのうち 属性name
が "鶴見川_破堤箇所1" と等しい要素を抽出し、変数$breach
に格納します。 - 4行目: "鶴見川_破堤箇所1"を示すxml要素
name
の内容を、"BP002"に置き換えます。 - 5行目: "鶴見川_破堤箇所1"を示すxml要素
distance
の内容を、"5000"に置き換えます。 - 6行目: 編集した内容をファイル "C:\temp\BP002.fsxproj" として保存します。
- DioVISTAでプロジェクトファイル [BP002.fsxproj] を開きます。
- 鶴見川の破堤点の名前が [BP002] 、距離が [5000] になっていることを確認します。
- 次の文字列をコピーして
最後に¶
-
一連のチュートリアルでは、プロジェクトファイルの実行、結果ファイルの変換、プロジェクトファイルの書き換え、スクリプトファイルの作製を体験しました。ユーザの必要に応じて、これらを改造したり組み合わせたりしてください。
-
DioVISTAでは画面を通じてユーザが入力する際に異常値のチェック(たとえば粗度に0を与えようとすると拒絶する)を行っています。こうしてプロジェクトファイル(fsxproj)を画面を通さず編集する際は、異常値のチェックがかかりません。編集する際は異常値にご注意ください。