有些人事薪資系統在輸入 Unicode 字元。如:【堃、伃】等,往往會造成文字在存檔後變成各種問號【?】。
通常這時我們有兩種做法:
- 升級系統
- 自行造字
第一種作法一定要去找原開發商,而開發商也會給兩個答案
- 改,要錢
- 不改 (改不了)
所以一般小公司會選擇第二個作法。
身為最大受災戶的政府機關想必是首當其衝,於是有了官方解決辦法:【全字庫】
接下來當然是造福我們啦!
But!全字庫的安裝說明實在是……還是自己寫一份吧。
有些人事薪資系統在輸入 Unicode 字元。如:【堃、伃】等,往往會造成文字在存檔後變成各種問號【?】。
通常這時我們有兩種做法:
第一種作法一定要去找原開發商,而開發商也會給兩個答案
所以一般小公司會選擇第二個作法。
身為最大受災戶的政府機關想必是首當其衝,於是有了官方解決辦法:【全字庫】
接下來當然是造福我們啦!
But!全字庫的安裝說明實在是……還是自己寫一份吧。
![]() |
| 好的 Free 帶你上天堂 (咦?) 圖片來源 |
![]() |
| 泛型 (Generic) 是程式毒藥還是解藥? 圖片來源 |
作者:吳祐賓
原理:步進對字元計數
// D10 after
function OccurrencesOfChar(const S: string; const C: Char): Integer;
var
Ch: Char;
begin
Result := 0;
// 使用 for-in 迴圈遍歷字串,語法更現代且安全
for Ch in S do
begin
if Ch = C then
Inc(Result);
end;
end;
// D7 or Lazarus
function OccurrencesOfChar(const S: string; const C: char): integer;
var
i: Integer;
begin
result := 0;
for i := 1 to Length(S) do
if S[i] = C then
inc(result);
end;
// Example:
//var LNum = OccurrencesOfChar('Banana', 'a');
//Result LNum is 3
function Occurrences(const Substring, Text: string): Integer;
var
Offset: Integer;
begin
Result := 0;
// 防呆處理:如果子字串為空,直接返回 0,避免無窮迴圈
if (Substring = '') or (Text = '') then
Exit;
// 尋找第一個匹配位置
Offset := Pos(Substring, Text);
while Offset <> 0 do
begin
Inc(Result);
// 從「當前位置 + 子字串長度」繼續往後搜尋
// 使用 Pos 的起始偏移量參數 (Offset + Length)
Offset := Pos(Substring, Text, Offset + Length(Substring));
end;
end;
// Example:
//var LNum = Occurrences('an', 'Banana');
//Result LNum is 2