programing

PowerShell: 문자열을 N자로 제한하는 방법은 무엇입니까?

jooyons 2023. 8. 13. 09:41
반응형

PowerShell: 문자열을 N자로 제한하는 방법은 무엇입니까?

10자 이상의 문자열을 10자로 제한하려고 하면 substring이 불만을 제기합니다.길이를 테스트할 수 있다는 것은 알지만 필요한 작업을 수행할 단일 cmdlet이 있는지 알고 싶습니다.

PS C:\> "12345".substring(0,5)
12345

PS C:\> "12345".substring(0,10)
Exception calling "Substring" with "2" argument(s): "Index and length must refer to a location within the string.
Parameter name: length"
At line:1 char:18
+ "12345".substring( <<<< 0,10)

cmdlet이 정확히 필요합니까?저는 당신이 왜 길이가 긴 것을 싫어하는지 궁금합니다.스크립트의 일부라면 괜찮아 보입니다.

$s = "12345"
$s.substring(0, [System.Math]::Min(10, $s.Length))

하위 문자열 함수를 사용하면 제한이 있으므로 먼저 문자열의 길이를 캡처해야 합니다.이것이 효과가 있다면 당신은 그 제한 없이 그것을 할 수 있습니다.

다음은 문자열의 처음 5자를 반환합니다.

"1234567890"[0..4] -join ""     # returns the string '12345'

원하는 길이보다 짧은 문자열에서도 작동합니다.

"1234567890"[0..1000] -join ""  # returns the string '1234567890'

다른 라이브러리를 로드하고 사용할 수 있으며 문자열 기능을 사용할 수 있습니다. 예를 들어 시각적 기본 문자열 기능은 원하는 작업에 적합합니다.


세션당 한 번 호출>[void][reflection.assembly]::LoadWithPartialName("microsoft.visualbasic")

그런 다음 다양한 vb 문자열 함수를 사용합니다.

>[microsoft.visualbasic.strings]::left("12345",10)
12345

또는

>[microsoft.visualbasic.strings]::mid("12345",1,10)
12345

이전 답변은 제 목적에 맞지 않았습니다(위반하지 마십시오!). 그래서 저는 위의 Unmales 제안을 받아 공유할 것으로 생각하는 기능으로 롤업했습니다.

function Trim-Length {
param (
    [parameter(Mandatory=$True,ValueFromPipeline=$True)] [string] $Str
  , [parameter(Mandatory=$True,Position=1)] [int] $Length
)
    $Str[0..($Length-1)] -join ""
}

사용 예:

"1234567" | Trim-Length 4    # returns: "1234"
"1234" | Trim-Length 99      # returns: "1234"

Dmitry의 답변 덕분에 함수로 만들어서 0 based가 아닌 1 based로 만들었습니다.

function acme-substr ([string]$str, $start, $end) {
   $str.substring($start-1, [System.Math]::Min($str.Length-1, $end))
}

> $foo="0"*20
> $foo
00000000000000000000
> acme-substr $foo 1 5
00000

패딩부터.

$s = "12345"
$s.PadRight(10).Substring(0,10).TrimEnd() # returns "12345" 

언급URL : https://stackoverflow.com/questions/2336435/powershell-how-to-limit-string-to-n-characters

반응형