本日のある授業で、学生さんに演習課題(電子ファイル)を研究室サーバにアップロードしてもらいました。単なるファイルアップローダーのためファイル名で提出した学生さんを識別します。
で、意地悪な私としては、「人のファイルをもらってそのままアップした人はいないかな。。。」とチェックしたくなりましたw
で、勉強ついでに最近ほとんど触ることのなかったrubyでチェックプログラムを書いてみました。人様に見せられるようなものではないですが、また使いそうなので自分メモのために置いておきます。もし、他の書き方があったら教えてください。
あ、そうそう。チェックした結果ですが、同一のファイルは1つもありませんでした。皆さん、その調子です。これから演習が少しずつ難しくなるので、この調子で人のを写して楽をせず自分でチャレンジしてくださいねー。
こんな小さなプログラムでもどうやって書こうかな。。。と考えるだけでrubyは楽しい。これをjavaで書くとなると。。。しんどそう。
基本的な構文を良書で勉強したら、あとは逆引き本を見ながらあれこれと小さいプログラムを書いてみるのが私の勉強スタイルです。
fileutilsはRubyレシピブック268の技で知りました。私の勉強スタイルにピッタリな本です。
require "fileutils"a = []
Dir.glob("*.mpp") { |e| a << e }a.each { |e1|
a.each { |e2|
if e1 != e2 then
# if File.size(e1) != File.size(e2) then
if FileUtils.cmp(e1, e2) == true then
p e1+" , "+e2 + "**** same!!"
end
# end
end
}
}
<補足>
細かいですが、チェック対象のファイルはバイナリファイルです。fileutils.cmpはバイナリも比較できるようです。また、File.sizeのチェックをコメントアウトしていますが、これは同一サイズのファイルでも内容が異なるファイルを発見したため、このようにしました。