ソースコード
mp3tagID3V1read.rb
#!/usr/bin/ruby
if ARGV.size() == 0 then
print "need an argument."
else
if File.exist?(ARGV[0]) then
stat = File.stat(ARGV[0])
a = File.binread(ARGV[0], 128, stat.size-128)
if (a[0..2]=="TAG") then
title = a[ 3..32].force_encoding("Shift_JIS").rstrip
artist = a[33..62].force_encoding("Shift_JIS").rstrip
album = a[63..92].force_encoding("Shift_JIS").rstrip
yearStr = a[93..96].rstrip
trackMark = a[125]
genreNo = a[127]
if trackMark == "\0" then
# track info exists
comment = a[97..124].force_encoding("Shift_JIS").rstrip
trackNo = (a[126].bytes)[0].to_s
else
comment = a[97..126].force_encoding("Shift_JIS").rstrip
trackNo = ""
end
print "track : <" + trackNo + ">\n"
print "album : <" + album + ">\n"
print "artist: <" + artist + ">\n"
print "title : <" + title + ">\n"
print "year : <" + yearStr + ">\n"
print "comment: <" + comment +">\n"
end
end
end
※拡張子チェックとファイルサイズチェック入れ忘れた・・
所感
久々にRuby書いてみた。
binread
で得られるデータの型が、配列ではなく、ASCII-8BIT
エンコーディングのstring
っていうややこしさよ。
ただ、添え字の書きやすさ・見やすさがイイ。これに慣れるとSubstring
とかで切り出すのダルくなりそう。
環境
OS : Windows 10
Ruby 2.6.5 (C:\Ruby26-x64\bin\ruby.exe)