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)