0

html を取り、分割関数を使用して作成された文字列の配列があります。私はそれを反復しようとしています:

html_array.each do |line|
    ...
end

putsそれぞれの文字列のインデックスを で、インデックスの文字lineを(どちらも nil を出力しない) で取得puts line.index('text')できますが、2 つを次のような 1 つのコマンドに組み合わせると、putsputs line[17]

puts line[line.index('text')]

それは私にエラーを与えます:

no implicit conversion from nil to integer (TypeError)

誰かが私が間違っていることを教えてもらえますか? 私はプログラミングとルビーの初心者です。

4

3 に答える 3

4

line.index('text')nil文字列「テキスト」が行に見つからないため、ある時点で返されます。line[nil]次に、無効な配列インデックスであるにアクセスしようとしています。

このようなものが良いかもしれません:

index = line.index('text')
if index.nil?
  puts "Text not found"
else
  puts line[index]
end

これにより、文字列を使用する前にインデックスが nil かどうかがチェックされます (行に文字列が含まれていない場合は警告が表示されます)。

于 2012-09-11T02:31:25.270 に答える
0

一部の行にエラーがあるかどうかを追跡するには、次を試してください。

html_array.each do |line|
  puts (line[line.index('text')] rescue "nil")
end

エラーがある行ごとに「nil」が出力されます。「テキスト」がすべての行に出現するわけではないと思います。あなたが達成しようとしていることの全体像を共有していただけますか?

于 2012-09-11T02:28:45.997 に答える