From: Andrew Timberlake Date: 2009-04-05T15:32:48+09:00 Subject: Re: parsing a file's contents On Sun, Apr 5, 2009 at 5:04 AM, Ant 23 wrote: > Hello all, I'm relatively new to ruby and this forum so I'm not sure I'm > posting this in the right area but here goes. My problem is I have a > file I want to read in, the file contains numbers in a CSV set-up like > so: 2, 3, 15, 25, 29 the numbers are all written out like that 5 per > row. What I want to do is split the numbers into columns that the 2 and > the number under it are all in an array. The main problem I'm having is > that when I try to put the numbers into the array I get a NoMethodError > for the String type which I don't understand since I created the every > method for the Array class not String. I attached the code any > assistance is appreciated. > > Attachments: > http://www.ruby-forum.com/attachment/3550/numbers.rb > > -- > Posted via http://www.ruby-forum.com/. > > Here's some code that does what you need: http://gist.github.com/90389 A quick look through your code with some comments: # <- This is completely unecessary class Array def every(n) select{|x| index(x) % n == 0} end end # <- The way you are writing this makes this class completely unecessary. For this simple use-case, it's okay to write it as a simple script. class Numbers #Declare the arrays that will hold the numbers when they are seperated colA = [] colB = [] colC = [] colD = [] colE = [] #Declare the array that will hold all the numbers in the file <- Ruby will fill this with a string because that's what each line of the file will be read as allNumbers = [] #now we just have to get the numbers from the file into the array <- No need for a counter counter = 1 File.open("C:\\Documents and Settings\\Desktop\\test.txt", "r") do |infile| while(allNumbers = infile.gets) <- This is where ruby will change allNumbers to a String #this is not working as ruby is taking the files contents as strings not ints <- You got it #colA = allNumbers.every 5 #in theory should take every fifth number from allNumbers and put it in colA puts "#{allNumbers.to_s}" #ok it works but now i need to put the numbers into each different array <- It works because you're printing out the line from the file colA = allNumbers.every 5 #in theory should take every fifth number from allNumbers and put it in colA <- Won't work because you're expecting an array puts "#{colA.to_s}" #print out the numbers in colA counter = counter + 1 #why aint this counter++ <- Because that's not ruby, you can do counter += 1 end end end It looks like you're coming from a Java background. Ruby tends to do things quite differently even though it can look similar in some respects. Here's an online book that could be useful to get a quick overview of Ruby - http://www.ruby-doc.org/docs/ruby-doc-bundle/ProgrammingRuby/index.html Hope that helps Andrew Timberlake http://ramblingsonrails.com http://www.linkedin.com/in/andrewtimberlake "I have never let my schooling interfere with my education" - Mark Twain