Esta pregunta se basa en una pregunta anterior que encontré en gis.stackexchange: ¿Cómo editar fácilmente los datos de atributos usando Expresiones regulares?
¿Quizás alguien pueda señalarme en la dirección correcta?
Tengo un archivo de formas vectoriales de líneas de contorno. En la tabla de atributos, ya he convertido un campo llamado PIES que consta de datos enteros que contienen valores de elevación a un campo de cadena llamado Etiqueta. Además, agregué con éxito un 'al final de la cadena para que cuando los datos estén etiquetados se lean como pies.
Lo siguiente que intento hacer es insertar una coma entre los dos primeros valores de la cadena solo si la longitud de la cadena es mayor que 4, o para que una coma solo aparezca entre los miles y cientos de dígitos en el campo Etiqueta. La longitud debe ser mayor que 4 porque también estoy contando el '
Mi código hasta ahora es:
case when length( "Label") >4 then regexp_replace( "Label", '^([0-9])+([0-9]{3}\')$','$1 , $2') else "Label" end
sin embargo, la función regexp_replace no parece aceptar las variables de grupo $ 1 $ 2 en el tercer parámetro de la función.
He visto http://docs.python.org/2/library/re.html ya que la expresión regular de la calculadora de campo es de lo que entiendo basado en el uso de expresiones regulares de Python, pero no he podido resolver esto. Quizás lo que intento hacer aún no es posible con esta función en la calculadora de campo en QGIS 1.8 en mac OSX. O lo más probable es que mi sintaxis sea incorrecta, ya que soy un programador novato y algo nuevo en las expresiones regulares.
fuente
Respuestas:
El uso de dos funciones de cadena en la calculadora QGIS en la versión 2.6 Mac OS XI fue capaz de lograr esto. Aquí están los pasos:
Con la calculadora de campo, cree un nuevo campo que sea un tipo de cadena con un ancho relevante.
Ejecute la siguiente expresión para establecer el valor del campo:
concat( format_number( "Field_name" , 0) , '\'')
Esto creó una columna con una cadena formateada como quería, por ejemplo, el número
2000
se formateará2,000'
con el final'
que significa pies.fuente
QGIS ha creado una función llamada
format_number
para abordar esto. Simplemente lo hacesformat_number(12345,0)
para llegar12,345
.fuente
'
a al final del número para representar "pies". ¿Sería capaz de hacer lo siguiente en QGIS con esta función?format_number(12345,0) + "'"
concat(tostring(format_number(12345,0)), "'")
. Primero tendría que convertir el número formateado en una cadena usando latostring
función y luego usar laconcat
función para adjuntar el 'al final.concat( format_number( "Field_name" , 0) , '\'')
Puede agrupar dígitos fácilmente en Python. Aquí hay una función que he usado, que creo que encontré en StackOverflow:
fuente
Para las personas cuya configuración regional no se ajusta a la pantalla de formato deseada,
format_number
no es una solución adecuada. Por ejemplo, en mi sistema francés,format_number(2000)
siempre se muestra2 000
(con un espacio como separador de miles) independientemente de la configuración del idioma QGIS, aunque a veces necesito una pantalla de "estilo inglés", por ejemplo.2,000
.En tales casos, el siguiente enfoque (y algo engorroso) funciona (al menos en QGIS 2.18):
Por supuesto, puede reemplazarlo
','
con el separador de miles que desee. Tenga en cuenta que esta expresión solo funciona con números inferiores a 1,000,000.fuente
En QGIS, la función "número_formato" bajo el menú de cadena en la calculadora de campo reformatea números para ubicar separadores específicos y lugares decimales.
fuente
Es un poco más complicado que eso en QGis. Según este artículo , debe crear su propia definición de función en Python, luego importarla a QGis (esto se puede hacer automáticamente al inicio). Esto puede parecer complicado, ¡pero solo necesitas hacerlo una vez y siempre estará ahí!
Esta es la función que utilicé, basada en dmahr de arriba. No estoy seguro de cómo se trata con las cadenas, ya que modifiqué un poco el código.
Luego guarda eso en .qgis / python, importa el archivo a QGis usando la consola, luego aparecerá en las funciones "Python" en la herramienta de etiquetas.
La expresión que utilicé es: miles_coma ("[field_name]", ',')
fuente
/Applications/QGIS.app/Contents/Resources/python/
?