From: Tris Hoar Date: 2012-03-06T03:31:57+09:00 Subject: Inconsistent behaviour when working with a string Hi List, I'm writing a supposedly simple program to help me sort some files in to a different data structure. I have ~2 million files that look either like this access1202241814.merged.log.bz2 or this access_denied1202211457.merged.log.bz2 Though over 90% or of the first type I'd like to be able to handle both at the same time as this will eventually form part of a larger log management program. This is what I currently have $months = ['01-January', '02-February', '03-March', '04-April', '05-May', '06-June', '07-July', '08-August', '09-September', '10-October', '11-November', '12-December'] Dir.chdir("/ruby-scripts/archive/logs/misc/") Dir.foreach(".") do |file| fileint = file[/\d{10,}/] year = fileint[0,2] month = $months[fileint[2,2].to_i-1] puts "year = #{year} month = #{month} and file was #{file}" end this will return ./archive.rb:7:in `block in
': undefined method `[]' for nil:NilClass (NoMethodError) I don't understand why though as the example below works fine, but will only match access1202241814.merged.log.bz2 $months = ['01-January', '02-February', '03-March', '04-April', '05-May', '06-June', '07-July', '08-August', '09-September', '10-October', '11-November', '12-December'] Dir.chdir("/ruby-scripts/archive/logs/misc/") Dir.foreach(".") do |file| year = file[0,2] month = $months[file[2,2].to_i-1] puts "year = #{year} month = #{month} and file was #{file}" end The only difference between the 2 is that in the first one I've used a regex to strip out all the extraneous text. I've tried this in ruby 1.9.2 and 1.8.7 Can any one explain why the 1 one is breaking? and if this is expected behaviour, is there a way I can do this so it will cope with both file types at the same time? Thanks for any pointers Regards, Tris ************************************************************* This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify postmaster@bgfl.org The views expressed within this email are those of the individual, and not necessarily those of the organisation *************************************************************