[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