Ciao a tutti,
Ho un programma che esporterà i file .txt piatti simili a quello allegato. Mi piacerebbe scrivere uno script che prenderà la prima colonna, creerà nuovo e riempirà quei valori. Non ho avuto successo nell'implementare qualsiasi JSL che ho trovato sul sito.
Utilizzando solo lo script JSL, vorrei prendere "Colonna 1" in "Esempio prima" dividerlo in tre nuove colonne, etichettare le istanze in base a quella colonna e quindi riempirle fino al successivo valore valido. Come visto in "Esempio dopo".
Esempio prima

Esempio dopo:

Domanda: la struttura nidificata del tuo testo ricorda XML. È questo il testo originale o qualche versione dopo alcune modifiche, come la rimozione dei tag?
Questo è solo qualcosa che ho rapidamente fatto che riproduce i file piatti con cui lavoro. Non abbiamo la liscensing con il software (HAScientific, SLIM) che esporta il file .txt. Quindi non sono sicuro di come i dati siano strutturati in modo nativo. Penso che sia basato su SQL, ma non ho le chiavi in quel castello. Mentre questo è frugare, il lavoro che mi è venuto in mente è uno script JSL che legge e pulisce i file di testo.
@danielrbiber , lo script allegato è scritto con in mente la struttura nidificata di tipo XML: ottieni un valore che rimane invariato fino a quando non viene modificato e crea una nuova riga e scrivi i risultati quando viene modificato il punto temporale. Nota che questo potrebbe non gestire tutte le istanze dei tuoi file, ma farà ciò che vuoi per questo file di testo di esempio.
È necessario modificare il percorso del file di testo da eseguire.
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
Questo è un modo significativamente diverso da quello che stavo pensando di risolvere il problema. Penso che dovrebbe funzionare con un po 'di armeggiare. Grazie per l'aiuto.