「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
をつければいいでしょう。