アカウント名:
パスワード:
PowerShell (with C#) でINIファイルの読み書き [qiita.com]
しかし、Powershell連想配列のどの辺りで苦戦したの?
# コメントと空行を除外する if($line -match "^$|^\s*"){ continue }
ちょっとヘンですね。まず、コメントの内容と違い、空行は削除されますが、コメントは削除されません。通常、iniファイルのコメントは、「;」から行末までです。
また、何かの書き間違いかと思いますが、これだと、すべての行が無視されてしまいますね。正規表現で「^\s*」は、どんな行にもマッチしてしまいますので。普通に書けば、
# コメントを削除する $line = $line -replace '\s*;.*$','' # 空行および空白のみの行を無視 if($line -match '^\s*$'){ continue }
あたりですかね。
# 連想配列に代入(ここでエラー) $SettingInfo.Add( $param[0], $param[1] )
$SettingInfo = @{}みたいに初期化していないから?連想配列を初期化せずに使える言語の方が少数派の様な気がします。
それはともかく、何故普通に
$SettingInfo[$param[0]] = $param[1]
と書かないのか疑問。
あと、セクションやクオーテーションはサポートしないとしても、「=」が含まれない行でエラーを出さなくていいのか、とか、「=」前後や、行末の空白を無視しなくいいのか、とか、いろいろ気にはなります。
とりあえず、連想配列の方はscriptスコープで配列宣言して代入したら、問題なく動きました。
ああ、そういうことか。なら、関数の出力として連想配列を返せばいいんじゃない?あるいは、連想配列を引数に取って、それに格納するとか。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」
たいていググった方が早い (スコア:1)
PowerShell (with C#) でINIファイルの読み書き [qiita.com]
しかし、Powershell連想配列のどの辺りで苦戦したの?
Re:たいていググった方が早い (スコア:1)
宣言した配列に挿入するとエラーになるため、各設定項目は1変数1項目にして切り抜けました。。。
function read_ini($filename)
{
$lines = get-content $filename
foreach($line in $lines){
# コメントと空行を除外する
if($line -match "^$|^\s*"){ continue }
# =を区切り文字として行を分割
$param = $line.split("=",2)
# 連想配列に代入(ここでエラー)
$SettingInfo.Add( $param[0], $param[1] )
}
}
ちなみに参考にしたのは以下のサイト。
http://capm-network.com/?tag=PowerShell%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF
# エラーメッセージは忘れてしまいました
Re:たいていググった方が早い (スコア:1)
ちょっとヘンですね。
まず、コメントの内容と違い、空行は削除されますが、コメントは削除されません。
通常、iniファイルのコメントは、「;」から行末までです。
また、何かの書き間違いかと思いますが、これだと、すべての行が無視されてしまいますね。
正規表現で「^\s*」は、どんな行にもマッチしてしまいますので。
普通に書けば、
あたりですかね。
$SettingInfo = @{}みたいに初期化していないから?
連想配列を初期化せずに使える言語の方が少数派の様な気がします。
それはともかく、何故普通に
と書かないのか疑問。
あと、
セクションやクオーテーションはサポートしないとしても、
「=」が含まれない行でエラーを出さなくていいのか、とか、
「=」前後や、行末の空白を無視しなくいいのか、とか、
いろいろ気にはなります。
Re:たいていググった方が早い (スコア:1)
指摘の通り、このままでは全行にマッチしてしまうので使い物になりません。
とりあえず、連想配列の方はscriptスコープで配列宣言して代入したら、問題なく動きました。
# 各キーワードについては、代入前にtrim掛けているのでご心配なく。
# match演算子使ったコメント削除は非常に参考になりました。
# どうもです。
Re:たいていググった方が早い (スコア:1)
とりあえず、連想配列の方はscriptスコープで配列宣言して代入したら、問題なく動きました。
ああ、そういうことか。
なら、関数の出力として連想配列を返せばいいんじゃない?
あるいは、連想配列を引数に取って、それに格納するとか。
Re:たいていググった方が早い (スコア:1)