2017-05-11 3 views
4

그래서 PowerShell을 사용하여 파일 맨 위에 C# "using"문을 정렬하려고합니다. 지정된 입력 파일 File.cs를 들어, 사용하는 문은 다음과 같이 : PowerShell 정렬 순서가 잘못되었습니다.

using System.Reflection; 
using System.Configuration; 
using System.Runtime.Caching; 
using System.Linq; 
using System; 

나는 출력이 "사용"처음으로 "시스템을 사용하여"이 기대하지만, 실제로 정렬 - 개체 하단에 정렬합니다. 목록의 맨 위로 정렬하려면 어떻게 변경합니까?

function Update-UsingStatements 
{ 
    param (
    [Parameter(Mandatory=$true)][string]$FilePath 
) 

    $fileLines = Get-Content $FilePath 
    $contents = $fileLines | Out-String 

    $list = New-Object 'System.Collections.Generic.List[string]' 
    $contents | Select-String -pattern 'using\s[\w\.]+;' -AllMatches | ForEach-Object {$_.Matches} | ForEach-Object { $list.Add($_.Value) } 
    $list = $list | Sort-Object 

    for ($i = 0; $i -lt $list.Count; $i++) 
    { 
    $fileLines[$i] = $list[$i] 
    } 

    $fileLines | Out-File $FilePath -Encoding utf8 
} 

답변

5

당신은 문자열이 후행 ;을 포함하기 때문에 그 정렬 순서를 받고, 그리고 문자 테이블 ; (ASCII 문자 59)에 . (ASCII 문자 46) 다음에 오는 것입니다. 따라서 정렬 순서는 예상 한 바가 아니더라도 절대적으로 정확합니다.

주요 수정으로 안스 Wiechers '정렬 조정을 사용
$list = $list | Sort-Object { $_ -replace ';' } 
+0

저는 100k 연례 업적에 대해 아주 늦었지만 gratz입니다. 겸손한 나를 존경 해주세요. 당신의 수정처럼 맑은 답변을 얻을 자격이 있습니다. – sodawillow

+3

나는 같은 생각을 가지고 있었지만'-replace' 대신에'$ _. TrimEnd (';')'를 사용하려고했습니다. 별도의 답변으로 게시 할 낭비로 보였으므로 옵션을 추가하기 위해 귀하의 의견을 추가하고 있습니다. 답변 Ansgar, 강한 직장에 주목! – TheMadTechnician

+0

@sodawillow 감사합니다. –

3

, 당신은 너희 올드 worlde 계수 뒤틀림을 많이 제거 할 수 있습니다

는 일종의 그것을 해결하기 위해하는 호텔로부터 후행 세미콜론을 제거 나머지 코드에서는 다음과 같습니다.

function Update-UsingStatements 
{ 
    param (
    [Parameter(Mandatory=$true)][string]$FilePath 
) 

    # Separate the 'using' statements from everything else 
    $using, $rest = (Get-Content -Path $FilePath).where({$_ -match '^using '}, 'split') 

    # sort the 'using' statements, with a tweak to bring 'using system;' to the top 
    $using = $using | Sort-Object -Property { $_ -replace ';' } 

    # output sorted 'using' statements and rest of file, over the original file 
    $using, $rest | Set-Content -Path $FilePath -Encoding UTF8 

} 
+0

저는 PowerShell 스크립트를 작성하려고하는 C# 프로그래머입니다. 개선에 감사드립니다. 훨씬 더 우아한! +1 "ye olde worlde counting contortions" – Andy

관련 문제