2023-12-24|閱讀時間 ‧ 約 3 分鐘

【Javascript】檔案資料處理

案例情境

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

範例jrxml

範例jrxml


任務

想法:

  1.  把檔案讀取進來
  2.  逐行讀取,篩選特定標籤的那行,加入到要輸出的陣列
  3.  對陣列內容美化(去空白、取必要的參數)

檔案格式已經固定,剩下的部分查一下語法即可作業,分別用三種語言進行實作,順便比較一下其中的差異:

  • Python:沒有太多記憶語法上的負擔,檔案讀寫用不到其他模組的引入,小工具首選
  • Javascript:node均有同步/非同步兩中版本,小工具而言我選擇同步的方法,跟其他後端語言處理的體驗比較接近
  • Go讀寫檔案出來是byte陣列,較多實作細節要注意跟型別轉換


考慮工作上Javascript比較常用,留這版當記錄吧!

處理

  1. 副檔名為.mjs是因為ECMAScript對模組的一些支持做了改變,不想要npm --init建立完整的專案,只想跑個腳本且採用import的寫法。
  2. 讀取檔案的時候以utf-8作為編碼格式,結果為字串。
  3. 處理的內容就回去參照jrxml內的檔案格式,擷取需要的部分輸出成檔案。
  4. 作為小工具,暫不考慮異常處理,不然實際上會拋出錯誤的地方都要注意。
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();


結果



分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.