4 votos

¿Mover el "apellido" del último al primero en la tabla de atributos de ArcGIS Desktop?

¿Cómo se consigue Por ejemplo "John D. Doe" a "Doe, John D." en la TA utilizando VB Scripting sin pasar individualmente por cada línea? Estoy utilizando ArcGIS 9.3.

Debo señalar que no todos los nombres son iguales, sino que son diferentes. ¿Es posible seleccionar los de la columna con nombres diferentes y simplemente invertir el "nombre, apellido" a "apellido, nombre"?

5voto

user2013 Puntos 2301

Una opción sería utilizar la calculadora de campo. Sí que pasa por cada línea, pero no sé si entiendo cómo lo harías sin iterar por la tabla de alguna manera. No soy bueno en VB script, pero puedes usar el Dividir para separar basándose en el primer espacio de la cadena (suponiendo que todos los nombres siguen esa estructura), y debería ser algo así:

EDIT: Disculpas al cartel inicial, en realidad lo entendí todo mal. Aquí está mi mejor intento de un VB script que pondrá la última palabra en una cadena delimitada por espacios al principio con una coma y luego añadir el resto, pero estoy recibiendo un error de sintaxis. Si puedes encontrarlo, por favor edita esto para que sea correcto. Hasta entonces, seguiré dándole vueltas al asunto.

Function switchpos(ByVal theString As String) As String
    Dim theArray() As String
    Dim theFinal as String
    theArray() = Split(theString, " ", -1)
    For i = LBound(theArray) To UBound(theArray)-1
        theFinal = theFinal & theArray(i)
    Next
    switchpos = theArray(UBound(theArray)) & ", " & theFinal
    Return switchpos
End Function

Todavía estoy trabajando en un buen método para conseguir sumar el resto de las cadenas variables. Si quieres un método rápido en python, introduce lo siguiente en tu Codeblock:

def nameswitch(theString):
names = theString.Split()
b = ""
for name in names:
    if(name == names[-1]):
        continue
    b = b+name+" "
return names[-1]+", "+b

Y pon esto en el bloque de ejecución:

namswitch([FIELD])

El código anterior tomó el valor de la Tabla STOCK LN FREEDOM y devuelto FREEDOM, STOCK LN .

¿Es eso lo que buscas?

0 votos

Hay dos problemas con esto: en primer lugar, la cadena sólo se dividirá en la primera aparición del delimitador (es decir, "John D. Doe" se dividiría en "John" y "D. Doe"), lo que no es útil en el caso de Zoran; en segundo lugar, no estás cambiando el orden de los componentes de la cadena, sino simplemente insertando una coma después del primer componente.

0 votos

¡Oh, mi error! De alguna manera, lo leí completamente mal. Déjame arreglarlo.

0 votos

Ya lo tengo, Split( [ADDR_SN]," ",2)(0) & ", " & Split( [ADDR_SN], " ",2)(1) - He cambiado el (0) por el (1) -- (1) por el (0)

3voto

Jon M Puntos 206

Si es lo suficientemente afortunado como para que todos los nombres tengan el formato "Nombre M. Apellido", podrá utilizar ". " como delimitador, y utilizar la siguiente expresión en la calculadora de campos:

Split( [NAME],". ")(1) & ", " & Split( [NAME], ". ")(0) & "."

Sin embargo, si los nombres no están todos en ese mismo formato, necesitarás un método más complejo como el revisado por Nathanus.

1voto

Azim Puntos 4541

Intenta esto. Puede que se me haya escapado algo, pero he intentado tener en cuenta la sección "Medio".

Prelógica del bloque de código:

def swapNames(name):
    nameList = name.split()
    first = nameList[0]
    middle = nameList[1:-1]
    last = nameList[-1]
    z = ""
    for n in middle:
        z += n + " "

    return str(last) + ", " + str(first) + " " + str(z)

Sección inferior

swapNames( !nameTest!)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X