【Javascript】檔案資料處理

揚
發佈於Err500
2023/12/24閱讀時間約 2 分鐘

案例情境

專案產生大量又瑣碎的作業做處理,眼下要從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. 作為小工具,暫不考慮異常處理,不然實際上會拋出錯誤的地方都要注意。
raw-image
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();


結果

raw-image



10會員
54內容數
遇到的坑、解過的題、新知識的探索、舊時代的遺毒!? 工作後我發現,文件更新往往跟不上新需求的更迭,犯錯的歷史總是不斷重演。因此,我改變了方式,蒐集從程式上、系統上的每一次異常處理過程,好讓再次遇到相同的問題時能快速應變。此專題就是我的錯題本,期待日後不管在工作上或交流上遇到難題,都能輕鬆地應答:有什麼難的,我都踩過。
留言0
查看全部
發表第一個留言支持創作者!