Как изменить ... (elipses) на ... (три периода) в Ruby? - PullRequest
4 голосов
/ 24 февраля 2012

Я анализирую этот документ , используя nokogiri. Я обнаружил, что на этой странице есть символы (elipses), и их нельзя удалить. Я хочу знать, как использовать Ruby для замены всех (elipses) на ... (три периода).

Кстати, вы можете найти эту строку, чтобы найти все …s

Указывает, будет ли ALTER TABLE

Edit: Я добавил свою программу и сообщение об ошибке.

# encoding: UTF-8
require 'nokogiri'
require 'open-uri'
require 'terminal-table'

def change s
    {Nokogiri::HTML(" ").text => " ", 
     Nokogiri::HTML(""").text => '"',
     Nokogiri::HTML("™").text => '(TM)',
     Nokogiri::HTML("&").text => "&",
     Nokogiri::HTML("&lt;").text => "<",
     Nokogiri::HTML("&gt;").text => ">",
     Nokogiri::HTML("&copy;").text => "(C)",
     Nokogiri::HTML("&reg;").text => "(R)",
     Nokogiri::HTML("&yen;").text => " "}.each do |k, v|
         s.gsub!(k, v)
     end
     s
end

doc = Nokogiri::HTML(open('http://msdn.microsoft.com/en-us/library/ms189782.aspx').read.tr("…","..."))
temp = []
doc.xpath('//div[@class="tableSection"]/table[position() = 1]/tr').each do |e|
    temp << e.css("td, th").map(&:text).map(&:strip).map {|x| x = change x; x.split(/\n/).map {|z| z.gsub(/.{80}/mi, "\\0\n")}.join("\n")}
end

table = Terminal::Table.new
table.headings = temp.shift
table.rows = temp


puts table

Ошибка:

F:\dropbox\Dropbox\temp>ruby nokogiri.rb
nokogiri.rb:21: invalid multibyte char (UTF-8)
nokogiri.rb:21: invalid multibyte char (UTF-8)
nokogiri.rb:21: syntax error, unexpected $end, expecting ')'
...ary/ms189782.aspx').read.tr("í¡","..."))
...                               ^

F:\dropbox\Dropbox\temp>

Ответы [ 3 ]

5 голосов
/ 24 февраля 2012

Возможно, это зависит от кодировки файла, с которым вы работаете, но попробуйте использовать

"\u2026"

для односимвольных 3-х точек, иначе " горизонтальный многоточие " (тот, который вы хотите заменить).

4 голосов
/ 24 февраля 2012
"It was a dark and stormy night…".gsub("…", "...")
0 голосов
/ 24 февраля 2012

Сначала я бы просто натолкнул на него строку # tr.

open("http://msdn.microsoft.com/en-us/library/ms189782.aspx").read.tr("…","...")

И на этом запустил Nokogiri ...

...