Re: [問題] 要做個自動抓基金淨值功能

看板Programming作者時間15年前 (2010/10/06 02:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串6/8 (看更多)
※ 引述《Storm (風)》之銘言: > ※ 引述《theater.bbs@ptt.cc》之銘言: > > 我執行時再次遇到問題 > > D:\Program Files\GnuWin32\bin>wget -O - http://fund.cnyes.com/Detail/historicalN > > av/B08,020.html |awk '/個別基金:start/ {print gensub(/.*"pe r">([0-9]+\.[0-9][0- > > 9])<\/td>.*/,"\\1","") > "a.txt"}' > > 出現這訊息 > > 檔案名稱、目錄名稱或磁碟區標籤語法錯誤。 > 另外我剛剛測試時,發現網頁的標籤有一點變化,gensub() 一開頭的正規表示式 > 要稍微修改一下: > /.*"pe .">([0-9]+\.[0-9][0-9])<\/td>.*/ > ^本來是"r",但是剛剛測試發現這個 class name 會變,改成 "." > 會比較好。 使用 wine 執行 Windows XP 的 cmd.exe 和 GNU Win32 的 wget 和 awk 進行測試後,我想我知道問題在哪了,問題出在 cmd.exe 對「'」單引號 的解釋顯然不是當單引號用,這就會造成一些問題,因為解析 HTML 的正 規表示式中有雙引號,gensub() 函式的字串參數也有用到雙引號,若要把 整個 awk 的參數改用雙引號括起來的話,會讓整個參數變得很醜,不過也 只好這樣啦! 把 awk 的參數修改成這樣試試看: "/個別基金:start/ {print gensub(/.*pe ..>([0-9]+\.[0-9][0-9])<\/td>.*/, \"\\1\",\"g\") > \"a.txt\"}" 簡單的說,要用「\」跳脫 awk 參數內用到的「"」,否則 awk 會收到不完整的 參數而發生錯誤。 -- ※ Origin: SayYA 資訊站 <bbs.sayya.org> ◆ From: c-76-111-34-186.hsd1.ga.comcast.net
文章代碼(AID): #1CgsVrHA (Programming)
文章代碼(AID): #1CgsVrHA (Programming)