Frage

Notwendigkeit, die ersten Zeichen von einem koreanischen Wort in MS-Excel und MS-Access zu extrahieren. Wenn ich Left ( „한글“, 1) es wird die erste Silbe d.h 한 zurückkehren, was ich brauche, ist das erste Zeichen d.h ㅎ. Gibt es eine Funktion, dies zu tun? oder wenigstens ein Idiom?

Wenn Sie wissen, wie den Unicode-Wert aus dem String I zu bekommen wäre in der Lage, es zu arbeiten, von dort aus, aber ich bin sicher, würde ich das Rad neu zu erfinden werden. (Noch einmal)

War es hilfreich?

Lösung

Ich denke, was Sie suchen ein Byte-Array ist Dim aByte () als byte aByte = "한글" geben Sie sollten die beiden Unicode-Werte für jedes Zeichen in der Zeichenfolge

Andere Tipps

Disclaimer: Ich weiß wenig über Access oder VBA, aber was Sie haben ist ein generisches Unicode Problem, es auf diese Tools nicht spezifisch ist. Ich retagged Ihre Frage Tags zu diesem Problem hinzuzufügen.

Der Zugriff ist das Richtige zu tun durch die Rückkehr 한, es ist in der Tat das erste Zeichen dieser Zwei Zeichenkette. Was Sie hier wollen, ist die kanonische Zerlegung dieses hangul in seiner konstituierenden Jamos, die auch als Normalisierungs Form D (NFD) bekannt, für „zerlegt“. Die NFD Form ist ᄒ ᅡ ᆫ, von denen das erste Zeichen ist das, was Sie wollen.

Beachten Sie auch, dass nach Ihrem Beispiel, Sie scheinen eine Funktion zu wollen, das Äquivalent hangul zurückzukehren (ㅎ) für die jamo (ᄒ) - es gibt wirklich zwei unterschiedliche Codepunkte, da sie unterschiedliche semantische Einheiten darstellen (ein vollwertiges Hangul-Silben oder ein Teil einer Hangul). Es gibt keine vordefinierte Abbildung von dem ersteren zu dem letzteren, könnten Sie eine kleine Funktion in diesem Sinne schreiben, da die Anzahl der Jamos auf ein paar Dutzend begrenzt ist (die eigentliche Arbeit in der ersten Funktion erfolgt, NFD).

Zusätzlich zu Arthurs ausgezeichneten Antwort, ich mag darauf hinweisen, dass jamo aus hangeul Silben Extraktion aus dem Standard sehr einfach ist. Während die Lösung nicht spezifisch für Excel oder Access (es ist ein Python-Modul) ist, es handelt sich nur um arithmetische Ausdrücke, also sollte es leicht in andere Sprachen übersetzt werden. Die Formeln, wie man sehen kann, sind identisch mit denen in Seite 109 des Standard . Die Zersetzung wird als Tupel von zurück ganzen Zahlen kodierten Strings, die leicht zu entsprechen der Jamo-Code-Diagramm .

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

Dies ist die Ausgabe in meiner Konsole:

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

Ich nehme an, Sie bekommen, was man braucht, aber es scheint ziemlich gewunden. Ich weiß nichts darüber, aber vor kurzem hat der Umgang mit Unicode einige untersuchen, und in allen String-Byte-Funktionen sah, wie LeftB (), RECHTSB (), InputB (), InStrB (), LenB (), AscB (), ChrB () und MidB (), und es gibt auch StrConv (), die ein vbUnicode Argument hat. Diese sind alle Funktionen, dass ich denken würde, wäre in jedem Doppel-Byte-Kontext verwendet werden, aber dann, ich weiß nicht Arbeit in dieser Umgebung so könnte etwas sehr Wichtiges fehlen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top