LoginSignup
1
1

More than 5 years have passed since last update.

ディレクトリ配下のファイルの、1行あたりの文字数を求めるワンライナースクリプト

Posted at

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1