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- ビルド番号が表示されることを確認します
- 例
 1Build 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)を画面を通さず編集する際は、異常値のチェックがかかりません。編集する際は異常値にご注意ください。