[Gvsig_usuarios] rellenar campos con una sintaxis string

pau maudos bonjoch pau.maudos en gmail.com
Lun Nov 19 10:04:32 CET 2012


Hola Victor,

muchas gracias por tu respuesta. El script es casi valido, ya que caso de
que haya más de un parentesis me tendria que quedar solo con el primer
conjunto de 3 letras y no consigo plasmarlo en el codigo. Si pudieras
sacarlo me seria clave para conseguirlo.

Aun así  tengo muchas dudas:
mi objetivo inicial era a partir de un shape de poligonos, en el que cada
campo contiene estos codigos, crear otro campo nuevo con el resultado de
las 3 primeras ocurrencias de letras en mayúsculas después de un
paréntesis, y si no hay paréntesis, lo que sea que haya en la cadena.
He provado desde calcular expresion y añadir el script pero gvSIG no lo
detecta, no se immuta...

entonces he visto que ejecutando el script, sí lo has conseguido y el
resultado también seria válido, pero en la ejecución te lo ejecuto en toda
un linia seguida y yo quisiera que me saliera el código del SIOSE,
RESULTADO (salto de linia)
siguiente codigo, resultado
siguiente codigo, resultado

otra cosa como lo has ejecutado, ¿mediante un compliador de Phyton? ¿Cual?

Saludos y gracias de antemano,

Pau

PD: Si a otros usuarios se os ocurre como hacerlo promonerlo!







2012/11/16 Victor Acevedo <vacevedo.gvsig.org en gmail.com>

