creer un champ a la volée
Bonjour a tous
j'ai un fichier rempli de ce type de registres, chaque registre commence par =LDR:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| =LDR 00800ntm a2200229 4500
=001 199801568
=041 \\$aEspañol
=093 \\$a01/07/2013
=094 \\$aMASTER EXECUTIVE EN DIRECCION DE HOSPITALES Y EMPRESAS SANITARIAS
=096 \\$aRevisado
=100 10$aLópez Peña, Marta
=245 10$aDefinición de puestos de trabajo (funciones del personal no sanitario)
=260 \\$c1994
=337 \\$aDigital
=502 \\$bMaster en Dirección de Hospitales y Empresas Sanitarias$gGHE1
=590 \\$aDisponible sólo en formato digital
=650 \\$aGestión hospitalaria
=856 \\$uhttp://www.eada.net/servlets/obtenerFicheroBiblioteca?file=proyectos/199801568.pdf
=901 \\$aProyecto
=931 \\$aSÃ*
=942 \\$n0
=952 \\$w2013-07-29$p8$71$r2013-07-29$40$00$922112$bEADA$yPROJ$10$d2013-07-29$aEADA
=999 \\$c59605$d59605
=LDR 00796ntm a2200217 4500
=001 199801578
=094 \\$aMASTER EXECUTIVE EN DIRECCION DE HOSPITALES Y EMPRESAS SANITARIAS
=096 \\$aRevisado
=100 10$aBusturia, P. de
=245 10$aProceso de transformación del "Servicio de admisión" en un "Gabinete de gestión de pacientes"
=260 \\$c1994
=337 \\$aDigital
=502 \\$bMaster en Dirección de Hospitales y Empresas Sanitarias$gGHE1
=590 \\$aDisponible sólo en formato digital
=650 \\$aGestión hospitalaria
=856 \\$uhttp://www.eada.net/servlets/obtenerFicheroBiblioteca?file=proyectos/199801578.pdf
=901 \\$aProyecto
=931 \\$aSÃ*
=942 \\$n0
=952 \\$w2013-07-29$p9$71$r2013-07-29$40$00$922113$bEADA$yPROJ$10$d2013-07-29$aEADA
=999 \\$c59606$d59606 |
Je souhaite ajouter un champ =008 a partir de ce template
Code:
template = r"=008 130622s1999\\\\xxx|||||\||||\00|\0\eng\d"
Le but est de recuperer des valeurs de certains champs dans le registre et de les coller dans le =008
Concretement
=008 130622s1999\\\\xxx|||||\||||\00|\0\eng\d"
la valeur 130622 est = a la valeur du champs =093
la valeur 1999 est = a la valeur du champs =260
la valeur de eng est = a la valeur des 3 premieres lettres du du champs =041
S' il n'y a pas un des 3 champs on laisse la valeur du template
Pour faire ça j'ai recuperer ce scripts, il a marché une fois et la plus moyen de creer le =008
A la fin du post j'ai collé les 2 registre tel qu'ils devrait sortir apres execution du script
Je n'arrive pas a voir pourquoi, quelqu'un pourrait m'aiguiller?
D'avance merci
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| import re
NOMBRE_FICHERO = "fichierSource.mrk"
f1 = open(NOMBRE_FICHERO, 'r')
f2 = open('salida.mrk', 'w')
template = r"=008 130622s1999\\\\xxx|||||\||||\00|\0\eng\d"
linea = f1.readline()
linea93 = ''
linea260 = ''
linea41 = ''
while linea != '':
if '=093' in linea:
m = re.search(r'\d\d/\d\d/\d{4}', linea)
if m:
temp = m.group().split("/")
linea93 = temp[2][2:] + temp[1] + temp[0]
if '=260' in linea:
m = re.search(r'\d{4}$', linea)
if m:
linea260 = m.group()
if '=041' in linea:
m = re.search(r'[a-zA-Z]{3}', linea)
if m:
linea41 = m.group()
if linea == "\n":
t = template
if linea93 != '':
t = t.replace(r'130622', linea93)
if linea260 != '':
t = t.replace(r'1999', linea260)
if linea41 != '':
t = t.replace(r'eng', linea41)
f2.write(t + "\n")
linea93 = ''
linea260 = ''
linea41 = ''
f2.write(linea)
linea = f1.readline()
f1.close()
f2.close() |
Resultat:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| =LDR 00800ntm a2200229 4500
=001 199801568
=041 \\$aEspañol
=093 \\$a01/07/2013
=094 \\$aMASTER EXECUTIVE EN DIRECCION DE HOSPITALES Y EMPRESAS SANITARIAS
=096 \\$aRevisado
=100 10$aLópez Peña, Marta
=245 10$aDefinición de puestos de trabajo (funciones del personal no sanitario)
=260 \\$c1994
=337 \\$aDigital
=502 \\$bMaster en Dirección de Hospitales y Empresas Sanitarias$gGHE1
=590 \\$aDisponible sólo en formato digital
=650 \\$aGestión hospitalaria
=856 \\$uhttp://www.eada.net/servlets/obtenerFicheroBiblioteca?file=proyectos/199801568.pdf
=901 \\$aProyecto
=931 \\$aSÃ*
=942 \\$n0
=952 \\$w2013-07-29$p8$71$r2013-07-29$40$00$922112$bEADA$yPROJ$10$d2013-07-29$aEADA
=999 \\$c59605$d59605
=008 130701s1994\\\\xxx|||||\||||\00|\0\spa\d
=LDR 00796ntm a2200217 4500
=001 199801578
=094 \\$aMASTER EXECUTIVE EN DIRECCION DE HOSPITALES Y EMPRESAS SANITARIAS
=096 \\$aRevisado
=100 10$aBusturia, P. de
=245 10$aProceso de transformación del "Servicio de admisión" en un "Gabinete de gestión de pacientes"
=260 \\$c1994
=337 \\$aDigital
=502 \\$bMaster en Dirección de Hospitales y Empresas Sanitarias$gGHE1
=590 \\$aDisponible sólo en formato digital
=650 \\$aGestión hospitalaria
=856 \\$uhttp://www.eada.net/servlets/obtenerFicheroBiblioteca?file=proyectos/199801578.pdf
=901 \\$aProyecto
=931 \\$aSÃ*
=942 \\$n0
=952 \\$w2013-07-29$p9$71$r2013-07-29$40$00$922113$bEADA$yPROJ$10$d2013-07-29$aEADA
=999 \\$c59606$d59606
=008 130622s1994\\\\xxx|||||\||||\00|\0\eng\d |