アポストロフィで始まるコメント行とそうでないコマンド行の両方を持つAutodesk Revitジャーナルファイルを解析しようとしています。コメント行は、 'E'または 'H'または 'C'で始まり、タイムスタンプを指定することもできます。だから私は私のロジックがあろうと考え出し:スイッチで開始
If Comment
Switch TimeStampType
Else
Command
私はthisを見つけ、switch ($someString.ToLower())
作品ならば、私は考え出し、TOLOWERとSTARTSWITHは全く異なる概念であるとして、その後switch ($line.StartsWith())
はあまりにも(私が知っている、それは、到達のビットだでしょう)。
ただし、これは投げている "StartsWith"と引数の数が "0"のオーバーロードが見つかりません。 とif ($line.StartsWith("'"))
。しかし、それは誤った指示です。スイッチ全体をREMしてもエラーは発生しないので、スイッチにエラーがなければならないからです。
if ($line.StartsWith("'")) {
switch ($line.StartsWith()) {
"'E " {
# handle Timestamp
}
"'H " {
# handle Timestamp
}
"'C " {
# handle Timestamp
}
Default {}
}
} else {
if ($line -like "*$command*") {
Write-Host "$line"
}
}
リンクで提案されているように、私も、同じ結果で、 `でアポストロフィをエスケープするだけでなく、このようにスイッチを使用して試してみました。
{$_ -eq "'E "} {
# handle Timestamp
}
再び、同じ結果である。だから、最終的に私は動作しますが、またおそらく洗練思わ
if ($line.StartsWith("'")) {
switch ($line) {
$_.StartsWith("'E ") {
# handle Timestamp
}
$_.StartsWith("'H ") {
# handle Timestamp
}
$_.StartsWith("'C ") {
# handle Timestamp
}
Default {}
}
} else {
if ($line -like "*$command*") {
Write-Host "$line"
}
}
になってしまいました。だから、私は1つまたは最高の答えを見つけたか、ここで私が行方不明になっているより良いアプローチがありますか?代わりにString.StartsWith()
を使用しての
投票++。 Gordon - > More info here:http://powershellprimer.com/html/0008.html –
Regexオプションが最もエレガントだと思います。通常、私は非正規表現のアプローチを見つけようとし、それ以外の(より良い)方法がない場合にのみRegexを使用します。この場合、正規表現が最善であるようです。 – Gordon
これが当てはまる場合は、この場合はワイルドカードを使用します –