Translate

BTemplates.com

Powered by Blogger.

2021年3月11日木曜日

2021-03-11 到達点メモ


ブログ記事を書くのがあまりにも久しぶりすぎる・・・。

普通に操作しているとフォルダの中の合計がわかりにくいので、フォルダのそれぞれのサイズ一覧を一括でわかるようにしたかった。

ひとまずRubyで実装はできたのだが、この記事を書く際にふと気になって調べてたら、(見にくいが)PowerShellでも普通にできます・・・。

Get-Childitem -Path ./ -Directory | ForEach-Object -Process{Write-Host $_; Get-Childitem -Path $_ -Recurse | Measure-Object -property length -sum | Format-List sum}

参考サイト:[備忘録]Windoes10:フォルダ毎の容量を調べる方法 | CEOブログ 


まぁ、見やすさ重視だったので一応無駄ではない
最近、全然コードを書いていなかったから、書いておきたかったし・・・。


■ 躓いたところ

・コマンドライン引数でWindowsのフォルダパスを渡したら、何も取得できなかった。

-理由
今回はDir.glob使用しており、Dir.globにパスを渡すさいは、"C:/php/dev"といったふうに、"/"でないといけない。しかし、Windowsのパスは"\"のため、そのまま使うとだめだった。

-対処方法
 File.expand_path()を使うか、.gsub(/\\/,"/") で変換するかで対応できる


・コマンドライン引数でテスト時のフォルダパスだとできたのに他のフォルダパスだとできなかった問題

-理由
フォルダ名に半角スペースが入っており、データの取得がARGV[0]で行ったため、半角スペース以降の文字列が別の配列のデータに格納されてしまったため。

-対処方法
コマンドライン引数で渡す際に、””で囲むようにした。結合とかも一瞬考えたが、オプションを半角スペースで区切って渡すのが、本来の仕様だと思うので、それに従ったほうが良いと思ったため。


・フォルダ名:サイズKBの形式にし、文字数に応じて半角スペースで埋めて揃えようとしたところ、日本語が入るとばらばらになってしまった。

-理由
半角文字と全角文字を考慮していなかった。むしろ、最初は日本語をどう見つけるか、もしくは省くかを考えてしまい、半角文字と全角文字という区分に気がつくまでに時間がかかった。

-対処方法
考え方としては半角文字を1とし、全角文字は2とした。
Rubyの仕様だと、半角全角関わらず単純に文字数を数え上げてしまうようなので、半角英数字記号以外を数えて、それを足すことで解決した。
半角カタカナには対応していないが、使われるケースは稀と考えたので今回は考慮しなかった。


・Googleで正規表現 半角英数字記号で調べたら、/^[a-zA-Z0-9!-/:-@¥[-`{-~]*$/とでてきたので、/の中身をそのまま使った。後で気がついたら、なんでこれで全角文字が判別できているんだ?

-理由
Rubyでは^は否定表現である。
参考サイト:正規表現 (Ruby 3.0.0 リファレンスマニュアル) 

-対処方法
今回はふと疑問に思ってテストコードを書いたら発見できた。というか、そもそもちゃんと公式ドキュメントを読もう。


■実装する際に参考にしたサイト

Rubyでコマンドライン引数を取得する方法:ARGV | UX MILK
Rubyでディレクトリを一覧表示する方法を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン
Rubyでディレクトリの中のファイル一覧を取得 – かひわし4v1.memo

 

GitHubに上げるまでやりたかったが、力尽きたので今日はここまで。

1 件のコメント:

  1. Super Slots’ design is unique and not too cluttered to decelerate load times and operation. We would like to see extra filtering choices to make it easier to single out 3-reels, or jackpots, or anything else you need to play. The platform is simple to navigate, hundreds quick, and we love the mentioned mascot. The 아벤카지노 platform hosts instant-play games, which means you'll be able to|you possibly can} access every title straight out of your browser without having to download any software program.

    返信削除