Hola a todos,
Tengo un programa que exportará archivos .txt planos que son similares al adjunto. Me gustaría escribir un script que tome la primera columna, cree una nueva y complete esos valores. No he podido implementar ninguna JSL que haya encontrado en el sitio.
Utilizando solo el script JSL, me gustaría tomar "Columna 1" en "Ejemplo antes", dividirlo en tres columnas nuevas, etiquetar según las instancias en esa columna y luego completarlas hasta el siguiente valor válido. Como se ve en "Ejemplo Después".
Ejemplo Antes

Ejemplo después:

Pregunta: la estructura anidada de su texto recuerda a XML. ¿Es este el texto original o alguna versión después de alguna edición, como eliminar etiquetas?
Esto es algo que hice rápidamente y que imita los archivos sin formato con los que trabajo. No tenemos licencias con el software (HAScientific, SLIM) que exporta el archivo .txt. Así que en realidad no estoy seguro de cómo se estructuran los datos de forma nativa. Creo que está basado en SQL, simplemente no tengo llaves en ese castillo. Si bien esto es frustrante, el trabajo que he encontrado es un script JSL que lee y limpia los archivos de texto.
@danielrbiber , el script adjunto se escribe con la estructura anidada de tipo XML en mente: obtenga un valor que permanezca igual hasta que se modifique, y cree una nueva fila y escriba los resultados cuando se cambie el punto temporal. Tenga en cuenta que esto podría no manejar todas las instancias de sus archivos, pero hará lo que quiera para este archivo de texto de ejemplo.
Necesita cambiar la ruta del archivo de texto para ejecutar.
Names Default to Here(1);
dt0 = Open(
"C:\Users\_xx\Downloads\Example Before.txt",
Table Contains Column Headers (1),
End of Line ( CRLF, CR, LF),
End of Field (comma, CSV(0)),
Column Names Start(1));
//create a new table
dt = New Table("Restruct",
New Column( "Column 1", Character),
New Column( "Meta Data", Character),
New Column( "Data", Numeric),
New Column( "Project", Character),
New Column( "Time Point", Character),
New Column( "Condition", Character) );
//Initialize values
md="";
dv=empty();
tp="";
pj="";
cd="";
crow = 0;
//new rows will be created for new time point
//this might not cover all files, but matches your sample text data.
for(i=1,i<=nrow(dt0),i++,
cval = dt0:Column 1[i];
If(cval =="", Continue());
if(starts with(cval,"PT"), pj=cval);
if(contains(cval,"/"), cd = cval);
if(contains(cval,"Initial") | contains(cval,"month"),
tp = cval;
if(trim(cval)=="Initial", cd = cval);
md = dt0:Meta Data[i];
dv = dt0:Data[i];
dt << add rows(1, At End);
crow++;
dt:Column 1[crow] = cval;
dt:Meta Data[crow] = md;
dt:Data[crow] = dv;
dt:Time Point[crow] = tp;
dt:Project[crow] = pj;
dt:Condition[crow] = cd;
); // end if
); // end for
Esta es una manera significativamente diferente de como estaba pensando en resolver el problema. Creo que debería funcionar con un poco de retoques. Gracias por la ayuda.