2015-07-19 103 views
0

我的代码:如何每个数组元素写入到不同的文件

allfiles = [123, 234, 345] 
allurls = ["http://www.123.com", "http://www.234.com"] 

for allfile in allfiles 
    name = allfile + ".html" 
    File.open(name, "w") do |file| 
     for allurl in allurls 
      file.write(RestClient.get(allurl)) 
     end 
    end 
end 

Error: String can't be coerced into Fixnum (TypeError)

基本上,我想下载相应的URL的HTML,并将其保存到相应的其URL命名的文件。我的代码有什么问题?

谢谢!

+0

尝试改变'名字= ALLFILE +名 “.html ”''到名字=(ALLFILE).to_s +名“ .html”' – Pavan

回答

0

Error: String can't be coerced into Fixnum (TypeError)

错误归因于该行name = allfile + ".html"。您不能将字符串更改为号码。像下面这样更改会解决您的问题

allfiles = [123, 234, 345] 
allurls = ["http://www.123.com", "http://www.234.com"] 

for allfile in allfiles 
    name = (allfile).to_s + ".html" 
    File.open(name, "w") do |file| 
     for allurl in allurls 
      file.write(RestClient.get(allurl)) 
     end 
    end 
end 

您也可以使用string interpolation

allfiles = [123, 234, 345] 
allurls = ["http://www.123.com", "http://www.234.com"] 

for allfile in allfiles 
    name = "#{allfile}" + ".html" 
    File.open(name, "w") do |file| 
     for allurl in allurls 
      file.write(RestClient.get(allurl)) 
     end 
    end 
end 
+0

谢谢帕文!实际上,我在创建allfiles数组之前使用了字符串插值方法。但是,由于我的实际文件名包含/,这与目录混淆。我尝试使用'#{allfile}',但它不起作用。有任何想法吗?? (单引号是为了忽略/) –

0

的误差在陆续上马

name = allfile + ".html"

赫拉ALLFILE是一个整数,而您试图将其添加到字符串。您需要使用to_s方法将'allfile'转换为字符串。

allfiles = [123, 234, 345] 
allurls = ["http://www.123.com", "http://www.234.com"] 

for allfile in allfiles 
    name = allfile.to_s + ".html" 
    File.open(name, "w") do |file| 
     for allurl in allurls 
      file.write(RestClient.get(allurl)) 
     end 
    end 
end 
0

首先,文件名前缀必须是字符串,这样要么改变allfiles['123', '234', '345']或表达String#to_s后转换:

name = allfile.to_s + ".html"

其次,遍历集合使用for是红宝石unidiomatic 。而是使用Enumerable方法和块样式:

allfiles.each do |allfile| 
    File.open("#{allfile}.html") do |file| 
    allurls.each {|allurl| file.write RestClient.get(allurl)} 
    end 
end 

更新由OP的评论:

domains = ['123', '234', '345'] 
domains.each do |domain| 
    File.open("#{domain}.html") do |file| 
    file.write RestClient.get("http://www.#{domain}.com/") 
    end 
end 

只适用于在WWW网址。 <域名>.com格式。它需要修改才能更通用。

+0

谢谢,现在的文件保存,但两者123.com和234.com保存到123.html和234.html。有没有办法解决这个问题? –

+0

上述行为等同于原始问题的示例。你应该如何保存url响应?我可以更新答案。 – joanbm

+0

再次感谢您的回复!我想将123.com保存到123.html,并将234.com保存到234.html。 我实际上已经尝试过使用pavan提到的字符串插值方法。但由于实际的文件名包含/,并且使用'#{allfile}不起作用,我决定创建一个新的allfiles数组,这使得一切都变得更加复杂。如果你知道如何忽略/在文件名中,这可能会更容易。 (/与目录混淆)谢谢! –