source

PowerShell 및 StringBuilder

nicesource 2023. 10. 16. 21:53
반응형

PowerShell 및 StringBuilder

저는 파워쉘에 처음이지만 익숙합니다.NET 클래스.

사용중입니다System.Text.StringBuilderPowerShell 스크립트에 포함됩니다.대본은.

Function MyStringFunc([String]$line) {
    $r = New-Object -TypeName "System.Collections.Generic.List``1[[System.String]]";
    $sb = New-Object -TypeName "System.Text.StringBuilder";

    foreach ($c in $line) {
        $sb.Append($c);
        $r.Add($sb.ToString());
    }

    return $r;
}

$line1 = "123";
$a = MyStringFunc $line1;
$a

결과는.

1
12
123

그러나 결과는

                  Capacity                MaxCapacity                    Length
                  --------                -----------                    ------
                        16                 2147483647                         3
123

제가 뭐 잘못한 것 있나요?

Add IIRC와 같은 StringBuilder의 여러 메서드는 StringBuilder를 반환하므로 더 많은 StringBuilder 메서드를 호출할 수 있습니다.그러나 PowerShell의 작동 방식은 모든 결과(의 경우 반환 값)를 출력하는 것입니다.NET 메서드 호출).이 경우 결과를 다음과 같이 표시합니다.[void]반환 값을 무시하는 방법(예:

[void]$sb.Append($c)

줄을 끝낼 필요가 없습니다.;PowerShell에 있습니다.그러나 여러 명령어를 같은 줄에 놓으면;' 그 명령들을 분리할 수 있습니다.

PowerShell에 새로 들어왔다고 하니까요.제 대답은 PowerShell을 작성하는 방법에 대한 것입니다.

PowerShell은 스크립트 언어로, 관리자와 같은 비개발 프로그래머가 사용합니다.당신은 당신의 지식을 모두 갖춘 C# 개발자이지만, 당신이 쓰고 싶은 것을 좀 더 간단하게 작성할 수 있습니다.PowerShell에서는 Lists and Hastables를 사용하는 구문이 존재합니다. 다음을 시도해 보십시오.

$a = @()
$a += "Bonjour"
$a += "Salut"
$a
$a | get-member
Get-Member -InputObject $a

$rwc = @{}
$rwc += @{1="Blues"}
$rwc += @{2="Blacks"}
$rwc
$rwc | get-member
Get-Member -InputObject $rwc

여기 같은 일을 하는 세 가지 기능이 있습니다. 저는 스트링빌더가 기억력에서 좀 더 효율적이라는 것을 알지만, 이 경우 누가 신경 쓰나요.

Function MyStringFunc([String]$line)
{ 
  $r = New-Object -TypeName "System.Collections.Generic.List``1[[System.String]]"; 
  $sb = New-Object -TypeName "System.Text.StringBuilder"; 

  foreach ($c in [Char[]]$line)
  { 
    $a = $sb.Append($c); 
    $r.Add($sb.ToString()); 
  }  
  return $r; 
} 

# A more simple way
Function MoreReadableStringFunction([String]$line)
{
  $r = @() # an untyped list

  foreach ($c in [Char[]]$line)
  { 
    $a += $c; 
    $r += $a;
  } 
  return $r;
}

# More simple but not so readable
Function MoreSimpleStringFunction([String]$line)
{
  $r = @() # an untyped list

  [Char[]]$line | % {$a += $_; $r += $a} 
  return $r;
}


Clear-Host
$line1 = "123";

$t1 = MyStringFunc $line1; 
$t1

$t2 = MoreReadableStringFunction $line1
$t2

$t3 = MoreSimpleStringFunction $line1
$t3
  1. foreach문자열의 문자를 반복하지 않고 단일 항목으로 처리합니다.그래서 저희가 저희에게 줄을.[char[]](또는 사용)$line.GetEnumerator()).

  2. 표정이$sb.Append($c)Builder 인스턴스를 가져옵니다.PowerShell에서는 출력에 기록됩니다.원치 않는 한 이 출력을 억제해야 합니다($null = ...아니면... > $null아니면... | Out-Null).

예상 출력은 다음 코드에 의해 생성됩니다.

Function MyStringFunc([String]$line) {
    $r = New-Object -TypeName "System.Collections.Generic.List``1[[System.String]]";
    $sb = New-Object -TypeName "System.Text.StringBuilder";

    foreach ($c in [char[]]$line) {
        $null = $sb.Append($c);
        $r.Add($sb.ToString());
    }

    return $r;
}

$line1 = "123";
$a = MyStringFunc $line1;
$a

언급URL : https://stackoverflow.com/questions/7801651/powershell-and-stringbuilder

반응형