From: Junhui Liao Date: 2010-07-29T20:43:46+09:00 Subject: my script just read one line? Dear all, My script tried to read from one original tsv file and distribute into new multiple tsv files. Each line of the original file is like this: time_1, signal_1, time_2, signal_2... time_4096, signal_4096. I would like to write them into file_1, file_2, ... file_4096 accordingly, and these files contain time_1, signal_1; time_2, signal_2; ... time_4096, signal_4096 separately. My script did well only if the original file contains ONE line. If the original file has two or more lines, the error message like following, new_split.rb:17: undefined method `+' for nil:NilClass (NoMethodError) By tracing the output, I found it seemed the script just read ONE line, since the put results like this : ........(omitted a lots of lines here) 8182 "4.08963252844486E+00" "-2.3E-03" 8184 "4.09063219413236E+00" "-3.1E-03" 8186 "4.09163185987611E+00" "-7E-04" 8188 "4.09263152560423E+00" "-3.7E-03" 8190 "4.09363119136048E+00" "3.6E-03" 8192 nil nil And my script is like this: @a = [] @itemnum = 4096 @counter = 0 @linenum = 10 File.open("../original_data/test_2lines.tsv").each_line do |record| # "^M" #File.open("../original_data/one_line.tsv").each_line do |record| @a = record.chomp.split("\t") @itemnum.times do |n| File.open("#{n}_debug_split"+".tsv" , "w") do |f| puts @counter puts @a[@counter].inspect + "\n" puts @a[@counter+1].inspect + "\n" f << @a[@counter] + "\t" + @a[@counter+1] + "\n" @counter += 2 end end end Thanks a lot for your comments in advance ! Junhui BTW, at the end of each line in original tsv file, this is a "^M" appended. I don't know how it comes and results something or not. -- Posted via http://www.ruby-forum.com/.