2011-06-14 1 views
0

Quand je lance ces trois lignes en irb il fonctionnePourquoi cette séquence de code me sort-elle de la boucle dans un programme ruby?

date="02 Jul 2008, 08:41" 
d=Date.strptime(date, "%d %b %Y, %H:%M").iso8601 
Time.parse(d).utc.iso8601 
output=>"2008-07-01T18:30:00Z" 

mais lorsqu'il est utilisé dans une boucle, qui fonctionne très bien sans ces lignes, la boucle désiste après la génération de la sortie de la première étape. le code qui génère la valeur de date est marqué comme nul obtenir le code exemple est le suivant

page_doc = page_doc.xpath('//div[@id="page-body"]').first 
page_doc.xpath('./div').each do |div| 
    author_node=div.xpath('.//p[@class="author"]/strong/a').first 
    if author_node == nil 
    author = "NA" 
    else 
    author = author_node.content.chomp.strip.gsub("Gjest:", "") 
    end 
    author_url_node = div.xpath('.//p[@class="author"]/strong/a/@href').first 
    if author_url_node == nil 
    author_url = "NA" 
    else 
    author_url = @site + author_url_node.content.chomp.strip 
    end 
    date_node = div.xpath('.//p[@class="author"]').first 
    date = SDF::force_ascii(date_node.content.chomp.strip.reverse[0..17].reverse) if date_node 

    content = format_description(div.xpath('.//div[@class="content"]')) 
end 
+1

Pour moi, il n'est pas clair comment vous lier vos deux échantillons de code? La seconde est-elle la boucle sans les premières lignes? Et où placez-vous alors les lignes, avec quelles variables? Ou est le SDF :: force_ascii la méthode effectuant ces 4 premières lignes? – nathanvda

Répondre

0
date_node = div.xpath('.//p[@class="author"]').first 

si div.xpath ('.// p [@ class = "author"]') est vide, date_node est nul.

date = SDF::force_ascii(date_node.content.chomp.strip.reverse[0..17].reverse) if date_node 
# that hurted 
date = SDF:::force_ascii(date_node.content.strip[-17, 17]) 

si date_node est nul, la date = SDF :: force_ascii (date_node.content.chomp.strip.reverse [0..17] .reverse) ne seront pas exécutés.

Questions connexes