4 votos

Eliminar los primeros n caracteres de la etiqueta utilizando el constructor de expresiones de etiquetas de ArcGIS 10 con VBscript

Tengo un conjunto de datos del catastro de planificación. Tiene el tipo de plan (DP, RP o SP) y luego el número de plan, así:

DP123456
RP1248590000
SP3855
etc...

Quiero hacer una etiqueta en el constructor de expresiones en ArcGIS 10 que omita los dos primeros caracteres y sólo tenga el número del plan. En su totalidad, esto es lo que he hecho:

left([planlabel],2)&vbnewline&left([planlabel],len([planlabel]-2))&vbnewline& [lotnumber] 

Puedes ver aquí que estoy haciendo una etiqueta apilada que pondrá el tipo de plan en la primera fila (siempre son los dos primeros caracteres de [planlabel] y luego la segunda fila tiene el número de plan, seguido de [lotnumber] en la última línea.

En Excel, la indexación de cadenas de este tipo se consigue aparentemente mediante CELL,len(CELL-2) y esperaba que lo mismo ocurriera con VBscript en ArcGIS, pero aparentemente no es así.

¿Alguna pista?

0 votos

Def FindLabel ( [FACID] ): return [FACID] [2:] ![introduzca aquí la descripción de la imagen](https://i.stack.imgur.com/VTtxq.jpg) \ Esto no funciona. Me sale este error:

0 votos

Esto no responde realmente a la pregunta. Si tiene otra pregunta, puede formularla haciendo clic en Preguntar . También puede añadir una recompensa para llamar más la atención sobre esta cuestión una vez que tenga suficiente reputación . - De la revisión

5voto

sker Puntos 2670

Esto se puede hacer de forma muy sencilla en Python, seleccionando el parser de Python y luego marcando la casilla avanzada. El código siguiente hace lo que se intentó hacer en VBScript, utilizando \n como carácter de nueva línea y la potente indexación de cadenas de Python:

def FindLabel ( [planlabel], [lotnumber]  ):
   return [planlabel][:2] + '\n' + [planlabel][2:] + '\n' + [lotnumber]

Para hacer esto en VBScript el bloque de código sería el siguiente, de nuevo marcando la casilla avanzada:

Function FindLabel ( [planlabel], [lotnumber]  )
  FindLabel = left([planlabel],2) & vbnewline & mid([planlabel],3,len([planlabel])) & vbnewline & [lotnumber] 
End Function

Esto utiliza el mid para llevar el carácter 3 al final de la cadena, definida mediante la función len() que da la longitud de la cadena. Espero que estés de acuerdo en que la sintaxis de python es mucho más limpia, pero ambas tienen el mismo resultado.

Editar:

Para completar, para que esta respuesta pueda ser utilizada como referencia para las personas que utilizan Javascript, aquí está la misma función de etiqueta en Javascript, de nuevo marque la casilla avanzada:

function FindLabel ( [planlabel], [lotnumber] )
{
  return [planlabel].substring(0,2) + '\n' +[planlabel].substring(2,[planlabel].length) + '\n' +  [lotnumber];
}

5voto

Mashimom Puntos 21

Puedes probar

mid([planlabel],3,100)

y te devolverá tantos caracteres como tengas después del 2º carácter (hasta el 100º)

o, mid([planlabel],3,len([planlabel]))

0 votos

Esto me resultó muy útil cuando intenté mostrar los nombres de las autopistas interestatales. Gracias.

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