程式碼其實相當簡單
import random
random.random()
那問題出在哪?出在當初的檔名取名為 random.py 結果造成 Python 在 import 的時候造成問題。所以在取名Python 的檔名時,切記不要取成跟 Default Module 一樣的名字!
Min's 程式隨筆
2020年6月14日 星期日
2018年5月15日 星期二
Regular Expression in Search and Replace in VIM
目標 : 把原本的特訂字串變成大寫
輸入範例 :
#define ChipEndAddr_L 0x0197
#define PAGE0 0x0198
希望得到的輸出 :
#define CHIPENDADDR_L 0x0197
#define PAGE0 0x0198
命令如下
%s/#define\s\+\([a-zA-Z0-9_]\+\)/#define\ \U\1/g
解釋
%s 指要搜尋取代的範圍是整個檔案
搜尋的字串以 #define 起頭
接著\s\+ 代表的是 \s 泛指空白的字元例如 tab, space, \+ 指的是出現至少一次
接著出現 用 \( 以及\) 包裹住的代表之後可以存入變數的字串
被\( ... \) 包圍住的是 [a-zA-Z0-9_]\+ 也就是a 到 z, A 到 Z, 0 到 9, 還有底線隨便的字元組合
接著用 / 之後是指要替換的字串, #define 加一個空白
接著 \U 代表的是把之前找到的 \( ... \) 包圍的字串改成大寫, 這個字串用 \1 代表
如果之前在尋找的規則中有兩個以上的 \( ... \) 那數字代碼就是遞增 例如 \2
/g 代表的就是不只替代一行
輸入範例 :
#define ChipEndAddr_L 0x0197
#define PAGE0 0x0198
希望得到的輸出 :
#define CHIPENDADDR_L 0x0197
#define PAGE0 0x0198
命令如下
%s/#define\s\+\([a-zA-Z0-9_]\+\)/#define\ \U\1/g
解釋
%s 指要搜尋取代的範圍是整個檔案
搜尋的字串以 #define 起頭
接著\s\+ 代表的是 \s 泛指空白的字元例如 tab, space, \+ 指的是出現至少一次
接著出現 用 \( 以及\) 包裹住的代表之後可以存入變數的字串
被\( ... \) 包圍住的是 [a-zA-Z0-9_]\+ 也就是a 到 z, A 到 Z, 0 到 9, 還有底線隨便的字元組合
接著用 / 之後是指要替換的字串, #define 加一個空白
接著 \U 代表的是把之前找到的 \( ... \) 包圍的字串改成大寫, 這個字串用 \1 代表
如果之前在尋找的規則中有兩個以上的 \( ... \) 那數字代碼就是遞增 例如 \2
/g 代表的就是不只替代一行
2017年10月19日 星期四
Catch exit code in bash shell script
The key variable is $?
Example code :
Example code :
#!/bin/bash
./execute_some_script.sh
if (( $? == 0 ))
then
echo "the script in script was executed successfully."
else
echo "the script in script was failed !"
fi
Also a tip for comparing variable as numeric is " if (( $var op $another_var_or_number )) "
2017年10月16日 星期一
String index V.S. Array index in Delphi
I'm used to develop code in C, however someday I meet the need which the code was written in Delphi.
The amazing fact in Delphi is the index on array and string differs ! This is really shock, it shocked me almost put hands in my mouth. 嚇得我吃手手...
也就是說如果有一個變數被設為 String 例如說 S:=Foo.Bar().AsString;
如果要存取 S 的第一個字元要使用 S[1] 才會是正確的字元。
The amazing fact in Delphi is the index on array and string differs ! This is really shock, it shocked me almost put hands in my mouth. 嚇得我吃手手...
In Delphi, Strings are 1-indexed, but arrays are 0-indexed.
如果要存取 S 的第一個字元要使用 S[1] 才會是正確的字元。
If S is assigned as a string variable, the first character would be S[1] not S[0];
2017年10月12日 星期四
如何找出資料庫中的表格還有建立日期?
很簡單,要去 INFORMATION_SCHEMA 撈資料
以某次應用,每個月都會新增一張表格,而前端網頁會選擇最近期三筆新增的表格,讓使用者做選擇。這時候下的語法就是
當然這樣的語法撈出來的是所有的 table 但是做完查詢後,不論是用 perl 還是 PHP 就可以撈出來前三筆資料知道是最近三筆新增的 table。
SELECT create_time FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = '資料庫名稱'
AND table_name = '表格名稱'
以某次應用,每個月都會新增一張表格,而前端網頁會選擇最近期三筆新增的表格,讓使用者做選擇。這時候下的語法就是
SELECT TABLE_NAME,create_time FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA="資料庫" \
ORDER BY create_time DESC;
當然這樣的語法撈出來的是所有的 table 但是做完查詢後,不論是用 perl 還是 PHP 就可以撈出來前三筆資料知道是最近三筆新增的 table。
2017年8月23日 星期三
MySQL : Fetch Table one by one without fixed index
需求 : 從一張 table 逐筆把資料拉出來, 實現 Delphi ADO 的 Table.FieldByName( field ) 加上 Table.next
假如一張 table 有個連續、正常的 index field 沒有中斷,那麼要循序存取資料還算容易使用
先找出所有的資料筆數
然後使用 index 欄位一筆筆往下抓, 靠外部把 XX 遞增到資料筆數。可是要是 index 已經爛掉了, 不論是有跳號、還是重複號碼, 那就要使用 ORDER 搭配 OFFSET
假如一張 table 有個連續、正常的 index field 沒有中斷,那麼要循序存取資料還算容易使用
SELECT COUNT(*) FROM Table_Name;
先找出所有的資料筆數
SELECT field FROM Table_Name where index=XX
然後使用 index 欄位一筆筆往下抓, 靠外部把 XX 遞增到資料筆數。可是要是 index 已經爛掉了, 不論是有跳號、還是重複號碼, 那就要使用 ORDER 搭配 OFFSET
SELECT field FROM Table_Name ORDER BY index ASC LIMIT 1 OFFSET %d
2017年8月18日 星期五
Delphi : record v.s. "packed" record
簡單結論 record 會依據結構 ( record )中最長的變數做 Alignment ,然而 packed record 不會。結果就是 packed record 佔的記憶體空間可能比 record 來的少。
範例
結果
Default record size = 20
Packed record size = 14
P.S. I didn't compile this code, I don't know why the size is 20 and 14. But the concept is reasonable.
範例
type // Declare an unpacked record TDefaultRecord = Record name1 : string[4]; floater : single; name2 : char; int : Integer; end; // Declare a packed record TPackedRecord = packed Record name1 : string[4]; floater : single; name2 : char; int : Integer; end; var defaultRec : TDefaultRecord; packedRec : TPackedRecord; begin ShowMessage('Default record size = '+IntToStr(SizeOf(defaultRec))); ShowMessage('Packed record size = '+IntToStr(SizeOf(packedRec))); end;
結果
Default record size = 20
Packed record size = 14
P.S. I didn't compile this code, I don't know why the size is 20 and 14. But the concept is reasonable.
訂閱:
文章 (Atom)
Python TypeError: 'module' object is not callable
程式碼其實相當簡單 import random random.random() 那問題出在哪?出在當初的檔名取名為 random.py 結果造成 Python 在 import 的時候造成問題。所以在取名Python 的檔名時,切記不要取成跟 Default Module...