使用 Google Apps Script 到公開資訊觀測站抓取股利分派情形(https://mops.twse.com.tw/mops/#/web/t05st09_new),
原本排程正常執行,但今天發現上市資料解析 CSV 檔失敗,出現 Could not parse text 錯誤訊息,
但上櫃資料仍可正常解析。
判斷可能是 CSV 檔,出現奇怪格式資料,導致 Utilities.parseCsv 解析失敗。
將 CSV 檔下載下來,用能看見換行符號的文字編輯器打開,觀察是用什麼區別資料列(row)。
如下圖,可看出是 CRLF,即 \r\n
在原程式 Utilities.parseCsv 前,加入以下程式碼,進行逐筆資料解析,找出是哪一筆資料解析錯誤
var lines = csvText.split('\r\n');
for (var i = 0; i < lines.length; i++) {
try {
Utilities.parseCsv(lines[i]);
} catch (e) {
Logger.log("解析失敗發生在第 " + (i + 1) + " 筆資料: " + lines[i]);
}
}
throw new Error("debug....");
執行結果,如下圖,發現是第553筆資料解析出錯,
觀察該筆資料,在資料欄裡出現重複雙引號「""」,
猜測是輸入資料的人員,也在該欄資料前後加上雙引號「"」,但 CSV輸出時沒正確處理導致。
原本只需 replace('""', '"'),但保險點,我選擇多加些前後額外文字比對,最終加入以下程式碼
修改後,即可正常解析
//特例處理
csvText = csvText.replace('",""本公司章程規定年度決算如有盈餘', '","本公司章程規定年度決算如有盈餘');
csvText = csvText.replace('由董事會擬具議案並提請股東會決議。"","', '由董事會擬具議案並提請股東會決議。","');修改後,即可正常解析






沒有留言:
張貼留言