[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Need help massaging some strings

Taylor Strait

12/28/2006 5:22:00 AM

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-....

4 Answers

Taylor Strait

12/28/2006 5:38:00 AM

0

> 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-....

Eric Hodel

12/28/2006 5:38:00 AM

0


On Dec 27, 2006, at 21:21, 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

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.se...

I LIT YOUR GEM ON FIRE!


William James

12/28/2006 6:32:00 AM

0

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

Paulo Köch

12/28/2006 9:50:00 AM

0

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
>
>