[問題] 1.8.7 的讀檔與正規表達式 Regexp

看板Ruby作者 (雨)時間11年前 (2013/04/26 19:28), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串1/1
解決了 @@"" 情況如最末端補充 環境: 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
在 irb 跑有成功?
04/26 19:31, 1F
※ 編輯: hpo14 來自: 123.204.46.87 (04/26 19:34)

04/26 19:35, , 2F
不好意思,請問 irb 是? (碰 ruby 才 2 天) @@
04/26 19:35, 2F

04/26 19:36, , 3F
irb -v #-> irb 0.9.5(05/04/13)
04/26 19:36, 3F

04/26 19:47, , 4F
irb裡可以輸入ruby並執行
04/26 19:47, 4F

04/26 19:48, , 5F
話說你的檔案要不要加上# encoding: big5
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)
文章代碼(AID): #1HUcJA-- (Ruby)
文章代碼(AID): #1HUcJA-- (Ruby)