2017-03-22 2 views
0

Je souhaite imprimer les lignes de la page de contenu d'un site Web qui ne commencent pas par le symbole "#".Renvoyer les lignes qui n'ont pas de symbole donné dans Ruby

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 

Résultat attendu:

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

Il fonctionne lorsque je tente d'imprimer les lignes qui commencent par "#":

lines[0] != "#" 

Mais il ne fonctionne pas dans le sens inverse.

+0

contiennent ou commencer? Essayez 'if lines.include? "#" ' –

+0

Edité, merci. il commence par @ WiktorStribiżew –

+0

@ WiktorStribiżew Je préfère faire avec le début :) –

Répondre

2

Vous pouvez simplement utiliser un mélange de reject et :

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?('#') } 

Il produit:

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

Si vous voulez juste la première ligne:

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

Notes de

page_content.each_line do |lines| 

lines doit être appelé line. C'est juste une ligne.

Lorsque vous appelez

lines.each_line do |line| 

Vous itérer sur « chaque » ligne d'une seule ligne, de sorte que la boucle ne soit pas nécessaire du tout.

Votre code pourrait être:

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

Merci beaucoup, mais j'ai une autre question. Comment puis-je prendre la première ligne de la ligne ne commence pas par "#" ?. J'utilise array maintenant, mais ce n'est pas une manière décente de le faire. Pouvez-vous me donner un indice? –

+0

Je veux juste prendre cette ligne seulement "2d75cc1bf8e57872781f9cd04a529256". c'est la première ligne de la sortie. –

+1

@Enderphan: réponse mise à jour –