Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: fallout20xx en 12 Abril 2012, 16:11 pm



Título: [Python] problemas con las listas linkeadas...
Publicado por: fallout20xx en 12 Abril 2012, 16:11 pm
Vamos a ver, estoy ultimando una transmision EDI de facturas y hay un detalle que me esta trallendo de cabeza, voy a ir poniendo cada parte del codigo.
Primero tenemos una lista con listas anidadas:
Código
  1. [sup]Form119 = [['119',  1,       3,     'A'],
  2.          [None,    4,       3,     'A'],
  3.          [None,    7,       13,    'A'],
  4.          [None,    20,      35,    'A'],
  5.          [None,    55,      35,    'A'],
  6.          [None,    90,      35,    'A'],
  7.          [None,    125,     35,    'A'],
  8.          [None,    160,     35,    'A'],
  9.          [None,    195,     35,    'A'],
  10.          [None,    230,     9,     'A'],
  11.          [None,    239,     35,    'A'],
  12.          [None,    274,     3,     'A'],
  13.          [None,    277,     35,    'A'],
  14.          [None,    312,     35,    'A'],
  15.          [None,    347,     35,    'A'],
  16.          [None,    382,     35,    'A'],
  17.          [None,    417,     35,    'A'],
  18.          [None,    452,     20,    'A'],
  19.          [None,    472,     20,    'A'],
  20.          [None,    492,     20,    'A'],
  21.          [None,    512,     3,     'A'],
  22.          [None,    515,     35,    'A'],
  23.          [None,    550,     51,    'A']][/sup]

ahora tengo que rellenar unos campos y pasarlo a texto plano, esta lista sirve para mantener los formatos durante la construccion del mensaje.
aqui es donde se rellenan:
Código
  1. [sup]    def Build_119(self, Vfac):
  2.        Inv_Prt_BYDP = list(Form119)
  3.        Inv_Prt_IV = list(Form119)
  4.        Inv_Prt_SU = list(Form119)
  5.        Respuesta = list()
  6.        Datos = EG.con("""select C_ILN, C_NOM, C_DIR, C_DIRA, COD_CPO, C_POB,
  7.                            C_NIF, C_ILNZ, C_ZON, C_FPR, C_FCP, C_FPO
  8.                            from CLIENTES, VFACTURA
  9.                            where VFACTURA.COD_C = CLIENTES.COD_C
  10.                            and COD_VFA = '%s'""" % Vfac)
  11.        Inv_Prt_BYDP[2][0] = Datos[0][0]
  12.        Inv_Prt_BYDP[3][0] = Datos[0][1]
  13.        Inv_Prt_BYDP[6][0] = Datos[0][2]
  14.        Inv_Prt_BYDP[7][0] = Datos[0][3]
  15.        Inv_Prt_BYDP[9][0] = Datos[0][4]
  16.        Inv_Prt_BYDP[10][0] = Datos[0][5]
  17.        Inv_Prt_BYDP[11][0] = 'DE'
  18.        Inv_Prt_BYDP[14][0] = Datos[0][6]
  19.  
  20.        Inv_Prt_BY =list(Inv_Prt_BYDP)
  21.        Inv_Prt_BY[1][0] = 'BY'
  22.        Respuesta.append(self.The_Builder(Inv_Prt_BY))
  23.  
  24.        Inv_Prt_DP = list(Inv_Prt_BYDP)
  25.        Inv_Prt_DP[1][0] = 'DP'
  26.        Respuesta.append(self.The_Builder(Inv_Prt_DP))
  27.  
  28.        Inv_Prt_IV[1][0] = 'IV'
  29.        Inv_Prt_IV[2][0] = Datos[0][7]
  30.        Inv_Prt_IV[3][0] = Datos[0][8]
  31.        Inv_Prt_IV[6][0] = Datos[0][9]
  32.        Inv_Prt_IV[7][0] = ''
  33.        Inv_Prt_IV[9][0] = Datos[0][10]
  34.        Inv_Prt_IV[10][0] = Datos[0][11]
  35.        Inv_Prt_IV[11][0] = 'DE'
  36.        Inv_Prt_IV[14][0] = 'DE812706034'
  37.        Respuesta.append(self.The_Builder(Inv_Prt_IV))
  38.  
  39.        Datos = EG.con("""select C_ILN, C_NOM, C_DIR, C_DIRA, COD_CPO, C_POB, C_NIF
  40.                            from CLIENTES
  41.                            where COD_C = 'EURAL'""")
  42.  
  43.        Inv_Prt_SU[1][0] = 'SU'
  44.        Inv_Prt_SU[2][0] = Datos[0][0]
  45.        Inv_Prt_SU[3][0] = Datos[0][1]
  46.        Inv_Prt_SU[6][0] = Datos[0][2]
  47.        Inv_Prt_SU[7][0] = Datos[0][3]
  48.        Inv_Prt_SU[9][0] = Datos[0][4]
  49.        Inv_Prt_SU[10][0] = Datos[0][5]
  50.        Inv_Prt_SU[11][0] = 'DE'
  51.        Inv_Prt_SU[14][0] = Datos[0][6]
  52.        Respuesta.append(self.The_Builder(Inv_Prt_SU))
  53.  
  54.        return '\n'.join(Respuesta)[/sup]

actualmente esta funcionando, pero solo porque voy convirtiendo a texto cada vez que completo una de las copias, como veis al principio de la funcion declaro que 3 ojetos son iguales a la lista anteriormente puesta, pero al acabar la funcion, da igual como lo haga, tanto Form119, Inv_Prt_BYDP, Inv_Prt_IV, Inv_Prt_SU, Inv_Prt_BY y Inv_Prt_DP son identicas, es como si estubiese machando todo el rato Form119... ¿alguien me puede decir como coño me desago del maldito link de las listas? he hecho pruebas en el Pythonwin y supuestamente declarando list(Form119) se elimina el link y puedes madificar cada una por separado, sospecho que al tener listas anidadas hay algo que esta fallando... ¿alguna ayuda?



Elektro H@cker: Usa las etiquetas de código, que para algo están.