我正在嘗試解析一些Autodesk Revit日誌文件,它們的註釋行都以撇號開頭,命令行沒有。註釋行可以進一步以'E或'H或'C開始,以表示我需要使用的時間戳。所以我想,我的邏輯是:StartsWith在開關中
If Comment
Switch TimeStampType
Else
Command
我發現this,並且我想如果switch ($someString.ToLower())
作品,然後switch ($line.StartsWith())
將太(我知道,這是一個有點遙不可及,如ToLower將和StartsWith是完全不同的概念)。
但是,這是投擲 找不到「StartsWith」的重載和參數計數:「0」。 at if ($line.StartsWith("'"))
。但是這有點誤導,因爲如果我將整個交換機重新啓動,它不會引發任何錯誤,所以錯誤必須存在於交換機中。
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"
}
}
這樣的作品,但也似乎也許不雅。那麼,我是否找到了一個或最好的答案,還是在這裏有一個更好的方法,我錯過了?
Vote ++。戈登 - >更多信息在這裏:http://powershellprimer.com/html/0008.html –
我認爲,正則表達式選項是最優雅的。通常我會嘗試找到一種非正則表達式的方法,並且只有在沒有其他(更好)方法時才使用正則表達式。在這種情況下,似乎正則表達式是最好的。 – Gordon
如果是這種情況,我會在這種情況下選擇通配符 –