programing

Powershell에서 문자열을 int로 변환하는 관용적인 방법은 무엇입니까?

jooyons 2023. 8. 28. 21:01
반응형

Powershell에서 문자열을 int로 변환하는 관용적인 방법은 무엇입니까?

제가 찾은 유일한 방법은 직접 캐스팅입니다.

> $numberAsString = "10"
> [int]$numberAsString
10

이것이 파워셸의 표준 접근법입니까?변환이 성공적인지 확인하기 위해 이전에 테스트를 수행할 것으로 예상됩니까? 그렇다면 어떻게 해야 합니까?

-as 연산자를 사용할 수 있습니다.캐스팅이 성공하면 다음과 같은 번호를 얻을 수 있습니다.

$numberAsString -as [int]

.net 사용

[int]$b = $null #used after as refence
$b
0
[int32]::TryParse($a , [ref]$b ) # test if is possible to cast and put parsed value in reference variable
True
$b
10
$b.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType

참고: (파워셸 강제 기능)

$a = "10"
$a + 1 #second value is evaluated as [string]
101 

11 + $a # second value is evaluated as [int]
21

[int]에 캐스팅 여부에 대한 빠른 참/거짓 테스트

[bool]($var -as [int] -is [int])

나를 위해.$numberAsString -as [int]@Shay Levy가 가장 좋은 방법입니다, 저는 또한 사용합니다.[type]::Parse(...)또는[type]::TryParse(...)

그러나 필요한 것에 따라 산술 연산자의 오른쪽에 숫자를 포함하는 문자열을 배치하고 왼쪽에 int를 배치하면 결과는 Int32가 됩니다.

PS > $b = "10"
PS > $a = 0 + $b
PS > $a.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType

문제가 발생한 경우 예외(시도/ 구문 분석)를 사용하여 동작할 수 있습니다.

저는 아마 그런 일을 할 것입니다.

[int]::Parse("35")

하지만 저는 파워셸 사람이 아닙니다.시스템의 정적 구문 분석 방법을 사용합니다.Int32. 문자열을 구문 분석할 수 없는 경우 예외를 던져야 합니다.

$source = "number35"

$number=$null

$result = foreach ($_ in $source.ToCharArray()){$digit="0123456789".IndexOf($\_,0);if($digit -ne -1){$number +=$\_}}[int32]$number

숫자를 입력하기만 하면 다음으로 변환됩니다.Int32

Shavy Levy를 기반으로 한 답변:

[bool]($var -as [int])

$null은 false(bool)로 평가되기 때문에 이 문장은 캐스팅의 성공 여부에 따라 true 또는 false를 제공합니다.

언급URL : https://stackoverflow.com/questions/9700627/in-powershell-what-is-the-idiomatic-way-of-converting-a-string-to-an-int

반응형