Stn
Stn

Reputation: 447

File Creation/Loop Problems in Ruby

EDIT: My original question was way off, my apologies. Mark Reed has helped me find out the real problem, so here it is.

Note that this code works:

require 'rubygems'
require 'nokogiri'
require 'open-uri'

source_url = "www.flickr.com"
puts "Visiting #{source_url}"
page = Nokogiri::HTML(open("http://website/script.php?value=#{source_url}"))
textarea = page.css('textarea') 


filename = source_url.to_s + ".txt"
create_file = File.open("#{filename}", 'w')
create_file.puts textarea
create_file.close

Which is really awesome, but I need it to do this to ~110 URLs, not just Flickr. Here's my loop that isn't working:

require 'rubygems'
require 'nokogiri'
require 'open-uri'

File.open('sources.txt').each_line do |source_url|
  puts "Visiting #{source_url}"
  page = Nokogiri::HTML(open("http://website/script.php?value=#{source_url}"))
  textarea = page.css('textarea') 

  filename = source_url.to_s + ".txt"
  create_file = File.open("#{filename}", 'w')
  create_file.puts "#{textarea}"
  create_file.close
end

What am I doing wrong with my loop?

Upvotes: 1

Views: 120

Answers (2)

Mark Reed
Mark Reed

Reputation: 95335

Ok, now you're looping over the lines of the input file. When you do that, you get strings that end in a newilne. So you're trying to create a file with a newline in the middle of its name, which is not legal in Windows.

Just chomp the string:

File.open('sources.txt').each_line do |source_url|
  source_url.chomp!
  # ... rest of code goes here ...

You can also use File#foreach instead of File#open.each_line:

File.foreach('sources.txt') do |source_url|
  source_url.chomp!
  # ... rest of code goes here 

Upvotes: 1

d11wtq
d11wtq

Reputation: 35318

You're putting your parentheses in the wrong place:

create_file = File.open(variable, 'w')

Upvotes: 0

Related Questions