案例情境
專案產生大量又瑣碎的作業做處理,眼下要從iReport的設定檔(jrxml)擷取每一項套印參數出來,提供給別人做Excel公式的資料表進行作業。

範例jrxml
任務
想法:- 把檔案讀取進來
- 逐行讀取,篩選特定標籤的那行,加入到要輸出的陣列
- 對陣列內容美化(去空白、取必要的參數)
檔案格式已經固定,剩下的部分查一下語法即可作業,分別用三種語言進行實作,順便比較一下其中的差異:
- Python:沒有太多記憶語法上的負擔,檔案讀寫用不到其他模組的引入,小工具首選
- Javascript:node均有同步/非同步兩中版本,小工具而言我選擇同步的方法,跟其他後端語言處理的體驗比較接近
- Go讀寫檔案出來是byte陣列,較多實作細節要注意跟型別轉換
考慮工作上Javascript比較常用,留這版當記錄吧!
處理
- 副檔名為.mjs是因為ECMAScript對模組的一些支持做了改變,不想要npm --init建立完整的專案,只想跑個腳本且採用import的寫法。
- 讀取檔案的時候以utf-8作為編碼格式,結果為字串。
- 處理的內容就回去參照jrxml內的檔案格式,擷取需要的部分輸出成檔案。
- 作為小工具,暫不考慮異常處理,不然實際上會拋出錯誤的地方都要注意。

import { readFileSync, writeFileSync } from "node:fs";
function main() {
const file = readFileSync("temp.jrxml", "utf-8");
const output = process(file);
writeFileSync("output.txt", output, "utf-8");
}
function process(file) {
return file
.split("\n")
.filter(line => line.includes("fieldDescription"))
.map(line =>line.substring(line.indexOf("DATA[") + 5, line.indexOf("]]")))
.join("\n");
}
main();
結果