> El 16/11/12 12:25, pau maudos bonjoch escribió:
>
>  Hola soy Pau
>>
>> Estoy trabajando con el código de SIOSE y quiero rellenar otro campo según
>> una serie de parámetros que cito a posteriormente (un poco más abajo).
>> Este codigo corresponde al SIOSE que catalogó los usos del suelo de
>> España,
>> pero la lió muchisima al querer poner demasiada información en un mismo
>> poligono.
>>
>> El codigo es algo parecido a esto:
>>
>> I(90FDPpl_05FDC_05SNE)
>> AAR(80EDFva_10CHLsc_10PRDsc)
>> A(80MTR_10FDPpl_10SNE)
>> FDPpl
>> A(70FDC_30MTR)
>> AAR(70EDFva_10PRDsc_10CHLsc_**10FDC)
>> A(85FDPpl_10FDC_05SNE)
>> FDC
>> I(40PRDsc_40CHLsc_10FDC_**05EDFva_05VAP)
>> A(60MTR_40FDPpl)
>> I(35EDFvd_35UEN(45ZAU_35EDFvd_**20VAP)_15PAG(55SNE_35EDFnv_**
>> 05OCT_05VAP)_15PRDsc)
>> I(50PST_25ECM(75OCT_15ZAU_**10VAP)_25SNE)
>> A(85CNFpl_15MTR)
>> I(50FDC_40PRDsc_10EDFva)
>> A(60MTR_30PST_10SNE)
>> UEN(40EDFvd_40ZAU_20VAP)
>> NRV(85VAP_15ZAU)
>> A(70MTR_30SNE)
>> I(75PRDsc_25IAS(80EDFnv_20ZEV)**)
>> A(55MTR_30FDC_15SNE)
>> A(80CNFpl_20MTR)
>> I(70FDCfr_30ACU)
>> I(55PRDsc_35MTRpc_05FDPpl_**05SNE)
>> A(65MTRpc_35FDC)
>> AAR(60EDFva_20PRDsc_10CHLsc_**10FDC)
>> A(60FDC_30MTR_10SNE)
>> I(35PRDsc_30LOCsc_25IAS(**50EDFnv_25VAP_20SNE_05ZAU)_**10EDFva)
>> I(40PRDsc_25EDFva_25IAS(**80EDFnv_20VAP)_10UEN(80EDFvd_**20SNE))
>> EDU(35OCT_35SNE_15EDFea_15VAP)
>> I(60AAR(90EDFva_05PRDsc_**05CHLsc)_40PRDsc)
>> I(35PRDsc_20CHLsc_20FDC_**10EDFva_10EDFnv_05VAP)
>> I(80PRDsc_10CHLsc_05FDC_05VAP)
>> AAR(70EDFva_10FDC_10CHLsc_**10PRDsc)
>> I(40MTR_40FDC_20EDFva)
>> FDC
>> I(25AAR(EDFva)_25CHLsc_**25PRDsc_15FDC_10EDFva)
>> I(30PRDsc_30EDFva_20AAR(**90EDFva_05PRDsc_05CHLsc)_**
>> 10UEN(90EDFvd_05ZAU_05VAP)_**05FDC_05LOCsc)
>> PAG(80ZEV_15EDFnv_05VAP)
>> I(65PRDsc_20CHLsc_10VAP_05FDC)
>> I(30PRDsc_30CHLsc_15EDFva_**10MTR_10PAG(80ZEV_20EDFnv)_**05VAP)
>> A(75FDC_15PRDsc_10FDPpl)
>> A(55MTR_40FDPpl_05SNE)
>> A(70MTR_25CNFpl_05SNE)
>> I(65PRDsc_25CHLsc_05FDC_**05EDFva)
>> A(70CNFpl_15FDPpl_15MTR)
>> I(60PRDsc_20CHLsc_10FDC_**05EDFnv_05VAP)
>> I(65PRDsc_15FDC_10MTRct_05VAP_**05EDFva)
>> I(55PRDsc_30FDC_10FDPpl_05VAP)
>> PRDsc
>> I(55EDFva_30PRDsc_15FDC)
>> EDP(60ZAU_15SNE_10EDFea_10VAP_**05OCT)
>> I(65PRDsc_30CHLsc_05SNE)
>> PAG(70ZEV_15ZAU_10EDFnv_05VAP)
>> AAR(65EDFva_30PRDsc_05CHLsc)
>> I(90UEN(75EDFea_10SNE_10VAP_**05ZAU)_10UCS(90EDFva_10ZAU))
>> ...
>> ...
>> ...
>> estos son los codigos que pertenecen a distintos poligonos...
>>
>>
>> cada grupo de tres letras le corresponde un uso distinto.
>> yo quisiera rellenar en otra columna la siguiente operación
>> - haciendo una suma del % del uso predominante (se que este es muy
>> complicado, debido a que el codigo es muy complejo...)
>> - o bién, otro caso que se aproximaria al objetivo es que se muestren en
>> otro campo las tres primeras letras MAYUSCULAS, dentro de cada parentesis
>> si  contienen parentesis, sino las tres que hay en el poligono en
>> cuestion.
>> El problema es que antes del parentesis puedes encontrarte des de una
>> letra
>> o tres.
>>
>> Al final lo deje, el codigo pudo conmigo, si pudieras darle un par de
>> vueltas al asunto me harias un gran favor.
>> Sé que no es tarea fácil, pero seria de muy gran ayuda. Además, pareces
>> que
>> dominas el tema a la perfección.
>>
>> gracias de antemano
>>
>>
>>
>> Pau
>>
>>
>> PD: perdon en el anterior no tenia asunto
>>
>>
>>
>>
>
> Hola Pau,
>
> no he entendido tu primera intención, pero la aproximación
>
>
> > - o bién, otro caso que se aproximaria al objetivo es que se muestren en
> otro campo las tres primeras letras MAYUSCULAS, dentro de cada parentesis
> si  contienen parentesis, sino las tres que hay en el poligono en cuestion.
> El problema es que antes del parentesis puedes encontrarte des de una letra
> o tres.
>
> no es tan complicada mediante un script. Si lo he entendido bien.
> Necesitas las 3 primeras ocurrencias de letras en mayúsculas después de un
> paréntesis, y si no hay paréntesis, lo que sea que haya en la cadena.
>
> Lo que he hecho es copiar los datos que adjuntas en el correo en un
> archivo que he dejado en '/tmp/codigos.txt' y montar el siguiente script.
> Está hecho deprisa y corriendo pero te dará una idea de lo que pudes hacer.
>
> {{{
>
> import re
>
> def main():
>
>   f = file("/tmp/codigos.txt", "r")
>
>   #recorre las lineas del archivo
>   for index, line in enumerate(f.readlines()):
>     print "%s, %s"%(index,line)
>
>     #Si no encuentra un "(" devuelve el codigo
>     if line.find("(") ==-1:
>       print line
>       continue
>     patron = re.compile("[A-Z]{3}")
>     index = 0
>
>     #busca dentro de la linea todos los "("
>     while (line.find("(", index, len(line)) !=-1):
>         index = line.find("(", index, len(line)) +1
>         dd = line[index:]
>
>         #busca las 3 primeras mayusculas en la cadena
>         r=patron.search(dd)
>
>         #si se ha encontrado algo imprime el resultado
>         if r:
>             print r.string[r.start():r.end()]
>
>   file.close()
>
> }}}
>
> El resultado que obtengo de tus datos (10 líneas) es:
>
> 0, I(90FDPpl_05FDC_05SNE)
> FDP
>
> 1, AAR(80EDFva_10CHLsc_10PRDsc)
> EDF
>
> 2, A(80MTR_10FDPpl_10SNE)
> MTR
>
> 3, FDPpl
> FDPpl
>
> 4, A(70FDC_30MTR)
> FDC
>
> 5, AAR(70EDFva_10PRDsc_10CHLsc_**10FDC)
> EDF
>
> 6, A(85FDPpl_10FDC_05SNE)
> FDP
>
> 7, FDC
> FDC
>
> 8, I(40PRDsc_40CHLsc_10FDC_**05EDFva_05VAP)
> PRD
>
> 9, A(60MTR_40FDPpl)
> MTR
>
> 10, I(35EDFvd_35UEN(45ZAU_35EDFvd_**20VAP)_15PAG(55SNE_35EDFnv_**
> 05OCT_05VAP)_15PRDsc)
> EDF
> ZAU
> SNE
>
> Si resulta que tienes la capa cargada en gvSIG 2.0 puedes crearte una capa
> nueva con los resultados. Si estas interesado,dímelo y te mando una
> aproximación.
>
> Te adjunto 3 archivos.
> - los codigos de tu correo en un txt (codigos.txt)
> - los resultados de ejecutar el script usando el archivo anterior
> - el código
>
> Saludos,
> Victor Acevedo
>
>
>  ______________________________**_________________
>> gvSIG_usuarios mailing list
>> gvSIG_usuarios en listserv.gva.es
>>
>> Para ver histórico de mensajes, editar sus preferencias de usuario o
>> darse de baja en esta lista, acuda a la siguiente dirección:
>>
>> http://listserv.gva.es/cgi-**bin/mailman/listinfo/gvsig_**usuarios<http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios>
>>
>>
>
> _______________________________________________
> gvSIG_usuarios mailing list
> gvSIG_usuarios en listserv.gva.es
>
> Para ver histórico de mensajes, editar sus preferencias de usuario o darse
> de baja en esta lista, acuda a la siguiente dirección:
>
> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_usuarios/attachments/20121119/83acd52e/attachment.htm 


Más información sobre la lista de distribución gvSIG_usuarios