VB程式: Big5 中文筆劃換算
目的:
- 換算手寫筆劃
- 換算姓名學筆劃
- 列出指定筆劃的中文字
換算手寫筆劃
前置作業:
依「筆劃順序內碼對照表」產生文字檔, 格式為: 筆劃,起始Big5,結束Big5
其中第 1 ~ 57 行為常用與次常用字區; 第 58 ~ 62 行為特殊筆劃
程式邏輯:
將前述檔案讀入成陣列, 把中文字轉成 Big5 碼 (16進位) 後與該陣列進行比對, 即可取得中文字的筆劃數
程式碼:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 dim aryStrokes(61,2)
strName = "劉德華"
i = 0
Open "c:\strokes.txt" For Input As #1
Do Until EOF(1)
Input #1, aryStrokes(i, 0), aryStrokes(i, 1), aryStrokes(i, 2)
i = i + 1
Loop
Close #1
For i = 1 To Len(strName)
strCharacter = Mid(strName, i, 1)
strBig5 = Hex(Asc(strCharacter))
For j = 0 To 56
If strBig5 >= aryStrokes(j, 1) And strBig5 <= aryStrokes(j, 2) Then
intStrokes = CInt(aryStrokes(j, 0))
Exit For
End If
Next j
If Left(strBig5, 3) = "F9D" Then
For j = 57 To 61
If strBig5 >= aryStrokes(j, 1) And strBig5 <= aryStrokes(j, 2) Then
intStrokes = CInt(aryStrokes(j, 0))
Exit For
End If
Next j
End If
strOutput = strOutput & strCharacter & _
" ( " & strBig5 & " ) = " & intStrokes & vbCrLf
Next i執行結果 (strOutput 變數內容):
劉 (BC42) = 15
德 (BC77) = 15
華 (B5D8) = 12程式說明:
01~09 將前述之文字檔讀入陣列: aryStrokes
欲分析的中文字 (strName) 為 "劉德華"10~29 將 strName 裡的中文字逐一算出筆劃, 結果儲存於 strOutput 12 將中文字轉為 Big5 碼 (內碼) 13~18 比對常用與次常用字內碼, 若符合某一範圍條件, 取出該字元的筆劃數為 intStrokes 19~26 若 Big5 前三碼為 "F9D" 則進行特殊筆劃字的比對程序
換算姓名學筆劃
何謂「姓名學筆劃數」? 與前述之「手寫筆劃數」有何不同?
請參考: Yahoo! 雅虎中文星相命理 - 如何計算筆劃?
前置作業:
依「漢字 ee 部首分類」將部首筆劃與手寫筆劃不同的字 (如: 「玲」部首為「玉」, 手寫筆劃為: 9; 姓名學筆劃為: 10) 取出為文字檔 (並剔除部首入字的字元--如: 忐忑, 因筆劃已足), 其中 +1 為手寫筆劃加 1, 依此類推.
接著將該文字檔轉成 Big5 碼資料檔, 格式為: n,Big5 (n = 姓名學筆劃比手寫筆劃多出的筆劃數), 再匯入資料庫中. (如不轉成 Big5, 直接存入中文字亦可)
程式邏輯:
如前述「換算手寫筆劃」程式, 算出手寫筆劃後再與資料庫進行比對, 將手寫筆劃數加上比對出來的 n 值, 即為姓名學筆劃數.
列出指定筆劃的中文字
程式碼:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18 i = 0
intStrokes = 2
Open "c:\strokes.txt" For Input As #1
Do Until EOF(1)
Input #1, aryStrokes(i, 0), aryStrokes(i, 1), aryStrokes(i, 2)
i = i + 1
Loop
Close #1
For i = 0 To UBound(aryStrokes)
If intStrokes = CInt(aryStrokes(i, 0)) Then
For j = CLng("&H" & aryStrokes(i, 1)) To CLng("&H" & aryStrokes(i, 2))
strCharacter = Chr(j)
If strCharacter <> "?" Then
strOutput = strOutput & strCharacter & " "
End If
Next j
End If
Next i執行結果 (strOutput 變數內容):
丁 七 乃 九 了 二 人 儿 入 八 几 刀 刁 力 匕 十 卜 又 乂 乜 凵 匚 厂
程式說明:
02 指定的筆劃數 09~18 搜尋所有符合筆劃條件的資料, 並將結果儲存到 strOutput 10~17 筆劃條件符合時的處理 11~16 列出範圍內 (起始Big5 ~ 結束Big5) 的中文字
其中, CLng( "&H" & Big5 Code ) 係將 16 進位轉 10 進位12 將 10 進位數字轉成中文字 13~15 如果轉出的中文字不為問號, 就將結果中文字存入 strOutput
使用須知
- 以上程式碼適用於 VB6, 主要目的為邏輯備忘. 可依需求修改或調整
- 本頁連結之文字檔係依網路資料編修而成, 如有漏失或謬誤敬請不吝指正
參考資料:
延伸閱讀:
留言列表