Hey all,
I've been spending the last week learning Ruby. Prior to that, I had
spent some time learning Python. For various reasons, it looks like I'm
gravitating more to Ruby.
That being said, I decided to write a small program similiar to the UNIX
'wc' program.
Right now, it's very stripped down being that it only accepts input data
from STDIN if not a tty and I also haven't yet implemented the command
line arguments.
For the context of this post, I only included the logic that gets/prints
the word count and gets/prints the length of the longest line since
these are the ones I have questions about. Here it is:
----- Beginning of Program -----
#!/bin/env ruby
# Read input from stdin only if not a tty. The only reason I gave such a
# constraint here was just to see that I could do it. It's one of the
# first things I do in learning a new language
if not STDIN.tty?
data = STDIN.read
end
exit if not data
# PRINT THE WORD COUNT
# I'm wondering if there's an easier way to do this. It would
# be nice of the String::count method accepted regex patterns
# and not just strings.
# As it stands, this method creates a seperate array of words
# for which I get the count of. I would've rather done this
# without the extra overhead but I guess it's no big deal: it works!
printf("Word Count: %d\n", data.split(/\s/).length)
# GET THE LENGTH OF THE LONGEST LINE
# If there's a more elegant solution than what I have below, I'm all
# ears
line_length = 0
data.split(/\n/).each do |line|
line_length = line.length if line_length < line.length
end
printf("Longest Line Length: %d\n", line_length)
----- End of Program -----
My question here isn't correctness as much as elegance. I'm fairly sure
the solutions I've provided are correct (maybe); I'm just wondering if
anyone has a better solution.
Thanks,
Keith P. Boruff
I've been spending the last week learning Ruby. Prior to that, I had
spent some time learning Python. For various reasons, it looks like I'm
gravitating more to Ruby.
That being said, I decided to write a small program similiar to the UNIX
'wc' program.
Right now, it's very stripped down being that it only accepts input data
from STDIN if not a tty and I also haven't yet implemented the command
line arguments.
For the context of this post, I only included the logic that gets/prints
the word count and gets/prints the length of the longest line since
these are the ones I have questions about. Here it is:
----- Beginning of Program -----
#!/bin/env ruby
# Read input from stdin only if not a tty. The only reason I gave such a
# constraint here was just to see that I could do it. It's one of the
# first things I do in learning a new language
if not STDIN.tty?
data = STDIN.read
end
exit if not data
# PRINT THE WORD COUNT
# I'm wondering if there's an easier way to do this. It would
# be nice of the String::count method accepted regex patterns
# and not just strings.
# As it stands, this method creates a seperate array of words
# for which I get the count of. I would've rather done this
# without the extra overhead but I guess it's no big deal: it works!
printf("Word Count: %d\n", data.split(/\s/).length)
# GET THE LENGTH OF THE LONGEST LINE
# If there's a more elegant solution than what I have below, I'm all
# ears
line_length = 0
data.split(/\n/).each do |line|
line_length = line.length if line_length < line.length
end
printf("Longest Line Length: %d\n", line_length)
----- End of Program -----
My question here isn't correctness as much as elegance. I'm fairly sure
the solutions I've provided are correct (maybe); I'm just wondering if
anyone has a better solution.
Thanks,
Keith P. Boruff