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に上げるまでやりたかったが、力尽きたので今日はここまで。

2019-11-11、12-03 到達点メモ


EslintとPreitterを使っているのだが、mdファイルが整形されるのは地味に困るので
mdファイルは整形されないようにしたかった。

◆手順
1. プロジェクト直下に.prettierignoreと.eslintignoreを作成する。
2. それぞれに、*.mdと記述する
おわり。

◆参考サイト
.eslintignore の配置場所は気をつけた方がいい - Qiita
Prettierの対象から一部ファイルを除外する- Qiita
eslintで任意のディレクトリ、ファイルをチェック対象から除外する方法- Qiita


最近AtCoderの問題を解いているのだが
たまにRubyのメソッドを使えば、簡単に解けるしまうケースが有る。
なお、今回取り組んだのは、C - Slimes という問題である。

具体的には、以下のようなメソッドである
「squeezeメソッドは、文字列中で同じ文字が連続している部分を1つの文字にまとめ、新しい文字列を返します。」
squeeze, squeeze! (String) - Rubyリファレンスより一部抜粋

これがあれば、わざわざ文字列一個一個を見る必要はなく、しかも早く結果が出る。
実装の問題もあるのだろうが、
自分の実装だと実行時間が771msに対し、ライブラリだと7msである。
一応、自分の実装は配列(1545ms)から文字列に内容を変えた上での結果である
恐らく、一つ一つ見るやり方だと非効率なのだと思われる。


途中まで記事を書いていたが、もう内容は覚えていない・・・。
お蔵入りにするのもあれなので、そのまま上げる