質問

MS-ExcelおよびMS-Accessで韓国語の単語から最初の文字を抽出する必要があります。Left("한글",1) を使用すると、最初の音節、つまり 한 が返されます。必要なのは最初の文字、つまり ㅎ です。これを行う機能はありますか?それとも少なくともイディオム?

String から Unicode 値を取得する方法を知っていれば、そこから解決できるでしょうが、車輪の再発明になることは間違いありません。(再び)

役に立ちましたか?

解決

私は、あなたが探していることはバイト配列だと思います バイトとして渡されるabyteを()薄暗いです 渡されるabyte = "한글" あなたの文字列の各文字用の2つのUnicode値を与える必要があります。

他のヒント

免責事項:私は、AccessまたはVBAについて少し知っているが、何を持っているのは、一般的なUnicodeの問題であり、それはこれらのツールに固有ではありません。私は、この問題に関連するタグを追加するためにあなたの質問を再びタグ付けます。

アクセスが한返すことで正しいことをやっている、それは確かにその2文字の文字列の最初の文字です。あなたがここに欲しいのは「分解」のために、また、正規化形式D(NFD)として知られているその構成字母、このハングルのの正規の分解のです。 NFDフォームが한、最初の文字が何をしたいとなっているです。

注また、あなたの例のように、あなたは関数がJAMOのための同等のハングルを(ㅎ)戻したいように見えること(ᄒ) - 彼らは別の意味単位を(表すため、実際には2つの異なるコード・ポイントがある本格的なハングル音節、またはハングルの一部)。字母の数が数十(実際の作業は、最初の関数でNFDを行われている)に制限されているとして、前者から後者への何の事前定義されたマッピングはありません、あなたは、その旨を小さな関数を記述することができます。

Arthur の素晴らしい回答に加えて、ハングル音節からのハモの抽出は標準から非常に簡単であることを指摘したいと思います。このソリューションは Excel や Access に固有のものではありません (Python モジュールです) が、算術式のみが含まれるため、他の言語にも簡単に翻訳できるはずです。見てわかるように、式は、本書の 109 ページのものと同じです。 標準. 。分解は次のタプルとして返されます。 整数 エンコードされた文字列。 ハングル Jamo コード表.

# -*- encoding: utf-8 -*-

SBase = 0xAC00
LBase = 0x1100
VBase = 0x1161
TBase = 0x11A7
SCount = 11172
LCount = 19
VCount = 21
TCount = 28
NCount = VCount * TCount


def decompose(syllable):
    global SBase, LBase, VBase, TBase, SCount, LCount, VCount, TCount, NCount

    S = ord(syllable)
    SIndex = S - SBase
    L = LBase + SIndex / NCount
    V = VBase + (SIndex % NCount) / TCount
    T = TBase + SIndex % TCount

    if T == TBase:
        result = (L,V)
    else:
        result = (L,V,T)

    return tuple(map(unichr, result))

if __name__ == '__main__':
    test_values = u'항가있닭넓짧'

    for syllable in test_values:
        print syllable, ':',
        for s in decompose(syllable): print s,
        print

これは私のコンソールの出力です:

항 : ᄒ ᅡ ᆼ
가 : ᄀ ᅡ
있 : ᄋ ᅵ ᆻ
닭 : ᄃ ᅡ ᆰ
넓 : ᄂ ᅥ ᆲ
짧 : ᄍ ᅡ ᆲ

私はあなたが必要なものだと仮定し、それはかなり複雑なようです。私はこのことについて何も知りませんが、最近いくつかは、Unicodeを扱うの調査でした、そして、そのようなLeftB()、RightB()、INPUTB()、INSTRB()、LENB()、ASCBなど、すべての文字列のバイト機能、に見えました()、ChrB()およびMIDB()、およびvbUnicode引数を持っては、StrConv()は、もあります。これらは私が任意のダブルバイトのコンテキストで使用されるだろうと思うだろうが、非常に重要な何かが足りない可能性がありますので、その後、私はその環境では動作しませんすべての機能です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top