[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

parsing a file's contents

Ant 23

4/5/2009 3:05:00 AM

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-...attachment/3550/...

--
Posted via http://www.ruby-....

5 Answers

Andrew Timberlake

4/5/2009 6:33:00 AM

0

On Sun, Apr 5, 2009 at 5:04 AM, Ant 23 <ahack70596@hotmail.com> 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-...attachment/3550/...
>
> --
> Posted via http://www.ruby-....
>
>

Here's some code that does what you need: http://gist.github...

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/...

Hope that helps

Andrew Timberlake
http://ramblingso...
http://www.linkedin.com/in/andrew...

"I have never let my schooling interfere with my education" - Mark Twain

Rick DeNatale

4/5/2009 1:39:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

On Sun, Apr 5, 2009 at 2:32 AM, Andrew Timberlake <
andrew@andrewtimberlake.com> wrote:

> On Sun, Apr 5, 2009 at 5:04 AM, Ant 23 <ahack70596@hotmail.com> 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-...attachment/3550/...
> >
> > --
> > Posted via http://www.ruby-....
> >
> >
>
> Here's some code that does what you need: http://gist.github...
>
> 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 <-


Snippage deleted.

>
> 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.


Yes, the comments about "declaring" variables in Ruby indicates a bad
transfer of knowledge from some other language. Ruby doesn't HAVE
declarations, variables are simply references to objects, and can be changed
over time to whatever the program causes them to be changed to.

http://talklikeaduck.denh...2006/09/13/on-variables-values-a...


--
Rick DeNatale

Blog: http://talklikeaduck.denh...
Twitter: http://twitter.com/Ri...
WWR: http://www.workingwithrails.com/person/9021-ric...
LinkedIn: http://www.linkedin.com/in/ri...

Parsiya Ha

4/5/2009 1:43:00 PM

0

# while( allNumbers = infile.gets)

infile.gets returns a "string" that contains a line of the file.

I guess that you want this line of code to extract the numbers in the
file and put them into the allNumbers array. Remember that gets only
reads one line in each iteration.

you can do it simply with

-- while ( allNumbers = infile.gets.scan(/\d+/) )

#scan extracts the numbers from the string and puts them into the
allNumbers array.
# now with each iteration allNumbers contains the numbers in that line.
# if you want to put fifth number in the colA array you can do it like
this.

-- while ( allNumbers = infile.gets.scan(/\d+/) )
-- colA.push(allNumbers[4]) # fifth number in allNumbers[4]
--
Posted via http://www.ruby-....

Alexey Borzenkov

4/5/2009 2:55:00 PM

0

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.

cols = []
row = 0
file.each_line do |line|
line.chomp.split(/\s*,\s*/).each_with_index do |num, col|
cols[col] ||= []
cols[col][row] = num.to_i rescue nil
end
row += 1
end

Now cols[0] contains the first column, and so on.
--
Posted via http://www.ruby-....

Ant 23

4/5/2009 4:53:00 PM

0

Andrew Timberlake wrote:
> 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/...
>
> Hope that helps
>
> Andrew Timberlake
> http://ramblingso...
> http://www.linkedin.com/in/andrew...
>
> "I have never let my schooling interfere with my education" - Mark Twain

yes I mostly work in java so ruby is kind of new to me, although there
are some similarities, I notice that I am writing ruby like I'm writing
in java and thats when the differences show up. Thanks for the link I'm
am going to study it and thanks for the explanation.
--
Posted via http://www.ruby-....