From: William James Date: 2006-12-28T15:35:08+09:00 Subject: Re: Need help massaging some strings 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<