大家好,
我有一個程序,將導出類似於附加的.txt文件。 我想寫一個腳本,它將採用第一列,創建新的並填充這些值。 我沒有成功實現我在網站上找到的任何JSL。
僅使用JSL腳本,我想在“示例之前”中將“列1”拆分為三個新列,根據該列中的實例進行標記,然後將其填充到下一個有效值。 就像在“後例子”中看到的那樣。
示例之前

示例後:

問題:文本的嵌套結構讓人聯想到XML。這是原始文本還是經過一些編輯後的某個版本,比如刪除標籤?
這只是我快速製作的模仿我使用的平面文件的東西。 我們沒有使用導出.txt文件的軟件(HAScientific,SLIM)。 所以我實際上不確定數據是如何本地結構化的。 我認為它基於SQL,我只是沒有進入那座城堡的鑰匙。 雖然這是令人費解的,但我提出的工作是一個讀取和清理文本文件的JSL腳本。
@danielrbiber ,附加的腳本是用嵌套的類似XML的結構編寫的:獲取一個在更改之前保持不變的值,並創建一個新行並在更改時間點時寫入結果。 請注意,這可能無法處理文件的所有實例,但會為此示例文本文件執行所需操作。
您需要更改要運行的文本文件的路徑。
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
這與我想解決問題的方式截然不同。 我認為它應該有點修修補補。 謝謝您的幫助。