[Gvsig_usuarios] rellenar campos con una sintaxis string

Victor Acevedo vacevedo.gvsig.org en gmail.com
Vie Nov 16 20:22:40 CET 2012


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
>

------------ próxima parte ------------
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))
------------ próxima parte ------------
Se ha borrado un mensaje que no está en formato texto plano...
Nombre     : codigos_poligonos2.py
Tipo       : text/x-python
Tamaño     : 1054 bytes
Descripción: no disponible
Url        : http://listserv.gva.es/pipermail/gvsig_usuarios/attachments/20121116/f5ef5b19/attachment.py 
------------ próxima parte ------------

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

11, I(50PST_25ECM(75OCT_15ZAU_10VAP)_25SNE)
PST
OCT

12, A(85CNFpl_15MTR)
CNF

13, I(50FDC_40PRDsc_10EDFva)
FDC

14, A(60MTR_30PST_10SNE)
MTR

15, UEN(40EDFvd_40ZAU_20VAP)
EDF

16, NRV(85VAP_15ZAU)
VAP

17, A(70MTR_30SNE)
MTR

18, I(75PRDsc_25IAS(80EDFnv_20ZEV))
PRD
EDF

19, A(55MTR_30FDC_15SNE)
MTR

20, A(80CNFpl_20MTR)
CNF

21, I(70FDCfr_30ACU)
FDC

22, I(55PRDsc_35MTRpc_05FDPpl_05SNE)
PRD

23, A(65MTRpc_35FDC)
MTR

24, AAR(60EDFva_20PRDsc_10CHLsc_10FDC)
EDF

25, A(60FDC_30MTR_10SNE)
FDC

26, I(35PRDsc_30LOCsc_25IAS(50EDFnv_25VAP_20SNE_05ZAU)_10EDFva)
PRD
EDF

27, I(40PRDsc_25EDFva_25IAS(80EDFnv_20VAP)_10UEN(80EDFvd_20SNE))
PRD
EDF
EDF

28, EDU(35OCT_35SNE_15EDFea_15VAP)
OCT

29, I(60AAR(90EDFva_05PRDsc_05CHLsc)_40PRDsc)
AAR
EDF

30, I(35PRDsc_20CHLsc_20FDC_10EDFva_10EDFnv_05VAP)
PRD

31, I(80PRDsc_10CHLsc_05FDC_05VAP)
PRD

32, AAR(70EDFva_10FDC_10CHLsc_10PRDsc)
EDF

33, I(40MTR_40FDC_20EDFva)
MTR

34, FDC
FDC

35, I(25AAR(EDFva)_25CHLsc_25PRDsc_15FDC_10EDFva)
AAR
EDF

36, I(30PRDsc_30EDFva_20AAR(90EDFva_05PRDsc_05CHLsc)_10UEN(90EDFvd_05ZAU_05VAP)_05FDC_05LOCsc)
PRD
EDF
EDF

37, PAG(80ZEV_15EDFnv_05VAP)
ZEV

38, I(65PRDsc_20CHLsc_10VAP_05FDC)
PRD

39, I(30PRDsc_30CHLsc_15EDFva_10MTR_10PAG(80ZEV_20EDFnv)_05VAP)
PRD
ZEV

40, A(75FDC_15PRDsc_10FDPpl)
FDC

41, A(55MTR_40FDPpl_05SNE)
MTR

42, A(70MTR_25CNFpl_05SNE)
MTR

43, I(65PRDsc_25CHLsc_05FDC_05EDFva)
PRD

44, A(70CNFpl_15FDPpl_15MTR)
CNF

45, I(60PRDsc_20CHLsc_10FDC_05EDFnv_05VAP)
PRD

46, I(65PRDsc_15FDC_10MTRct_05VAP_05EDFva)
PRD

47, I(55PRDsc_30FDC_10FDPpl_05VAP)
PRD

48, PRDsc
PRDsc

49, I(55EDFva_30PRDsc_15FDC)
EDF

50, EDP(60ZAU_15SNE_10EDFea_10VAP_05OCT)
ZAU

51, I(65PRDsc_30CHLsc_05SNE)
PRD

52, PAG(70ZEV_15ZAU_10EDFnv_05VAP)
ZEV

53, AAR(65EDFva_30PRDsc_05CHLsc)
EDF

54, I(90UEN(75EDFea_10SNE_10VAP_05ZAU)_10UCS(90EDFva_10ZAU))
UEN
EDF
EDF


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