Forum: Ruby Need help massaging some strings

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
8e7e5b934fcbcdfb475072685755457f?d=identicon&s=25 Taylor Strait (taylorstrait)
on 2006-12-28 06:21
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.
8e7e5b934fcbcdfb475072685755457f?d=identicon&s=25 Taylor Strait (taylorstrait)
on 2006-12-28 06:37
> 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")
58479f76374a3ba3c69b9804163f39f4?d=identicon&s=25 Eric Hodel (Guest)
on 2006-12-28 06:39
(Received via mailing list)
On Dec 27, 2006, at 21:21, Taylor Strait wrote:

>     * Winfield, Marion County
> I have created a method for doing this in "cleanup.rb":
>     puts temp
> 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'

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

I LIT YOUR GEM ON FIRE!
2ee1a7960cc761a6e92efb5000c0f2c9?d=identicon&s=25 William James (Guest)
on 2006-12-28 07:37
(Received via mailing list)
Taylor Strait wrote:
>     * Winterboro, Talladega County
>
>   end
>   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
4e8d94859927eab3b50486d21249c068?d=identicon&s=25 Paulo Köch (Guest)
on 2006-12-28 10:51
(Received via mailing list)
I think what the original author of this message was trying to say
was "Have you tryed RegExps?"
=P

Paulo Jorge Duarte
Köchpaulo.koch@gmail.com
This topic is locked and can not be replied to.