아포스트로피로 시작하는 주석 행과 시작하지 않는 명령 행을 모두 포함하는 일부 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"
}
}
으로 돌아가 셨습니다. 그래서, 하나 또는 최상의 답을 찾았나요, 아니면 내가 누락 된 더 나은 접근법이 있습니까?
투표 ++. 고든 -> 더 자세한 정보 : http://powershellprimer.com/html/0008.html –
Regex 옵션이 가장 우아하다고 생각합니다. 보통 정규 표현식이 아닌 접근법을 찾으려고 노력하며, 정규 표현식을 사용하는 다른 (더 좋은) 방법이 없을 때만 Regex를 사용합니다. 이 경우에는 정규 표현식이 가장 좋은 것처럼 보입니다. – Gordon
이 경우에 와일드 카드를 하나 사야 겠지요. –