Need help massaging some strings

As a Rails developer, I've been learning Ruby on a need-to-know basis.
However, I now need to tap its power to batch alter some very large text
dumps and find myself a bit lost. Here is what I need to do:

Transform data in files like "alabama.txt":
    * White Hall, Lowndes County
    * Wilmer, Mobile County
    * Wilsonville, Shelby County
    * Wilton, Shelby County
    * Winfield, Marion County
    * Winterboro, Talladega County

...into this format:
White Hall
Wilmer
Wilsonville
Wilton
Winfield
Winterboro

I have created a method for doing this in "cleanup.rb":

def cleanup(state)
  diskfile = File.new(state + "-cleaned.txt", "w")
  $stdout = diskfile

  IO.foreach(state + ".txt") do |line|
    line.delete("\*")
    line.strip!
    temp = line.split(",")
    temp.delete_at(1).to_s
    puts temp
  end

  diskfile.close
  $stdout = STDOUT
end

So I go into IRB and here is how my session goes:

irb(main):008:0> require 'cleanup'
  => true
irb(main):009:0> cleanup(alabama)
  NameError: undefined local variable or method `alabama' for
main:Object
irb(main):010:0> cleanup
  ArgumentError: wrong number of arguments (0 for 1)

So my method is loaded but isn't working. Could anyone offer any advice
on getting this thing running? Thanks in advance.

···

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

irb(main):009:0> cleanup(alabama)
  NameError: undefined local variable or method `alabama' for

Got it. What a doofus - I just had to use this instead:

irb(main):009:0> cleanup("alabama")

···

--
Posted via http://www.ruby-forum.com/\.

As a Rails developer, I've been learning Ruby on a need-to-know basis.
However, I now need to tap its power to batch alter some very large text
dumps and find myself a bit lost. Here is what I need to do:

Transform data in files like "alabama.txt":
    * White Hall, Lowndes County
    * Wilmer, Mobile County
    * Wilsonville, Shelby County
    * Wilton, Shelby County
    * Winfield, Marion County
    * Winterboro, Talladega County

...into this format:
White Hall
Wilmer
Wilsonville
Wilton
Winfield
Winterboro

I have created a method for doing this in "cleanup.rb":

def cleanup(state)
  diskfile = File.new(state + "-cleaned.txt", "w")
  $stdout = diskfile

  IO.foreach(state + ".txt") do |line|
    line.delete("\*")
    line.strip!
    temp = line.split(",")
    temp.delete_at(1).to_s
    puts temp
  end

  diskfile.close
  $stdout = STDOUT
end

So I go into IRB and here is how my session goes:

irb(main):008:0> require 'cleanup'
  => true
irb(main):009:0> cleanup(alabama)
  NameError: undefined local variable or method `alabama' for
main:Object

This is your clue. You didn't define the alabama variable or method.

irb(main):010:0> cleanup
  ArgumentError: wrong number of arguments (0 for 1)

You have to pass one argument.

So my method is loaded but isn't working. Could anyone offer any advice
on getting this thing running? Thanks in advance.

cleanup 'alabama'

···

On Dec 27, 2006, at 21:21, Taylor Strait wrote:

--
Eric Hodel - drbrain@segment7.net - http://blog.segment7.net

I LIT YOUR GEM ON FIRE!

Taylor Strait wrote:

As a Rails developer, I've been learning Ruby on a need-to-know basis.
However, I now need to tap its power to batch alter some very large text
dumps and find myself a bit lost. Here is what I need to do:

Transform data in files like "alabama.txt":
    * White Hall, Lowndes County
    * Wilmer, Mobile County
    * Wilsonville, Shelby County
    * Wilton, Shelby County
    * Winfield, Marion County
    * Winterboro, Talladega County

..into this format:
White Hall
Wilmer
Wilsonville
Wilton
Winfield
Winterboro

I have created a method for doing this in "cleanup.rb":

def cleanup(state)
  diskfile = File.new(state + "-cleaned.txt", "w")
  $stdout = diskfile

  IO.foreach(state + ".txt") do |line|
    line.delete("\*")
    line.strip!
    temp = line.split(",")
    temp.delete_at(1).to_s
    puts temp
  end

  diskfile.close
  $stdout = STDOUT
end

So I go into IRB and here is how my session goes:

irb(main):008:0> require 'cleanup'
  => true
irb(main):009:0> cleanup(alabama)
  NameError: undefined local variable or method `alabama' for
main:Object
irb(main):010:0> cleanup
  ArgumentError: wrong number of arguments (0 for 1)

def cleanup(state)
  File.open(state + "-cleaned.txt", "w") do |outfile|
    IO.foreach(state + ".txt") do |line|
      outfile.puts line[ /^[\s*]*(.*),[^,]*$/, 1 ]
    end
  end
end

Or:

def cleanup(state)
  File.open(state + "-cleaned.txt", "w") { |out|
    out.puts IO.readlines(state + ".txt").map{|line|
      line[ /^[\s*]*(.*),[^,]*$/, 1 ] } }
end

Or even:

def cleanup(s)
  open(s+"-cleaned.txt","w"){|o|o<<IO.read(s+".txt").
    gsub(/^[ *]*|,.*$/,"")}
end

I think what the original author of this message was trying to say was "Have you tryed RegExps?"
=P

Paulo Jorge Duarte Köch
paulo.koch@gmail.com

···

On 2006/12/28, at 06:35, William James wrote:

Taylor Strait wrote:

As a Rails developer, I've been learning Ruby on a need-to-know basis.
However, I now need to tap its power to batch alter some very large text
dumps and find myself a bit lost. Here is what I need to do:

Transform data in files like "alabama.txt":
    * White Hall, Lowndes County
    * Wilmer, Mobile County
    * Wilsonville, Shelby County
    * Wilton, Shelby County
    * Winfield, Marion County
    * Winterboro, Talladega County

..into this format:
White Hall
Wilmer
Wilsonville
Wilton
Winfield
Winterboro

I have created a method for doing this in "cleanup.rb":

def cleanup(state)
  diskfile = File.new(state + "-cleaned.txt", "w")
  $stdout = diskfile

  IO.foreach(state + ".txt") do |line|
    line.delete("\*")
    line.strip!
    temp = line.split(",")
    temp.delete_at(1).to_s
    puts temp
  end

  diskfile.close
  $stdout = STDOUT
end

So I go into IRB and here is how my session goes:

irb(main):008:0> require 'cleanup'
  => true
irb(main):009:0> cleanup(alabama)
  NameError: undefined local variable or method `alabama' for
main:Object
irb(main):010:0> cleanup
  ArgumentError: wrong number of arguments (0 for 1)

def cleanup(state)
  File.open(state + "-cleaned.txt", "w") do |outfile|
    IO.foreach(state + ".txt") do |line|
      outfile.puts line[ /^[\s*]*(.*),[^,]*$/, 1 ]
    end
  end
end

Or:

def cleanup(state)
  File.open(state + "-cleaned.txt", "w") { |out|
    out.puts IO.readlines(state + ".txt").map{|line|
      line[ /^[\s*]*(.*),[^,]*$/, 1 ] } }
end

Or even:

def cleanup(s)
  open(s+"-cleaned.txt","w"){|o|o<<IO.read(s+".txt").
    gsub(/^[ *]*|,.*$/,"")}
end