2013-04-08 3 views
2

Я пишу тестовый скрипт, который открывает файл со списком URL без «www» и «com».Конкатенация строк с переменными с Ruby

Я пытаюсь прочитать каждую строку и поместить строку в URL-адрес. Затем я проверяю, перенаправляется ли оно или даже существует.

Моя проблема в том, что я прочитал строку из файла и присвоил ей переменную. Затем я сравниваю с тем, что находится в URL-адресе после загрузки, и тем, что я изначально помещал там, но, похоже, добавляет возврат после моей переменной.

В основном это всегда говорит о перенаправлении, потому что он помещает «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

Ваш отпечаток ужасный, это делает ваш код очень неприятным для чтения. Пожалуйста, используйте последовательный отступ. – meagar

ответ

6

Короткий ответ: strip

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

Длинный ответ:

Ваш код не очень похож на рубин и может быть реорганизован.

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

Это потому, что ваши строки завершаются новой строкой. Вы должны strip его:

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

Обратите внимание, что существуют более эффективные способы Перебор строк в файле:

File.foreach("Data/activeSites.txt") do |line| 
    # ... 
end 
0

Это ваш код после того, как reindenting его на «Рубин пути»:

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. Если вы правильно читаете файл, вам не нужно strip или chomp, потому что Ruby будет обрабатывать его правильно, когда IO.foreach читает строку.

Каждый раз, когда IO считывает строку, он увеличивает $. глобальный, что является кратким для $INPUT_LINE_NUMBER. Нет необходимости держать счетчик. Использование:

require 'english' 

будет включать подробные имена. См. the English docs для получения дополнительной информации.

Смежные вопросы