From: Sandro Paganotti Date: 2008-05-13T01:59:28+09:00 Subject: Re: regexp+hash problem Why don't use Date.strptime to match the date info ? On Mon, May 12, 2008 at 4:04 PM, Le Lann Jean-Christophe wrote: > Hello ! > > I becoming totally mad about this simple script, whose goal is to capture > various information (written in a single file) about some chess games : the > conversion I need for the month seems to be the problem : I am using a hash > to convert "Feb" into 2,etc. But, this works only for the first line of my > file !? > > The error reported is "can't convert String into Integer (TypeError)", but > I can't figure what it means. > > Can someone help ? > Thx > JC > > > > require 'date' > > # content of the data file > # 16: + 1181 W 1347 tihtu [ br 2 12] B06 Res Sun Feb 17, 05:05 > PST 2008 > # 17: - 1174 B 1242 SUPERFRIJOL [ br 2 12] C50 Mat Sun Feb 17, 09:03 > PST 2008 > # 18: + 1188 W 1480 kalvehale [ br 2 12] D52 Res Sun Feb 17, 09:13 > PST 2008 > # 19: + 1193 B 1048 borsodilaci [ br 2 12] D00 Mat Sun Feb 17, 09:27 > PST 2008 > # 20: + 1206 W 1439 pipharlow [ br 2 12] A45 Res Sun Feb 17, 09:32 > PST 2008 > # 21: - 1192 B 874 tealush [ br 2 12] C20 Res Sun Feb 17, 09:46 > PST 2008 > # 22: + 1194 W 861 PhatWebah [ br 2 12] A40 Mat Sun Feb 17, 09:54 > PST 2008 > # 23: - 1190 B 1420 Alquimista [ br 2 12] C47 Res Sun Feb 17, 09:59 > PST 2008 > # 24: - 1181 W 1156 jkjkjk [ br 2 12] D06 Mat Sun Feb 17, 10:19 > PST 2008 > # 25: - 1175 B 1266 Entangle [ br 2 12] B40 Mat Sun Feb 17, 11:34 > PST 2008 > > > > fileName=ARGV[0] if ARGV[0] > > h={ > 'Jan'=>1, > 'Feb'=>2, > 'Mar'=>3, > 'Apr'=>4, > 'May'=>5, > 'Jun'=>6, > 'Jul'=>7, > 'Aug'=>8, > 'Sep'=>9, > 'Oct'=>10, > 'Nov'=>11, > 'Dec'=>12, > } > > > lineNumber=0 > month = h['Feb'] > File.open(fileName,'r') do |f| > f.each do |line| > lineNumber+=1 > > res=line.match(/(\d+): (\+|\-) (\d+) (W|B) (\d+) (\w+) (.*\]) > (\w+) (\w+) (\w+) (\w+)(\s*)(\w+), (\d+):(\d+) (\w*) (\d+)\n/) > > if res > puts "\nprocessing line #{lineNumber}\n" > puts line > num = res.captures[0] score = > res.captures[2].to_i > m = res.captures[10] > date = res.captures[12].to_i > hour = res.captures[13].to_i > minu = res.captures[14].to_i > year = res.captures[16].to_i > > puts "captured month = #{m}" > month = h[m] # <<== can't convert String into > Integer (TypeError) on the second line of the file > puts "#{m} corresponds to month #{month}" > > puts num,score,m,date,hour,minu,year > > #dateTime = DateTime.new(y=year,m=2, d=date, h=hour, > min=minu, s=0) end > end > end > > > My session : > > processing line 1 > 16: + 1181 W 1347 tihtu [ br 2 12] B06 Res Sun Feb 17, 05:05 PST > 2008 > captured month = Feb > Feb corresponds to month 2 > 16 > 1181 > Feb > 17 > 5 > 5 > 2008 > > processing line 2 > 17: - 1174 B 1242 SUPERFRIJOL [ br 2 12] C50 Mat Sun Feb 17, 09:03 PST > 2008 > captured month = Feb > ChessRate.rb:59:in `[]': can't convert String into Integer (TypeError) > from ChessRate.rb:59 > from ChessRate.rb:40:in `each' > from ChessRate.rb:40 > from ChessRate.rb:37:in `open' > from ChessRate.rb:37 > > > > > > > > > -- Go outside! The graphics are amazing!