pretty code

2024年1月17日 星期三

神奇的正規表示法

每次都覺得正規表示法很神奇,換了一個工具就有該工具的眉角要注意!

最近沒有意外應該都會在 Linux 下工作,sed 是一個很常用的工具,常用來取代檔案的字串用。

sed 和 grep 一樣,有分 BRE 和 ERE 兩種模式,-E 則代表使用 ERE。

昨天看到一篇文章,剛好有個範例可以練習,沒想到一直試不成功。

下午在寫完簡報後,突然福至心靈的解決了,順便記錄一下。

有一個檔案內容如下:

<html><head><title>Hello World</title>
<body>Welcome to the world of regexp!</body></html>

想要使用 sed 取出非 HTML tag 的內容。

原本是使用 BRE 無法成功
sed -n 's/<.*>\([a-zA-Z !]+\)<\/.*>/\1/p' fileName

改使用 ERE 即可
sed -En 's<.*>([a-zA-Z !]+)<\/.*>/\1/p' fileName

Note: 上面的 Rex 似乎要把整行都明確表示出來,否則達不到我們要的效果

2024年1月13日 星期六

星星之火,可以燎原

程式 Bug 就是如此神奇?

快兩個月前發現 Daily Money 因為資料庫筆數已經突破 20,179 筆,導致明細報表無法在既定的時間內完成而產生 ANR。

當時因為忙於交接,故只用最快的方式找到錯誤的地方做點小 patch,但因為沒有仔細研究,所以留下了一個小 Bug,在切換月份的時候日期就會整個錯亂XD

原來 currentDate 是有意義的,當按 Prev() or Next() 時,currentDate 會變動,currentEndDate 也會隨之變動,故我不能重新計算 currentDate 的值!

當初只改 4 行以為解決了 ANR 問題,沒想到也留下一個月報表及年報表的錯誤,果然星星之火可以燎原,雖然現在只要 2 行就可修復。

簡單做了點驗證,希望兩個月後不要再發生其他問題XD

目前資料筆數來到 20,450 筆。


2024/01/15 更新

稍微再多看一點 code,釐清了幾個地方。

totalMode = 1 表示是資產負債表。

currentDate 會在按下 Prev() or Next() or Today() 時改變,接著呼叫 reloadData(),在這裡會重新計算 currentStartDate 和 currentEndDate,也是在這裡面依 totalMode 決定 currentStartDate 是不是 null。

故嚴格來說,兩個月前為了解決 ANR,應該把 patch 改在這裡,比較符合原開發者的意思。

2024年1月4日 星期四

Some tips in Makefile - 003

01. $(XXX:.lib=_.lib)

WRAP_LIBS = abc.lib def.so
$(info $(WRAP_LIBS:.lib=_.lib))

將 XXX 變數裡的 ".lib" 字串變成 "_.lib"

$(patsubst %.lib,%_.lib, $(WRAP_LIBS)))

也可以用 patsubst 函數,但 %_.lib 前面不能有空格,否則被取代的字串前面會多一個空格。