[問題] 1.8.7 的讀檔與正規表達式 Regexp
解決了 @@"" 情況如最末端補充
環境: 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
推
04/26 19:31, , 1F
04/26 19:31, 1F
※ 編輯: hpo14 來自: 123.204.46.87 (04/26 19:34)
→
04/26 19:35, , 2F
04/26 19:35, 2F
→
04/26 19:36, , 3F
04/26 19:36, 3F
→
04/26 19:47, , 4F
04/26 19:47, 4F
→
04/26 19:48, , 5F
04/26 19:48, 5F
剛剛發現 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)
→
04/26 20:15, , 6F
04/26 20:15, 6F
原來在 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)
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章