Tag: 解析

使用mechanize从HTML表中提取数据

首先,这是示例html表: Kangchenjunga 8,586m 28,169ft Nepal/India 1955; G. Band, J. Brown ARGV [0]将具有山的名称(第一个colomn),返回值应该是最后一列,即第一次爬山的人。 所以我需要检查整行第一列是否是ARGV [0],如果是,那么我应该返回没有日期的最后一列。 require ‘mechanize’ p=Mechanize.new.get(‘www.alpineascents.com/8000m-peaks.asp’).body if p.include?(”+ARGV[0]) puts ‘ok’ end 我有以下内容,如果我在html文档的正文中有ARGV [0],则打印“ok”。 如何搜索找到ARGV [0]的同一行的最后一列? 示例: GIVE THIS AS A PARAMETER SKIP THIS SKIP THIS SKIP THIS I WANT IT TO RETURN THIS 我是Ruby的新手

NameError:undefined – 在Ruby 2.1.2中更改了局部变量的解析规则吗?

我得到NameError: undefined local variable or method使用ruby 2.1.2的NameError: undefined local variable or method 正如在这个问题中观察到的,表达式如: bar if bar = true 引发未定义的局部变量错误(假设事先未定义bar ),因为解析器在分配之前会读取bar 。 而且我相信这个表达与以前没有区别: bar if bar = false 两者之间的区别在于主体是否被评估,但是如果遇到未定义的局部变量,则在评估条件之前立即引发错误并不重要。 但是当我在Ruby 2.1.2上运行第二个代码时,它不会引发错误。 它之前是这样吗? 如果是这样,那么解析讨论的内容是什么? 如果没有,Ruby规范是否已更改? 有没有提到这个? 它在1.8.7,1.9.3等中做了什么?

什么是Ruby的快速XML解析器?

我正在使用Nokogiri,它适用于小型文档。 但是对于180KB的HTML文件,我必须通过ulimit -s增加进程堆栈大小,并且解析和XPath查询需要很长时间。 使用库存Ruby发行版有更快的方法吗? 我习惯了XPath,但解决方案不一定需要支持XPath。 标准是: 快写。 快速执行。 强大的结果解析器。

在rails中解析的路径

我正在寻找解析路径路径的方法,如下所示: ActionController::Routing.new(“post_path”).parse #=> {:controller => “posts”, :action => “index”} 它应该与url_for相反 UPD 我发现: Rails中url_for的反义词是什么? 获取路径并生成解释路线的函数? ActionController::Routing::Routes.recognize_path(“/posts”) 所以现在我需要将posts_path转换为“/ posts”

在Ruby中解析街道地址

我正在将地址处理为它们各自的数据库字段格式。 我可以得到房屋号码和街道类型,但试图确定最好的方法来获得没有数字和最后一个字的街道。 收到的标准街道地址是: res[:address] = ‘7707 Foo Bar Blvd’ 截至目前,我可以解析以下内容: house = res[:address].gsub(/\D/, ”) street_type = res[:address].split(/\s+/).last 我的第一个挑战是如何获得’Foo Bar’。 请注意,街道名称可以是一个,两个或三个单词。 我正在努力为Ruby找到一个单行表达式解决方案。 我的第二个问题是如何改进“房子”代码来处理最后有alpha的门牌号码。 例如,“7707B”。 最后,如果您可以参考一个好的备忘单,其中包含有助于这些表达的示例。

Ruby 1.9.2 – 读取并解析远程CSV

我正在寻找一种方法来本地读取和解析远程CSV(托管在特定网站上)。 我在互联网上发现了一些有趣的例子,它们使用了FasterCSV,在ruby 1.9.2中已经合并为CSV。 我发现你可以用这种方式使用gems’csv’和’open-uri’来读取远程CSV: require ‘csv’ require ‘open-uri’ def read(url) open(url) do |f| f.each_line do |l| CSV.parse(l) do |row| puts row end end end end 但是当我调用这个函数时,我得到一个例外: ERROR IOError: closed stream 谁能解释我为什么? 有什么不对的吗? 我应该选择其他方法来阅读远程CSV吗? 更新 我到目前为止找到的最佳解决方案是: def read(url) data = [] begin open(url) do |f| data = CSV.parse f end rescue IOError => e # Silently […]

尝试比较两个文本文件,并根据信息创建第三个文本文件

我有两个文本文件,master.txt和926.txt。 如果926.txt中有一行不在master.txt中,我想写一个新文件notinbook.txt。 我写了我能想到的最好的东西,但鉴于我是一个可怕的/新手程序员,它失败了。 这就是我所拥有的 g = File.new(“notinbook.txt”, “w”) File.open(“926.txt”, “r”) do |f| while (line = f.gets) x = line.chomp if File.open(“master.txt”,”w”) do |h| end while (line = h.gets) if line.chomp != x puts line end end end end end g.close 当然,它失败了。 谢谢!

Nokogiri:选择元素A和B之间的内容

让Nokogiri选择start和stop元素之间的所有内容(包括start / stop-element)最聪明的方法是什么? 检查下面的示例代码,了解我在寻找什么: require ‘rubygems’ require ‘nokogiri’ value = Nokogiri::HTML.parse(<<-HTML_END) " A Foo B C Bar D E F F G ” HTML_END parent = value.css(‘body’).first # START element @start_element = parent.at(‘p#para-3’) # STOP element @end_element = parent.at(‘p#para-7’) 结果(返回值)应如下所示 : C Bar D E F F 更新:这是我目前的解决方案,但我认为必须有更聪明的东西: @my_content = “” @selected_node = true def […]

如何使用Nokogiri :: XML :: Reader来解析大型XML文件?

我正在尝试使用Ruby的Nokogiri来解析大型(1 GB或更多)XML文件。 我在一个较小的文件上测试代码, 这里只包含4条记录。 我在Ubuntu 10.10上使用Nokogiri版本1.5.0,Ruby 1.8.7。 由于我不太了解SAX,我正在尝试使用Nokogiri :: XML :: Reader。 我第一次尝试检索PMID标记的内容,如下所示: #!/usr/bin/ruby require “rubygems” require “nokogiri” file = ARGV[0] reader = Nokogiri::XML::Reader(File.open(file)) p = [] reader.each do |node| if node.name == “PMID” p << node.inner_xml end end puts p.inspect 这是我希望看到的: [“21714156”, “21693734”, “21692271”, “21692260”] 这是我实际看到的: [“21714156”, “”, “21693734”, “”, “21692271”, “”, “21692260”, “”] […]

在Ruby中使用Parslet的缩进敏感解析器?

我试图使用Ruby中的Parslet库解析一个简单的缩进敏感语法。 以下是我尝试解析的语法示例: level0child0 level0child1 level1child0 level1child1 level2child0 level1child2 生成的树看起来像这样: [ { :identifier => “level0child0”, :children => [] }, { :identifier => “level0child1”, :children => [ { :identifier => “level1child0”, :children => [] }, { :identifier => “level1child1”, :children => [ { :identifier => “level2child0”, :children => [] } ] }, { :identifier => “level1child2”, :children […]