FAQ/ 破堤箇所CSVのインポート
破堤箇所の情報を記したCSVファイルがあります。これをプロジェクトに取り込む方法はありますか。
回答
以下のPowerShellスクリプトを試してください。
このスクリプトをテキストエディタに貼り付け "Import-Bp.ps1" として保存します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 | # プロジェクトを指定します。
# 破堤点を追加したい河川が、このプロジェクトの中に存在しないとエラーになります。
# この場合は "test_new.fsxproj" が出力されます。
$proj = "test.fsxproj"
# 破堤点csvファイルを指定します。
# エンコーディングはutf8とします。
$csvFile = "bp.csv"
$ErrorActionPreference = "Stop"
[xml]$xml = cat $proj
$csv = Import-Csv -Encoding utf8 $csvFile
foreach ($bp in $csv) {
$river = $xml.SelectSingleNode("floodSim/conditions/diffusionalRivers/diffusionalRiver [@name='$($bp.'河川')']")
if ($null -eq $river) {
throw [System.IO.InvalidDataException]::new(("river {0} not found." -f $bp."河川"))
}
$attributes = @{
name = $bp."Name"
distance = $bp."追加距離(m)"
length = "2 0 {0} 3600 {1}" -f (([double] $bp."破堤幅") * 0.5), $bp."破堤幅"
isConfluenceZone = $bp."合流点付近" -eq "TRUE" ? "True": "False"
wlev = $bp."破堤開始水位(TPm)"
leveeGlev = "1 0 {0}" -f $bp."破堤敷高(TPm)"
direction = $bp."左右岸" -eq "右岸" ? "True" : "False"
planeGlev = ""
notOneway = "True"
reverseBreach = "False"
dischargeCoefAlpha = "1"
dischargeCoefTheta = ""
valid = "True"
}
$xRiverBreaches = $river.SelectSingleNode("riverBreaches")
$xRiverBreach = $xRiverBreaches.SelectSingleNode("riverBreach [@name='$($bp.'Name')']")
if ($null -eq $xRiverBreach) {
# 新規作成
Write-Host ("append {0} {1}." -f $bp."河川", $bp.Name)
$riverBreach = $xml.CreateElement("riverBreach")
foreach ($key in $attributes.Keys) {
$riverBreach.SetAttribute($key, $attributes[$key])
}
[void] $xRiverBreaches.AppendChild($riverBreach)
}
else {
# データ更新
Write-Host ("update {0} {1}." -f $bp."河川", $bp.Name)
foreach ($key in $attributes.Keys) {
$xRiverBreach.SetAttribute($key, $attributes[$key])
}
}
}
$projFile = gi $proj
$newProj = Join-Path $projFile.Directory.FullName ($projFile.BaseName + "_new" + ".fsxproj")
$xml.Save($newProj)
|
破堤点のデータの例を示します。これをテキストエディタに貼り付け "bp.csv" として保存します。Excelでも編集できるように、エンコーディングは UTF8 with BOM とします。
| Name,河川,追加距離(m),左右岸,破堤開始水位(TPm),破堤敷高(TPm),破堤幅,合流点付近
BP001,XX川,2600,左岸,6.78,4.78,100,FALSE
BP002,XX川,2600,右岸,6.89,4.89,100,FALSE
BP003,XX川,2800,左岸,6.90,4.90,200,TRUE
|
PowerShell で実行します。
なお、このスクリプトは PowerShell 7 で動作します。 PowerShell 5 では動作しません。
PowerShell 7 については、FAQ/ PowerShell入門 を参照してください。
関連項目
FAQ/ PowerShell入門
最終更新日:
2023-12-14