2017-03-22 7 views
0

ウェブページのコンテンツページから、"#"で始まらない行を印刷したいとします。Rubyでシンボルを持たない行を返します

lines[0] != "#" 

をしかし、それは逆の方法では動作しません:

def open(url) 
    Net::HTTP.get(URI.parse(url)) 
end 

page_content = open('https://virusshare.com/hashes/VirusShare_00000.md5') 

line_num=0 
page_content.each_line do |lines| 
    line_num += 1 
    if lines[0] == "#" 
    lines.each_line do |line| 
     if (line_num==1) 
     puts line 
     end 
    end 
    end 
end 

期待される結果:私は"#"で始まる行を印刷しようとすると、

2d75cc1bf8e57872781f9cd04a529256 
00f538c3d410822e241486ca061a57ee 
3f066dd1f1da052248aed5abc4a0c6a1 
781770fda3bd3236d0ab8274577dddde 
................................ 

それは動作します。

require 'net/http' 
def open(url) 
    Net::HTTP.get(URI.parse(url)) 
end 

page_content = open('https://virusshare.com/hashes/VirusShare_00000.md5') 

puts page_content.each_line.reject{ |line| line.start_with?('#') } 

それは出力:

+0

含むかで始まりますか? if lines.include?を試してみてください。 "#" ' –

+0

編集されました、ありがとうございます。 @WiktorStribiżewで始まる –

+0

@WiktorStribiżew私は最初のものとやりたいと思っています:) –

答えて

2

あなただけrejectとの混在使用することができます

page_content.each_line.find{ |line| !line.start_with?('#') } 

ノート

2d75cc1bf8e57872781f9cd04a529256 
00f538c3d410822e241486ca061a57ee 
3f066dd1f1da052248aed5abc4a0c6a1 
781770fda3bd3236d0ab8274577dddde 
86b6c59aa48a69e16d3313d982791398 
42914d6d213a20a2684064be5c80ffa9 
10699ac57f1cf851ae144ebce42fa587 
248338632580f9c018c4d8f8d9c6c408 
999eb1840c209aa70a84c5cf64909e5f 
12c4201fe1db96a1a1711790b52a3cf9 
................................ 

をあなただけの最初の行をしたい場合

page_content.each_line do |lines| 

lineslineと呼びます。それは単なる1行です。

あなたは

lines.each_line do |line| 

を呼び出すとループが全く必要とされていないので、あなたは、オーバーちょうど1行の「それぞれ」の行を反復します。

あなたのコードは次のようになります。

require 'net/http' 

def open(url) 
    Net::HTTP.get(URI.parse(url)) 
end 

page_content = open('https://virusshare.com/hashes/VirusShare_00000.md5') 

page_content.each_line do |line| 
    puts line if line[0] != "#" 
end 
+0

ありがとうございますが、別の質問があります。行の最初の行を "#"で始まらないようにする方法は?私は今、配列を使用していますが、それはまともな方法ではありません。あなたは私にヒントを与えることができますか? –

+0

私はこの行だけを "2d75cc1bf8e57872781f9cd04a529256"とします。これは出力の最初の行です。 –

+1

@Enderphan:answer updated –

関連する問題