作者hpo14 (雨)
看板Ruby
標題[問題] 1.8.7 的讀檔與正規表達式 Regexp
時間Fri Apr 26 19:28:06 2013
解決了 @@"" 情況如最末端補充
環境: Ruby 1.8.7 (iBook G4 with Mac OSX 10.5)
要求:對檔案(html檔, Encoding Big5)做 Regexp 取得我要的 Match Group ( 0 ~ n 個)
我的Regexp如網址內:
http://rubular.com/r/XnsTZI6AEu
已確定我的 Regexp 在 rubular 是可以取得我目標結果的
成功狀況:
手動在 Terminal 下執行時 (黃色同為一行),正確有結果
hpo14:~$ ruby -e
"s = File.open('絕對路徑').read();
m = s.scan(我的正規表達式); puts m"
失敗狀況:
1. 指令存成檔案(如下虛線內),手動 Terminal 執行 .rb 檔
2. 透過 AppleScript 執行 "do shell script xxxx"
(xxx 為成功狀況的 ruby -e 那一整串)
不管是 1 or 2, puts 結果如下,不知道是哪邊問題 @@
puts m #-> 沒結果
puts m.to_a #-> []
puts m.to_s #-> ""
------>8-------
#!/usr/bin/env ruby
s = File.open("檔案絕對路徑").read()
r = /我的Regexp/i #忽略大小寫
m = s.scan(r)
puts m
------>8-------
hpo14:~$ ./test.rb
hpo14:~$
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.204.46.87
1F:推 kusoayan:在 irb 跑有成功? 04/26 19:31
※ 編輯: hpo14 來自: 123.204.46.87 (04/26 19:34)
2F:→ hpo14:不好意思,請問 irb 是? (碰 ruby 才 2 天) @@ 04/26 19:35
3F:→ hpo14:irb -v #-> irb 0.9.5(05/04/13) 04/26 19:36
4F:→ mars90226:irb裡可以輸入ruby並執行 04/26 19:47
5F:→ mars90226:話說你的檔案要不要加上# encoding: big5 04/26 19:48
剛剛發現 text.rb 存檔時
文件編碼設定為 UTF-8, 對 Big-5 編碼的檔案 scan 後 #-> []
BIG-5, 對 Big-5 #-> 成功
UTF-16,對 UTF-16 #-> []
但是在 AppleScript 內接回來的結果,中文變亂碼....
※ 編輯: hpo14 來自: 123.204.46.87 (04/26 20:10)
6F:→ hpo14:我猜應該是編碼問題了 @@" 04/26 20:15
原來在 AppleScript 內的 regex 字串會是 UTF-8 編碼,
然後送到 do shell sciprt 後, 檔案是 Big5 編碼,所以 Regexp 沒結果。
因此我把 Ruby 部份的程式碼改寫成檔案(如上所示),並把 Regex 寫在檔案內
且檔案存成 Big5 編碼。
然後在 AppleScript 內改成如下方式呼叫,同時利用 iconv 將結果轉 UTF-8
(兩行應為同一行)
set Result to
do shell "./test.rb '" & fpath & "'" & " | iconv -t UTF8 -f BIG5"
好處 1. 做正規表達搜尋時,是 Big5 找 Big5, 理論上應該不會有問題
2. iconv 部份可以確保我在 AppleScript 內處理字串時不會因為系統環境設定
的語言而造成編碼問題
※ 編輯: hpo14 來自: 123.204.46.87 (04/26 20:54)
※ 編輯: hpo14 來自: 123.204.46.87 (04/26 20:55)