[S7_DB_Utils](file:///D:%5CProyectos%5CScripts%5CParamManagerScripts%5Cbackend%5Cscript_groups%5CS7_DB_Utils) ```bash ************************************ file _format.db ************************************ TYPE "udt1" FAMILY : DataType VERSION : 0.1 STRUCT xxx : type := ddd; xx1 : type := ddd; END_STRUCT ; END_TYPE DATA_BLOCK "NAME" TITLE = { S7_language := '28(1) Albanese 15.06.2005 17:07:04' } FAMILY : Resource VERSION : 0.0 STRUCT name : STRUCT name : STRUCT yyy : type := value; yy1 : type := value; udt_name : "udt1"; yy3 : type := value; END_STRUCT ; yyy1 : type := value; END_STRUCT ; BEGIN yyy : type := value; yy1 : type := value; xxx : type := ddd; xx1 : type := ddd; yy3 : type := value; yyy1 : type := value; END_DATA_BLOCK ************************************ file _data.db ************************************ DATA_BLOCK "NAME" TITLE = { S7_language := '28(1) Albanese 15.06.2005 17:07:04' } FAMILY : Resource VERSION : 0.0 STRUCT name : STRUCT name : STRUCT STAT_yyy : type := data_value_1; STAT_yy1 : type := data_value_2; STAT_xxx : type := data_ddd_3; STAT_xx1 : type := data_ddd_4; STAT_yy3 : type := data_value_5; END_STRUCT ; STAT_yyy1 : type := data_value_6; END_STRUCT ; BEGIN STAT_yyy : type := data_value_7; STAT_yy1 : type := data_value_8; STAT_xxx : type := data_ddd_9; STAT_xx1 : type := data_ddd_10; STAT_yy3 : type := data_value_11; STAT_yyy1 : type := data_value_12; END_DATA_BLOCK ************************************ file _updated.db ************************************ TYPE "udt1" FAMILY : DataType VERSION : 0.1 STRUCT xxx : type := data_ddd_3; xx1 : type := data_ddd_4; END_STRUCT ; END_TYPE DATA_BLOCK "NAME" TITLE = { S7_language := '28(1) Albanese 15.06.2005 17:07:04' } FAMILY : Resource VERSION : 0.0 STRUCT name : STRUCT name : STRUCT yyy : type := data_value_1; yy1 : type := data_value_2; udt_name : "udt1"; yy3 : type := data_value_5; END_STRUCT ; yyy1 : type := data_value_6; END_STRUCT ; BEGIN yyy : type := data_value_7; yy1 : type := data_value_8; xxx : type := data_ddd_9; xx1 : type := data_ddd_10; yy3 : type := data_value_11; yyy1 : type := data_value_12; END_DATA_BLOCK Quiero que me ayudes a revisar este script para usar los valores iniciales y actuales del archivo source_file se copien a un nuevo archivo pero con los nombres de las variables tomados de target_file. Esto lo debo realizar porque se han perdido los nombres de las variables y quiero volver a recuperar los nombres pero con los datos actuales provenientes de source_file. Por ejemplo source_file :"STAT3 : REAL := 2.000000e-01; ", target_file: "CO2Offset : REAL := 4.500000e-01;" debe copiar lo que esta luego del := "2.000000e-01" hasta el ";" de source_file y lo que esta antes del := y luego del ";" del target_file. El resultado seria: "CO2Offset : REAL :=2.000000e-01;". Lo que esta luego del ";" pueden ser comentarios que son utiles mantener. Puede ser tambien que no haya asignaciones en source_file , en ese caso tampoco las debe haber en target_file. Este procedimiento se debe seguir para los valores inciales ( primera parte de DATA_BLOCK antes de BEGIN, para las UDT y luego con los valores actuales que es el area entre el BEGIN y END_DATA_BLOCK. En realidad como estamos asignando por posicion y no por nombre la idea seria usar un indice de posicion. El indice se puede incrementar siempre que una linea termine o centenga ";" ya que puede haber comentarios luego del ";". Teniendo en cuenta este sistema solo debemos saltar a las UDT para los valores iniciales pero a nivel de posicionamiento se debe seguir. Por lo que una variable posicionada en la indice 40 se debe asignar a una posicionada en la indice 40 siempre siguiendo que estos indices trabajen siguiengo los ";" y haciendo los saltos para las UDT. El archivo output_file debe ser similar a output_file solo con los valores actualizados tomas desde source_file. Lo que propongo seria que se analice el archivo source_file y se cree una lista con el indice consecutivo, tipo de tado y valor a copiar ( valor entre := y ";" ) inicial y actual ( luego del BEGIN ) . Luego se analice cada linea del target_file creando un diccionario con las tuplas ( numero de linea, indice ) . En esta pasada al crear el diccionario se puede controlar los tipos de datos y se asocian numero de linea con el indice correspondiente sobre el source_file. De esta manera en una nueva pasada se va copiando cada linea de target_file y si aparece en el diccionario se copia el correspondiente valor inicial o actual segun el arean donde estamos. Te adjunto un ejemplo de los archivos que debo procesar y el script de partida que aun no funciona correctamente. ```