Forum: Ruby help reading data from a file

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.
5a22711a70abd82d57a47381e17bc4af?d=identicon&s=25 Zoe Phoenix (zoephoenix)
on 2009-02-13 05:46
I have a ruby program that I use to generate text files from a single
array's data, but what I would like to do is be able to have it generate
files from multiple arrays and save them in a different folder when it
starts writing files from a different array.

One problem I'm facing is how to read an array from a file. If I have a
file with an only an array in it, how do I apply a method such as
".generate" to the array?  Do I name the array inside the file, such as
"array1" and then apply the method ".generate"?  Or can it be applied to
the file itself, such as "file1.generate"?



cities = ['Nashville',
'Orlando',
'Tampa'
'Memphis'
]



  cities.each do |city|
    output = %Q(#{city})


######################################
#
#Saves File.
#
######################################

    File::open("C:\\Documents And
Settings\\Administrator\\Desktop\\city\\#{city.downcase.delete('
')}.txt", 'w') do |f|
    f.write output
    end
end




I'm not sure of the best way to expand this code to have it generate
files for multiple arrays and have each array's generated files be saved
in a separate folder instead of all of them together. To keep from
having 1 huge file, I'd like to have each array in a different file, but
if this isn't the best way to do it, can someone give me a better
example..?
2ee1a7960cc761a6e92efb5000c0f2c9?d=identicon&s=25 William James (Guest)
on 2009-02-13 07:10
(Received via mailing list)
Zoe Phoenix wrote:

> One problem I'm facing is how to read an array from a file.

puts IO.read("data2")
Nashville
Orlando
Tampa
Memphis
    ==>nil

p IO.readlines("data2")
["Nashville\n", "Orlando\n", "Tampa\n", "Memphis\n"]
    ==>nil

p IO.readlines("data2").map{|s| s.strip}
["Nashville", "Orlando", "Tampa", "Memphis"]
    ==>nil

p IO.read("data2").split( /\s*\n\s*/ )
["Nashville", "Orlando", "Tampa", "Memphis"]
    ==>nil
54404bcac0f45bf1c8e8b827cd9bb709?d=identicon&s=25 7stud -- (7stud)
on 2009-02-13 15:28
William James wrote:
> Zoe Phoenix wrote:
>
>> One problem I'm facing is how to read an array from a file.
>
> puts IO.read("data2")
> Nashville
> Orlando
> Tampa
> Memphis
>     ==>nil
>
>
>
> p IO.read("data2").split( /\s*\n\s*/ )
> ["Nashville", "Orlando", "Tampa", "Memphis"]
>     ==>nil


puts IO.read("data2.txt")

--output:--
Nashville
Orlando
Tampa
Memphis

p IO.read("data2.txt").split()

--output:--
["Nashville", "Orlando", "Tampa", "Memphis"]
54404bcac0f45bf1c8e8b827cd9bb709?d=identicon&s=25 7stud -- (7stud)
on 2009-02-13 17:09
Zoe Phoenix wrote:
>
> One problem I'm facing is how to read an array from a file. If I have a
> file with only an array in it, how do I apply a method such as
> ".generate" to the array?
>

arr = %w{Nashville Orlando Tampa Memphis}

File.open("data.txt", "w") do |f|
  Marshal.dump(arr, f)
end

cities = nil

File.open("data.txt") do |f|
  cities = Marshal.load(f)
end

p cities
p cities.length
p cities.reverse

--output:--
["Nashville", "Orlando", "Tampa", "Memphis"]
4
["Memphis", "Tampa", "Orlando", "Nashville"]


>
> cities = ['Nashville',
> 'Orlando',
> 'Tampa'
> 'Memphis'
> ]
>
>   cities.each do |city|
>     output = %Q(#{city})
>     dir = "/some/path/#{city.downcase.delete(' ')}.txt"
>
>     File::open(dir, 'w') do |f|
>         f.write output
>     end
> end
>
> I have a ruby program that I use to generate text files from a single
> array's data, but what I would like to do is be able to have it generate
> files from multiple arrays and save them in a different folder when it
> starts writing files from a different array.
>

data = {
  'cities' => %w{Nasheville Olrando Tampa Memphis},
  'dogs' => %w{small medium large},
  'friends' => %w{Dave Cathy Jill}
}


dirs = {
  'cities' => './a', #Must be existing dirs
  'dogs' => './b',
  'friends' => './c'
}

data.each do |key, val|
  current_path = "#{dirs[key]}/#{key}"

  File.open(current_path, "w") do |f|
    val.each do |arr_element|
      f.write "#{arr_element} "
    end
  end

end
54404bcac0f45bf1c8e8b827cd9bb709?d=identicon&s=25 7stud -- (7stud)
on 2009-02-13 17:15
7stud -- wrote:
>
>   File.open(current_path, "w") do |f|
>     val.each do |arr_element|
>       f.write "#{arr_element} "
>     end
>   end
>

That could be simply:

  File.open(current_path, "w") do |f|
    f.write val.join(" ")
  end
6e24241da7dff2f54d94b5c69daa47a1?d=identicon&s=25 Cory Rider (sunnyflorida)
on 2009-03-11 16:26
7stud -- wrote:
> 7stud -- wrote:
>>
>>   File.open(current_path, "w") do |f|
>>     val.each do |arr_element|
>>       f.write "#{arr_element} "
>>     end
>>   end
>>
>
> That could be simply:
>
>   File.open(current_path, "w") do |f|
>     f.write val.join(" ")
>   end

Do either of you know anyone with RoR experience & and active security
clearance? We have a contract opening with flexible pay in Tampa, FL.
$1000 referral bonus. Please let me know (crider@apexsystemsinc.com).

Thanks!
Cory
This topic is locked and can not be replied to.