From: "@*(&SPAM&)*optonline.net" <" kboruff\""@*.*optonline.net> Date: 2004-06-27T09:03:02+09:00 Subject: Writing UNIX 'wc' program 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