From: Mike Stok Date: 2006-03-22T08:59:42+09:00 Subject: Re: Newbie: Better way to check a magic number on a file? On 21-Mar-06, at 6:46 PM, Wes Gamble wrote: > All, > > I am trying to determine if I am dealing with an Excel file that I > upload to a Web server. > > Here is the first test - to verify the magic number of the file that I > have: > > #Check the magic number first to see if it's even an Office file > > magic_number = nil > File.open(path_to_file, "r") do |f| > magic_number = f.read(6) > end > return false unless > magic_number.unpack('H*').to_s().eql?('d0cf11e0a1b1') > > This seems a little bit less than optimal. I have to unpack my string > into an array and then reconvert it back to a string to compare it? > > Surely there is a simpler way? > > Should magic_number.eql?('d0cf11e0a1b1') work? There are a number of simpler ways, one might be EXCEL_FILE_MAGIC_NUMBER = ['d0cf11e0a1b1'].pack('H*') # later magic_number == EXCEL_FILE_MAGIC_NUMBER # => true or false or you can use octal or hex escapes to have a string literal to compare against e.g. irb(main):006:0> "\320\317\021\340\241\261" == "\xd0\xcf\x11\xe0\xa1 \xb1" => true Maybe there are good bits of the Pickaxe (Programming Ruby) or some on-line tutorials which can help you see some of the more ruby-ish ways to do things. Hope this helps, Mike -- Mike Stok http://www.stok.ca/~mike/ The "`Stok' disclaimers" apply.