Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save udaken/7e27cd70b9e9f7ed638c14712361e8cf to your computer and use it in GitHub Desktop.
Save udaken/7e27cd70b9e9f7ed638c14712361e8cf to your computer and use it in GitHub Desktop.
tips PowerShell

「1行あたりの文字数が80文字より多いソースコードの行を見つける」ということを実現するためのスクリプトです。

スクリプト

Get-ChildItem -Filter "*.cpp" -Recurse | ForEach-Object { $filename = $_.Name; Get-Content $_.FullName | ForEach-Object { $i = 0 } { $i++; [PSCustomObject] @{ filename = $filename; location = $i; length = $_.Length} } } | Where-Object { $_.length -gt 80 } | Sort-Object -Property length

簡単な解説

ディレクトリ配下のファイルをワイルドカードで列挙し、

Get-ChildItem -Filter "*.cpp" -Recurse | 

各ファイルの各行の文字数をオブジェクトにします。

ForEach-Object { $filename = $_.Name; Get-Content $_.FullName | ForEach-Object { $i = 0 } { $i++; [PSCustomObject] @{ filename = $filename; location = $i; length = $_.Length} } } | 

さらに、フィルタで80文字より多い行に絞ります。

Where-Object { $_.length -gt 80 }

必要に応じてソートします。

| Sort-Object -Property length

留意事項

  • 文字列として数えているので、タブ文字は1文字です。
  • ファイルのエンコーディングの扱いは手を抜いてます。決まっているのであれば Get-Contentの引数に-Encodingをつければいいでしょう。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment