Question

Vous avez besoin d'extraire le premier caractère d'un mot coréen dans MS-Excel et MS-Access. Quand je l'utilise à gauche ( « 한글 », 1), il retourne la première syllabe i.e. 한, est ce que je dois le caractère initial i.e. ㅎ. Y at-il une fonction pour le faire? ou au moins un idiome?

Si vous savez comment obtenir la valeur Unicode de la chaîne que je serais capable de travailler à partir de là, mais je suis sûr que je serais réinventer la roue. (Encore une fois)

Était-ce utile?

La solution

Je pense que ce que vous cherchez est un tableau d'octets Dim aByte () comme octet aByte = "한글" devrait vous donner les deux valeurs unicode pour chaque caractère dans la chaîne

Autres conseils

Disclaimer: Je sais peu de choses sur Access ou VBA, mais ce que vous rencontrez est un problème Unicode générique, ce n'est pas spécifique à ces outils. Je retagged votre question d'ajouter des balises liées à cette question.

L'accès est en train de faire la bonne chose en retour 한, il est en effet le premier caractère de cette chaîne à deux caractères. Ce que vous voulez ici est le décomposition canonique de cette Hangul dans ses jamos constitutifs, également connu sous le formulaire D Normalization (NFD), pour « décomposée ». La forme NFD est ᄒ ᅡ ᆫ, dont le premier caractère est ce que vous voulez.

Notez également que selon votre exemple, vous semblez vouloir une fonction pour retourner le Hangul équivalent (ㅎ) pour le Jamo (ᄒ) - il y a vraiment deux points de code différents, car ils représentent les différentes unités sémantiques (une à part entière syllabe hangûl, ou une partie d'un hangûl). Il n'y a pas de mappage prédéfini de la première à ce dernier, vous pouvez écrire une petite fonction à cet effet, que le nombre de jamos est limitée à quelques dizaines (le vrai travail se fait dans la première fonction, DNF).

Ajout d'une excellente réponse d'Arthur, je tiens à souligner que l'extraction Jamo de syllabes hangeul est très simple de la norme. Bien que la solution ne soit pas spécifique à Excel ou Access (c'est un module Python), il implique que des expressions arithmétiques, il devrait être facile à traduire dans d'autres langues. Les formules, comme on le voit, sont identiques à celles de la page 109 la norme . La décomposition est retourné comme un tuple de entiers chaînes codées, qui peuvent être facilement vérifiées pour correspondre à la balise Hangul Jamo code graphique .

# -*- 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

Ceci est la sortie de la console:

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

Je suppose que vous avez obtenu ce que vous avez besoin, mais il semble plutôt alambiquée. Je ne sais rien à ce sujet, mais a récemment fait quelques recherches de manipulation Unicode et regardé dans toutes les fonctions chaîne d'octets, comme LeftB (), justeB (), InputB (), InStrB (), LenB (), AscB (), ChrB () et MIDB (), et il y a aussi StrConv (), qui a un argument vbUnicode. Ce sont toutes les fonctions que je pense seraient utilisés dans un contexte à deux octets, mais, je ne fonctionnent pas dans cet environnement pourrait donc manquer quelque chose d'important.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top