Rubyでファイルの一覧を数値順にソートする

irb(main):009:0> paths = Dir::glob("C:/path/*.yml")
=> ["C:/path/1.yml", "C:/path/10.yml", "C:/path/11.yml", "C:/path/12.yml", "C:/path/13.yml", "C:/path/14.yml", "C:/path/15.yml", "C:/path/16.yml", "C:/path/17.yml", "C:/path/18.yml", "C:/path/19.yml", "C:/path/2.yml", "C:/path/20.yml"]
irb(main):015:0> paths.sort {|a,b| File.basename(a).to_i <=> File.basename(b).to_i}
=> ["C:/path/1.yml", "C:/path/2.yml", "C:/path/3.yml", "C:/path/4.yml", "C:/path/5.yml", "C:/path/6.yml", "C:/path/7.yml", "C:/path/8.yml", "C:/path/9.yml", "C:/path/10.yml", "C:/path/11.yml", "C:/path/12.yml", "C:/path/13.yml", "C:/path/14.yml", "C:/path/15.yml", "C:/path/16.yml", "C:/path/17.yml", "C:/path/18.yml", "C:/path/19.yml", "C:/path/20.yml"]

File.basename

File.basename("/home/gumby/work/ruby.rb")          #=> "ruby.rb"
File.basename("/home/gumby/work/ruby.rb", ".rb")   #=> "ruby"

RubyのYAML出力でkeyがシンボルになってしまうのを回避

CSV(TSV)をインポートしてYAMLに変換しようとした。

require 'csv'
require 'yaml'

tsv = CSV.table("import.tsv", { :col_sep => "\t" })

tsv.each do |line|
  id = line[:id]
  open("result/#{id}.yml", "w") do |f|
    f.write(YAML.dump(line.to_hash))
  end
end

すると、下記のように先頭にコロンがついてしまう。
これはRuby向けのYAML方言っぽいし、手で書くときにはそうしたくない。

続きを読む

Node.js(io.js) & npmをアンインストールしてHomebrewとnvmで管理する

f:id:syonx:20150510202434p:plain

パッケージ版からインストールした Node.js / io.js / npm をいったんアンインストールして、Homebrew による管理に移行しようとしたらつまづいたので nvm を導入した話です。

続きを読む