入力テキストファイルを取得して、特定の方法でhtmlタグを挿入しようとしています。ファイルの最初の部分は、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)/, "")
poem
の結果を保持します。scan
これは、Array
ではなく、を返しますString
。
ここでドキュメントを見ることができます:https://ruby-doc.org/core-2.2.0/String.html#method-i-scan
gsub
で呼び出すことはできませんArray
。をmap
超えてArray
、gsub
各要素を呼び出すことができます。
あなたのスキャン結果は、あなたがする必要がありますグループ含まれている場合はmap
、初期の各要素の上にmap
、それが含まれていますArray
のArray
秒。
また、一致するものがない場合でも、空のを受け取りますArray
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加