I have the following code that works great, but takes 40 mins to 1 hours to finish the task. It has at least 30 rules for blocking lines, and 30k+ orders to check. I'm new to Python (3 months working with it), so I don't know what can I change to make it run faster. The version in my computer is Python 2.7.9.
import codecs import re def find_word(text, search): result = re.findall('\\b'+search+'\\b', text, flags=re.IGNORECASE) if len(result)>0: return True else: return False with codecs.open('C:/inetpub/wwwroot/BloqueoLinea/DATA/FO.txt','r',encoding = 'utf-8') as FO: finalorder = FO.readlines() with codecs.open('C:/inetpub/wwwroot/BloqueoLinea/DATA/Table-Familias.txt','r',encoding = 'utf-8') as familias: list_familias = familias.readlines() fo = '' with codecs.open('C:/inetpub/wwwroot/BloqueoLinea/DATA/data.txt','w',encoding = 'utf-8') as data: for forder in finalorder: order = forder.split(';') orden = [order[0],order[1],order[15],order[24],order[2],'',''] for familia in list_familias: fam = familia.split(';') if order[2] in fam[0]: orden[5] = fam[1] orden[6] = fam[2] fo = ';'.join(orden) data.write(fo+'\n') with codecs.open('C:/inetpub/wwwroot/BloqueoLinea/DATA/data.txt','r',encoding = 'utf-8') as cross: cr = cross.readlines() with codecs.open('C:/inetpub/wwwroot/BloqueoLinea/App_Data/BloqLines.txt','r',encoding = 'utf-8') as bloqueos: block = bloqueos.readlines() with codecs.open('C:/inetpub/wwwroot/BloqueoLinea/DATA/nodos.txt','r',encoding = 'utf-8') as node: nodos = node.readlines() with codecs.open('C:/inetpub/wwwroot/BloqueoLinea/DATA/Table-Lineas.txt','r',encoding = 'utf-8') as listlineas: tlines = listlineas.readlines() count = 0 fileblock = codecs.open('C:/inetpub/wwwroot/BloqueoLinea/DATA/Restricciones_Ruteo.txt','w',encoding = 'utf-8') for forder in cr: fo = forder.split(';') for bloqueo in block: check = bloqueo.split(';') if 'True' in check[0]: #Primero comprobar si la regla se aplica o no fam87 = check[5].lower() fam87 = fam87.capitalize() est = check[6].lower() est = est.capitalize() #Logica taxativo clinea = 0 lista = [] ap = lista.append for line in tlines: if check[7] in line: nline = line.split(';') lin = nline[1] for line in tlines: nline = line.split(';') if lin in nline[1]: if line in lista: pass else: nline = line.split(';') ap(nline[0]) #Fam87 if forder.find(check[5]) >= 1 or (forder.find(fam87)) >= 1: if forder.find(check[6]) >= 1 or (forder.find(est)) >= 1: #Si EstCom coincide con bloqueo actual if fo[1] in check[2]: #Si ITEMREP coincide bloqueo actual for nodo in nodos: nod = nodo.split(';') if check[2] in nodo: #Si parametro de ITEMREP coincide en nodo actual if bool(check[9]): for item in lista: if nod[3] in item: clinea += 1 ub = lista.index(item) del lista[ub] if clinea > 1: if find_word(nod[3], check[7]): #Revisar si parametro linea coincide en nodo actual count += 1 elif clinea == 1: pass else: if find_word(nod[3], check[7]): #Revisar si parametro linea coincide en nodo actual count += 1 if count >= 1: fileblock.write("BloqLine(%s,%s)\n" % (fo[0],check[7])) count = 0 elif check[2] == '': #Cuando no hay ITEMREP for nodo in nodos: if fo[1] in nodo: nod = nodo.split(';') if bool(check[9]): for item in lista: if nod[3] in item: clinea += 1 ub = lista.index(item) del lista[ub] if clinea > 1: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 elif clinea == 1: pass else: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 if count >= 1: fileblock.write("BloqLine(%s,%s)\n" % (fo[0],check[7])) count = 0 #No hay EstCom, pero hay ITEMREP elif fo[1] in check[2] and (check[6] == ''): #Si ITEMREP coincide con bloqueo actual for nodo in nodos: if check[2] in nodo: #Si parametro de ITEMREP coincide en nodo actual nod = nodo.split(';') if bool(check[9]): for item in lista: if nod[3] in item: clinea += 1 ub = lista.index(item) del lista[ub] if clinea > 1: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 elif clinea == 1: pass else: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 if count >= 1: fileblock.write("BloqLine(%s,%s)\n" % (fo[0],check[7])) count = 0 elif check[2] == '' and check[6] == '': #Cuando no hay ITEMREP ni EstCom for nodo in nodos: if fo[1] in nodo: nod = nodo.split(';') if bool(check[9]): for item in lista: if nod[3] in item: clinea += 1 ub = lista.index(item) del lista[ub] if clinea > 1: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 elif clinea == 1: pass else: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 if count >= 1: fileblock.write("BloqLine(%s,%s)\n" % (fo[0],check[7])) count = 0 #Familia N1 elif fo[5] in check[3] and (check[5] == ''): if fo[2] in check[6]: #EstCom if fo[1] in check[2]: #ITEMREP for nodo in nodos: if check[2] in nodo: #ITEMREP nod = nodo.split(';') if bool(check[9]): for item in lista: if nod[3] in item: clinea += 1 ub = lista.index(item) del lista[ub] if clinea > 1: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 elif clinea == 1: pass else: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 if count >= 1: fileblock.write("BloqLine(%s,%s)\n" % (fo[0],check[7])) count = 0 elif check[2] == '': #No hay ITEMREP for nodo in nodos: if fo[1] in nodo: nod = nodo.split(';') if bool(check[9]): for item in lista: if nod[3] in item: clinea += 1 ub = lista.index(item) del lista[ub] if clinea > 1: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 elif clinea == 1: pass else: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 if count >= 1: fileblock.write("BloqLine(%s,%s)\n" % (fo[0],check[7])) count = 0 #Cuando no hay EstCom, pero hay ITEMREP elif fo[1] in check[2] and (check[6] == ''): #Si ITEMREP coincide con parametro de bloqueo for nodo in nodos: if check[2] in nodo: #Si ITEMREP coincide en nodo actual nod = nodo.split(';') if bool(check[9]): for item in lista: if nod[3] in item: clinea += 1 ub = lista.index(item) del lista[ub] if clinea > 1: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 elif clinea == 1: pass else: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 if count >= 1: fileblock.write("BloqLine(%s,%s)\n" % (fo[0],check[7])) count = 0 elif check[2] == '' and check[6] == '': #No hay ITEMREP ni EstCom for nodo in nodos: if fo[1] in nodo: nod = nodo.split(';') if bool(check[9]): for item in lista: if nod[3] in item: clinea += 1 ub = lista.index(item) del lista[ub] if clinea > 1: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 elif clinea == 1: pass else: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 if count >= 1: fileblock.write("BloqLine(%s,%s)\n" % (fo[0],check[7])) count = 0 #Familia N2 elif fo[6] in check[4] and (check[3] == '') and (check[5] == ''): if fo[2] in check[6]: #EstCom if fo[1] in check[2]: #ITEMREP for nodo in nodos: if check[2] in nodo: #ITEMREP nod = nodo.split(';') if bool(check[9]): for item in lista: if nod[3] in item: clinea += 1 ub = lista.index(item) del lista[ub] if clinea > 1: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 elif clinea == 1: pass else: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 if count >= 1: fileblock.write("BloqLine(%s,%s)\n" % (fo[0],check[7])) count = 0 elif check[2] == '': #Cuando no hay ITEMREP for nodo in nodos: if fo[1] in nodo: nod = nodo.split(';') if bool(check[9]): for item in lista: if nod[3] in item: clinea += 1 ub = lista.index(item) del lista[ub] if clinea > 1: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 elif clinea == 1: pass else: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 if count >= 1: fileblock.write("BloqLine(%s,%s)\n" % (fo[0],check[7])) count = 0 #Cuando no hay EstCom, pero hay ITEMREP elif fo[1] in check[2] and (check[6] == ''): #Si ITEMREP coincide con parametro de bloqueo for nodo in nodos: if check[2] in nodo: #Si ITEMREP coincide en nodo actual nod = nodo.split(';') if bool(check[9]): for item in lista: if nod[3] in item: clinea += 1 ub = lista.index(item) del lista[ub] if clinea > 1: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 elif clinea == 1: pass else: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 if count >= 1: fileblock.write("BloqLine(%s,%s)\n" % (fo[0],check[7])) count = 0 elif check[2] == '' and check[6] == '': #No hay ITEMREP for nodo in nodos: if fo[1] in nodo: nod = nodo.split(';') if bool(check[9]): for item in lista: if nod[3] in item: clinea += 1 ub = lista.index(item) del lista[ub] if clinea > 1: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 elif clinea == 1: pass else: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 if count >= 1: fileblock.write("BloqLine(%s,%s)\n" % (fo[0],check[7])) count = 0 #Cuando no hay parametro para ninguna Familia, se sigue a bloquear EstCom elif fo[2] in check[6] and (check[4] == '') and (check[3] == '') and (check[5] == ''): #EstCom if fo[1] in check[2]: #ITEMREP for nodo in nodos: if check[2] in nodo: #ITEMREP nod = nodo.split(';') if bool(check[9]): for item in lista: if nod[3] in item: clinea += 1 ub = lista.index(item) del lista[ub] if clinea > 1: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 elif clinea == 1: pass else: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 if count >= 1: fileblock.write("BloqLine(%s,%s)\n" % (fo[0],check[7])) count = 0 #Si no existe parametro de ITEMREP elif check[2] == '': for nodo in nodos: if fo[1] in nodo: nod = nodo.split(';') if bool(check[9]): for item in lista: if nod[3] in item: clinea += 1 ub = lista.index(item) del lista[ub] if clinea > 1: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 elif clinea == 1: pass else: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 if count >= 1: fileblock.write("BloqLine(%s,%s)\n" % (fo[0],check[7])) count = 0 #Cuando no hay Familias, y no hay EstCom, bloquear por ITEMREP elif fo[1] in check[2] and (check[6] == '') and (check[4] == '') and (check[3] == '') and (check[5] == ''): for nodo in nodos: if fo[1] in nodo: nod = nodo.split(';') if bool(check[9]): for item in lista: if nod[3] in item: clinea += 1 ub = lista.index(item) del lista[ub] if clinea > 1: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 elif clinea == 1: pass else: if find_word(nod[3], check[7]): #Linea coincide en nodo actual count += 1 if count >= 1: fileblock.write("BloqLine(%s,%s)\n" % (fo[0],check[7])) count = 0 print ('Finished') fileblock.close()
At first I tried making some functions, but it started running slower, so I removed those functions and placed them in the code.
Basically, the code reads many text files. Some are static, but the FO.txt, nodos.txt and BloqLines.txt are different every day. When implemented, this code is supposed to run every morning.
It checks the rules (in BloqLines.txt) checks the orders (FO.txt gets some changes for data that it's needed and creates data.txt) and after checking with rules applies or not, it creates the Restriccion_Ruteos.txt and that's it.
If possible, how can I improve the performance of this code?
Samples from input files. Omitting the original files that are edited in the code.
BloqLines.txt :
True;Restringe GLV IREP4801 por G3U;IREP4801;;;;;G4_UNI;;False True;Restringe Angostos ME por el MC2;;;;ang;Expo;MC2_GUE;;False True;Restringe Anneal para CGL;;;ANN;;;G2_JUV;;False
data.txt :
Orden00005990;IREP1554;Red Comercial;1;B_RCD_sSKP_Rto;LAC;RCD Orden00005991;IREP1554;Red Comercial;1;B_RCD_sSKP_Rto;LAC;RCD Orden00005992;IREP1554;Red Comercial;1;B_RCD_sSKP_Rto;LAC;RCD Orden00005993;IREP1554;Red Comercial;1;B_RCD_sSKP_Rto;LAC;RCD Orden00005994;IREP1554;Red Comercial;1;B_RCD_sSKP_Rto;LAC;RCD Orden00005995;IREP1554;Red Comercial;1;B_RCD_sSKP_Rto;LAC;RCD Orden00005996;IREP1554;Red Comercial;1;B_RCD_sSKP_Rto;LAC;RCD Orden00005997;IREP1554;Red Comercial;1;B_RCD_sSKP_Rto;LAC;RCD Orden00005998;IREP1555;Red Comercial;1;B_RCD_sSKP_Rto;LAC;RCD Orden00005999;IREP1555;Red Comercial;1;B_RCD_sSKP_Rto;LAC;RCD Orden00006000;IREP1555;Red Comercial;1;B_RCD_sSKP_Rto;LAC;RCD Orden00006001;IREP1555;Red Comercial;1;B_RCD_sSKP_Rto;LAC;RCD Orden00006002;IREP1555;Red Comercial;1;B_RCD_sSKP_Rto;LAC;RCD
Table-Lineas.txt:
ING_MAQ;INGMAQ;0;INGMAQ;ING_MAQ COMP_SLB_TTC;COMP;0;COMP;COMP_SLB_TTC MC1_GUE;MC;1;GUE;MC1_GUE MC2_GUE;MC;1;GUE;MC2_GUE MC3_CHU;MC;1;CHU;MC3_CHU PREPA_GUE;PREPA;2;GUE;PREPA_GUE SKP_GUE;SKP;2;GUE;SKP_GUE SKP3_CHU;SKP;2;CHU;SKP3_CHU SKP4_CHU;SKP;2;CHU;SKP4_CHU DEC_PSQ;DEC;3;PSQ;DEC_PSQ DEC_UNI;DEC;3;UNI;DEC_UNI DEC1_CHU;DEC;3;CHU;DEC1_CHU DEC2_CHU;DEC;3;CHU;DEC2_CHU
nodos.txt:
IREP1554Ruta_1_CUST_1;IREP1554;TEIREP1554_CUST_1;CUST;B_RCD_sSKP_Rto;servicio;propaga;codproceso IREP1554Ruta_1_DEC3_CHU_1;IREP1554;TEIREP1554_DEC3_CHU_1;DEC3_CHU;B_RCD_sSKP_Rto;servicio;propaga;codproceso IREP1554Ruta_1_ING_PT_1;IREP1554;TEIREP1554_ING_PT_1;ING_PT;B_RCD_sSKP_Rto;servicio;propaga;codproceso IREP1554Ruta_1_MC3_CHU_1;IREP1554;TEIREP1554_MC3_CHU_1;MC3_CHU;B_RCD_sSKP_Rto;servicio;propaga;codproceso IREP1554Ruta_1_NULL_1;IREP1554;NULL;NULL;B_RCD_sSKP_Rto;servicio;propaga;codproceso IREP1554Ruta_1_PT_1;IREP1554;TEIREP1554_PT_1;PT;B_RCD_sSKP_Rto;servicio;propaga;codproceso IREP1555Ruta_1_CUST_1;IREP1555;TEIREP1555_CUST_1;CUST;B_RCD_sSKP_Rto;servicio;propaga;codproceso IREP1555Ruta_1_DEC3_CHU_1;IREP1555;TEIREP1555_DEC3_CHU_1;DEC3_CHU;B_RCD_sSKP_Rto;servicio;propaga;codproceso IREP1555Ruta_1_ING_PT_1;IREP1555;TEIREP1555_ING_PT_1;ING_PT;B_RCD_sSKP_Rto;servicio;propaga;codproceso IREP1555Ruta_1_MC3_CHU_1;IREP1555;TEIREP1555_MC3_CHU_1;MC3_CHU;B_RCD_sSKP_Rto;servicio;propaga;codproceso IREP1555Ruta_1_NULL_1;IREP1555;NULL;NULL;B_RCD_sSKP_Rto;servicio;propaga;codproceso IREP1555Ruta_1_PT_1;IREP1555;TEIREP1555_PT_1;PT;B_RCD_sSKP_Rto;servicio;propaga;codproceso
FO.txt:
Orden00005990;IREP1554;B_RCD_sSKP_Rto;Mas;44.835;44.835;44.835;0;0;20151130;20151130;30;VirtualRep;Primeras;Rep;Red Comercial;1-Decapado;2015-11;000001;482;Committed;B_RCD_sSKP_Rto_Red_Rep_Mas;44.835;Comerciales;1;IREP1554;2015-11-23 12:43:39;0203;11 Orden00005991;IREP1554;B_RCD_sSKP_Rto;Mas;123.69;123.69;123.69;0;0;20151231;20151231;30;VirtualRep;Primeras;Rep;Red Comercial;1-Decapado;2015-12;000001;482;Committed;B_RCD_sSKP_Rto_Red_Rep_Mas;123.69;Comerciales;1;IREP1554;2015-11-23 12:43:39;0203;12 Orden00005992;IREP1554;B_RCD_sSKP_Rto;Cus;40.296;40.296;40.296;0;0;20160131;20160131;30;VirtualRep;Primeras;Rep;Red Comercial;1-Decapado;2016-01;000001;482;Committed;B_RCD_sSKP_Rto_Red_Rep_Cus;40.296;Comerciales;1;IREP1554;2015-11-23 12:43:39;0203;1 Orden00005993;IREP1554;B_RCD_sSKP_Rto;Mas;89.04;89.04;89.04;0;0;20160131;20160131;30;VirtualRep;Primeras;Rep;Red Comercial;1-Decapado;2016-01;000001;482;Committed;B_RCD_sSKP_Rto_Red_Rep_Mas;89.04;Comerciales;1;IREP1554;2015-11-23 12:43:39;0203;1 Orden00005994;IREP1554;B_RCD_sSKP_Rto;Cus;90.187;90.187;90.187;0;0;20160229;20160229;30;VirtualRep;Primeras;Rep;Red Comercial;1-Decapado;2016-02;000001;482;Committed;B_RCD_sSKP_Rto_Red_Rep_Cus;90.187;Comerciales;1;IREP1554;2015-11-23 12:43:39;0203;2 Orden00005995;IREP1554;B_RCD_sSKP_Rto;Mas;89.775;89.775;89.775;0;0;20160229;20160229;30;VirtualRep;Primeras;Rep;Red Comercial;1-Decapado;2016-02;000001;482;Committed;B_RCD_sSKP_Rto_Red_Rep_Mas;89.775;Comerciales;1;IREP1554;2015-11-23 12:43:39;0203;2 Orden00005996;IREP1554;B_RCD_sSKP_Rto;Cus;97.637;97.637;97.637;0;0;20160331;20160331;30;VirtualRep;Primeras;Rep;Red Comercial;1-Decapado;2016-03;000001;482;Committed;B_RCD_sSKP_Rto_Red_Rep_Cus;97.637;Comerciales;1;IREP1554;2015-11-23 12:43:39;0203;3 Orden00005997;IREP1554;B_RCD_sSKP_Rto;Mas;99.435;99.435;99.435;0;0;20160331;20160331;30;VirtualRep;Primeras;Rep;Red Comercial;1-Decapado;2016-03;000001;482;Committed;B_RCD_sSKP_Rto_Red_Rep_Mas;99.435;Comerciales;1;IREP1554;2015-11-23 12:43:39;0203;3 Orden00005998;IREP1555;B_RCD_sSKP_Rto;Mas;42;42;42;0;0;20151130;20151130;30;VirtualRep;Primeras;Rep;Red Comercial;1-Decapado;2015-11;000001;482;Committed;B_RCD_sSKP_Rto_Red_Rep_Mas;42;Comerciales;1;IREP1555;2015-11-23 12:43:39;0203;11 Orden00005999;IREP1555;B_RCD_sSKP_Rto;Mas;21;21;21;0;0;20151231;20151231;30;VirtualRep;Primeras;Rep;Red Comercial;1-Decapado;2015-12;000001;482;Committed;B_RCD_sSKP_Rto_Red_Rep_Mas;21;Comerciales;1;IREP1555;2015-11-23 12:43:39;0203;12 Orden00006000;IREP1555;B_RCD_sSKP_Rto;Mas;42;42;42;0;0;20160131;20160131;30;VirtualRep;Primeras;Rep;Red Comercial;1-Decapado;2016-01;000001;482;Committed;B_RCD_sSKP_Rto_Red_Rep_Mas;42;Comerciales;1;IREP1555;2015-11-23 12:43:39;0203;1 Orden00006001;IREP1555;B_RCD_sSKP_Rto;Cus;21.559;21.559;21.559;0;0;20160229;20160229;30;VirtualRep;Primeras;Rep;Red Comercial;1-Decapado;2016-02;000001;482;Committed;B_RCD_sSKP_Rto_Red_Rep_Cus;21.559;Comerciales;1;IREP1555;2015-11-23 12:43:39;0203;2 Orden00006002;IREP1555;B_RCD_sSKP_Rto;Mas;42;42;42;0;0;20160229;20160229;30;VirtualRep;Primeras;Rep;Red Comercial;1-Decapado;2016-02;000001;482;Committed;B_RCD_sSKP_Rto_Red_Rep_Mas;42;Comerciales;1;IREP1555;2015-11-23 12:43:39;0203;2
Table-Familias.txt:
B_RCD_SKP_Ang;LAC;RCD;ANG;RCD SKP Angosto;B_RCD_SKP_Ang B_RCD_SKP_Rto;LAC;RCD;RTO;RCD SKP Resto;B_RCD_SKP_Rto B_RCD_sSKP_Ang;LAC;RCD;ANG;RCD sSKP Angosto;B_RCD_sSKP_Ang B_RCD_sSKP_Rto;LAC;RCD;RTO;RCD sSKP Resto;B_RCD_sSKP_Rto B_RCD_TEM_Ang;LAC;RCD;RCD TEM;RCD Temple Angosto;B_RCD_TEM_Ang B_RCD_TEM_Rto;LAC;RCD;RCD TEM;RCD Temple Resto;B_RCD_TEM_Rto C_RFC_LAV;LAF;RFC;RFC;RFC LAV;C_RFC_LAV C_RFC_MAQ;LAF;RFC;RFC;RFC MAQ;C_RFC_MAQ C_RFC_MAQ_TNS;LAF;RFC;RFC;RFC MAQ TNS;C_RFC_MAQ_TNS C_RFC_sLAV;LAF;RFC;RFC;RFC sLAV;C_RFC_sLAV D_RFR_Anc_sTNS;LAF;RFR;ANCHO;RFR Ancho sTNS;D_RFR_Anc_sTNS D_RFR_Anc_TNS;LAF;RFR;ANCHO;RFR Ancho TNS;D_RFR_Anc_TNS D_RFR_Ang_LAV_sTNS;LAF;RFR;ANG LAV;RFR Angosto LAV sTNS;D_RFR_Ang_LAV_sTNS
Restricciones_Ruteo.txt:
BloqLine(Orden00001443,DEC3_CHU) BloqLine(Orden00001444,DEC3_CHU) BloqLine(Orden00001445,DEC3_CHU) BloqLine(Orden00001446,DEC3_CHU) BloqLine(Orden00002095,CGL_PSQ) BloqLine(Orden00002095,G1P3_JUV) BloqLine(Orden00002095,G2_JUV) BloqLine(Orden00002095,G2_UNI) BloqLine(Orden00002095,G4_UNI) BloqLine(Orden00002095,G5_MVA) BloqLine(Orden00002096,CGL_PSQ) BloqLine(Orden00002096,G1P3_JUV) BloqLine(Orden00002096,G2_JUV) BloqLine(Orden00002096,G2_UNI) BloqLine(Orden00002096,G4_UNI) BloqLine(Orden00002096,G5_MVA) BloqLine(Orden00002097,CGL_PSQ) BloqLine(Orden00002097,G1P3_JUV) BloqLine(Orden00002097,G2_JUV) BloqLine(Orden00002097,G2_UNI) BloqLine(Orden00002097,G4_UNI)