Я пытаюсь взять входной текстовый файл и вставить в него HTML-теги определенным образом.Первая часть файла должна быть отформатирована иначе, чем вторая, поэтому я пытаюсь сделать следующее:
- Импортировать файл
- Очиститьfile
- Разделить файл на 2 части
- Форматировать часть 1
- Форматировать часть 2
- Объединить части 1 и 2 в новый файл
В основном я смог выполнить шаги 1-3 и 6, но когда я добавляю на шаге 4, у меня возникают проблемы
Вот мой код:
file_names = ['ex_poem.txt']
file_names.each do |file_name|
text = File.read(file_name)
#clean the text
# remove extra returns
clean_text = text.gsub(/\n(\n)+/, "\n\n")
# remove spaces from ends of lines
clean_text = clean_text.gsub(/ +\n/, "\n")
# remove spaces blank lines
clean_text = clean_text.gsub(/(?<=\n) +/, "")
# remove returns at start of doc
clean_text = clean_text.gsub(/\A\n*/, "")
# remove returns at end of doc
clean_text = clean_text.gsub(/\n*\Z/, "")
# parse out poem section
poem = clean_text.scan(/[\s\S]*(?=\n\n@@@)/)
poem = poem.gsub(/\A|(?<=\n)+(?!\n)+(?!\Z)/,"<p class=\"poetry-line\">")
# poem = poem.gsub(/\n\n/, "\n\n\n\n\n")
# parse out notes section
notes = clean_text.scan(/(?<=@@@\n\n)[\s\S]*/)
puts clean_text
puts poem
puts notes
end
Это выдает следующую ошибку:
poemify.2.rb:22:in `block in <main>': undefined method `gsub' for #<Array:0x00007f94b104c2c8> (NoMethodError)
from poemify.2.rb:3:in `each'
from poemify.2.rb:3:in `<main>'
, но если я прокомментирую строку
poem = poem.gsub(/\A|(?<=\n)+(?!\n)+(?!\Z)/,"<p class=\"poetry-line\">")
, тогда скрипт будет работать нормально.Это смущает меня, потому что я использую .gsub
ранее в сценарии с моей переменной clean_text
, и она работает нормально, но когда я использую ее с переменной poem
, она не работает.Но puts poem
на самом деле работает нормально, когда закомментированная строка закомментирована.
Я подозреваю, что не понимаю чего-то очень базового в том, как мне нужно инициализировать переменные или что-то еще, но я застрял.
ОБНОВЛЕНИЕ:
После того, как было показано, как .scan
превращал poem
в массив, я переработал регулярное выражение, чтобы я мог использовать .gsub
, поэтому poem
и notes
были бы строкой, и я мог бы продолжать работать с .gsub
так, как я понимаю:
poem = clean_text.gsub(/\n(?=@@@\n\n)[\s\S]*/, "")
notes = clean_text.gsub(/[\s\S]*(?<=\n\n@@@\n\n)/, "")