Я пытаюсь разобрать некоторые файлы журнала Autodesk Revit, которые имеют как строки комментариев, начинающиеся с апострофа, так и строки команд, которые этого не делают. Строки комментариев могут начинаться с «E» или «H» или «C», чтобы обозначить отметку времени, с которой мне нужно работать. Так я понял, что моя логика была бы:Запуск с помощью переключателя
If Comment
Switch TimeStampType
Else
Command
Я нашел this, и я подумал, что если switch ($someString.ToLower())
работ, то switch ($line.StartsWith())
бы тоже (я знаю, что это немного досягаемости, так как ToLower и 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"
}
}
Это работает, но также кажется, возможно, неэлегантным. Итак, нашел ли я один или лучший ответ, или есть ли здесь лучший подход, который мне не хватает?
Vote ++. Gordon -> Дополнительная информация здесь: http://powershellprimer.com/html/0008.html –
Я думаю, что опция Regex является самой элегантной. Обычно я пытаюсь найти подход без регулярных выражений и использую только Regex, когда нет другого (лучшего) способа сделать это. В этом случае кажется, что regex лучше. – Gordon
Если это так, я бы пошел по шаблону в этом случае –