Pregunta

Necesidad de extraer el carácter inicial de una palabra coreana en MS-Excel y MS-Access. Cuando uso Izquierda ( "한글", 1) se volverá la primera sílaba es decir 한, lo que necesito es el carácter inicial es decir ㅎ. ¿Hay una función para hacer esto? o al menos un idioma?

Si sabe cómo obtener el valor Unicode de la cadena que sería capaz de resolverlo desde allí, pero estoy seguro de que sería reinventar la rueda. (Otra vez)

¿Fue útil?

Solución

Creo que lo que busca es una matriz de bytes Dim aByte () como byte aByte = "한글" debe darle los dos valores Unicode para cada carácter de la cadena

Otros consejos

Renuncia: Sé muy poco acerca de Access o VBA, pero lo que tienes es un problema genérico Unicode, no es específica a esas herramientas. Me reetiquetado su pregunta para añadir etiquetas relacionadas con este tema.

El acceso está haciendo lo correcto al regresar 한, es de hecho el primer carácter de esa cadena de dos caracteres. Lo que se quiere aquí es el descomposición canónica de este hangul en sus constituyentes jamos, también conocido como el formulario de normalización D (NFD), para “descompuesto”. La forma NFD es ᄒ ᅡ ᆫ, de los cuales el primer carácter es lo que desea.

Tenga en cuenta también que según su ejemplo, parece que quieres una función para devolver el hangul equivalente (ㅎ) para el jamo (ᄒ) - en realidad hay dos puntos de código diferentes, ya que representan diferentes unidades semánticas (una de pleno derecho sílaba hangul, o una parte de un hangul). No hay ninguna asignación predefinida de la primera a la segunda, se podría escribir una pequeña función en este sentido, como el número de Jamos se limita a unas pocas docenas (el verdadero trabajo se hace en la primera función, NFD).

La adición a la excelente respuesta de Arthur, quiero señalar que la extracción de jamo de sílabas hangeul es muy sencillo de la norma. Mientras que la solución no es específico de Excel o Access (que es un módulo de Python), sólo se trata de expresiones aritméticas por lo que debe ser fácilmente traducido a otros idiomas. Las fórmulas, como puede verse, son idénticas a las de la página 109 de la href="http://unicode.org/versions/Unicode5.2.0/ch03.pdf" . La descomposición se devuelve como una tupla de números enteros cadenas codificadas, que puede ser fácilmente verificada para corresponder a la Hangul Código Jamo Chart .

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

Esta es la salida en mi consola:

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

Asumo que tienes lo que necesitabas, pero parece más bien complicado. No sé nada de esto, pero hace poco hice una pequeña investigación de manejar Unicode, y miraba en todas las funciones de cadena de bytes, como IZQUIERDAB (), DERECHOB (), InputB (), InStrB (), LongitudB (), AscB (), ChrB () y MIDB (), y también hay ConvCadena (), que tiene un argumento vbUnicode. Estas son todas las funciones que yo creo que sería utilizado en cualquier contexto de doble byte, pero entonces, yo no trabajo en ese ambiente tan podría estar perdiendo algo muy importante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top