2

我正在编写一个测试脚本,该脚本打开一个带有不带“www”和“com”的 URL 列表的文件。

我正在尝试阅读每一行并将该行放入 URL。然后我检查它是否重定向甚至存在。

我的问题是当我从文件中读取该行并将其分配给一个变量时。然后,我与加载后 URL 中的内容和我最初放入的内容进行比较,但它似乎在我的变量之后添加了一个 return。

基本上它总是说重定向,因为它放置“ http://www.line \n.com/”。

我怎样才能摆脱“\ n”?

counter = 1
    file = File.new("Data/activeSites.txt", "r")
        while (line = file.gets)
                puts "#{counter}: #{line}"
                counter = counter + 1
                browser.goto("http://www." + line + ".com/")

if browser.url == "http://www." + line + ".com/"
                    puts "Did not redirect"
                else
                    puts ("Redirected to " + browser.url)
                    #puts ("http://www." + line + ".com/")
                    puts "http://www.#{line}.com/"
                end

基本上它总是说重定向,因为它放http://www.line然后返回 .com/

我怎样才能摆脱退货?

4

3 回答 3

6

简短的回答:strip

"text\n   ".strip # => "text"

长答案:

您的代码不是很像 ruby​​,可以重构。

# Using File#each_line, the line will not include the newline character
# Adding with_index will add the current line index as a parameter to the block
File.open("Data/activeSites.txt").each_line.with_index do |line, counter|
  puts "#{counter + 1}: #{line}"

  # You're using this 3 times already, let's make it a variable
  url = "http://#{line}.com"

  browser.goto(url)

  if browser.url == url
    puts "Did not redirect"
  else
    puts ("Redirected to " + browser.url)
    puts url
  end
end
于 2013-04-08T21:24:53.683 回答
3

那是因为您的行被换行符终止。你需要strip关闭它:

while (line = file.gets)
  line.strip!
  puts "#{counter}: #{line}" 
  # ...

请注意,有更好的方法可以遍历文件中的行:

File.foreach("Data/activeSites.txt") do |line|
  # ...
end
于 2013-04-08T21:18:29.220 回答
0

这是您将其重新缩进到“Ruby 方式”后的代码:

counter = 1
file = File.new("Data/activeSites.txt", "r")
while (line = file.gets)
  puts "#{counter}: #{line}"
  counter = counter + 1
  browser.goto("http://www." + line + ".com/")

  if browser.url == "http://www." + line + ".com/"
    puts "Did not redirect"
  else
    puts ("Redirected to " + browser.url)
    #puts ("http://www." + line + ".com/")
    puts "http://www.#{line}.com/"
  end

这是不正确的,因为它缺少end. while但是,它也没有正确处理文件 IO。

我是这样写的:

File.foreach("Data/activeSites.txt") do |line|
  puts "#{ $. }: #{ line }"

  browser.goto("http://www.#{ line }.com/")

  if browser.url == "http://www.#{ line }.com/"
    puts "Did not redirect"
  else
    puts "Redirected to #{ browser.url }"
    puts "http://www.#{ line }.com/"
  end
end

File.foreach是从 IO 继承的方法。如果您正确读取文件,则不需要stripor chomp,因为 Ruby 在IO.foreach读取该行时会正确处理它。

每次 IO 读取一行时,它都会增加$.全局,这是$INPUT_LINE_NUMBER. 没有必要保留一个柜台。使用:

require 'english'

将启用详细名称。有关更多信息,请参阅英文文档

于 2013-04-08T22:02:25.937 回答