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 <main>': 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 [email protected]
The views expressed within this email are those of the
individual, and not necessarily those of the organisation