この関数の機能は、指定された英語と中国語の混合文字列をインターセプトし、表示長を 1 に保つことです。それは、1 つの漢字を 2 つの英語の単語として解釈することです。説明: この関数の機能は、指定された英語と中国語の混合文字列をインターセプトし、表示長を 1 に保つことです。それは、1 つの漢字を 2 つの英語の単語として解釈することです。
目的: 通常、インターセプトされた文字列の不均一な挿入を避けるためにタイトル表示リストで使用されます。
プログラムコード
次のようにコードをコピーします。
'//A_strString 処理対象の文字列
'//A_intLen は英語の文字数に基づきます
'//A_strAddString A_strString に文字をインターセプトするときに追加されるサフィックス (... など) がある場合、空にすることができます。
関数 CutString(byval A_strString,byval A_intLen,byval A_strAddString)
薄暗い MM_objRe、MM_objMs、MM_objMh
dimMM_strCut,MM_intLen
setMM_objRe=新しい正規表現
MM_objRe.Global=true'グローバル検索
MM_objRe.IgnoreCase=true' は大文字と小文字を区別しません
MM_objRe.Pattern=[^/x00-/xff]
MM_intLen=A_intLen
len(A_strString)<=A_intLen の場合
MM_strCut=A_strString
それ以外
MM_strCut=left(A_strString,MM_intLen)
set MM_objMs=MM_objRe.execute(MM_strCut)
if MM_objMs.count<>MM_intLen then
MM_objMs の各 MM_objMh について
MM_objMh.FirstIndex<MM_intLen の場合
MM_intLen=MM_intLen-1
それ以外
のために出る
終了する場合
次
それ以外
MM_intLen=MM_intLen/2
終了する場合
MM_strCut=left(A_strString,MM_intLen) & A_strAddString
終了する場合
CutString=MM_strCut
setMM_objRe=何もしない
終了関数
これは、現在インターネットで普及している正規表現とは異なります。非 ANSI 文字を取得するために使用されます (ここでのデフォルトの非 ANSI 文字は中国語です。逸脱がある場合は、目的を達成するために正規表現を変更できます)。 。まず第一に、関数の指定された長さは英語の文字数に基づいていることに注意してください。つまり、英語 10 文字または漢字 5 文字を意味する 10 と指定されます。
2 つの最適化が行われました。
1点目:指定した長さの文字を直接取得する。全漢字でも全英語でも最長は全英語の長さだけであり、それを超える文字は絶対に除外される。
2 番目のポイント: 正規表現を使用して範囲内の漢字を検索し、各漢字の単語数のみを検索することで、ループの数を最小限に抑えることができます。