プロセスへの入力を定義する任意の数の列と、出力である他の列があり、入力の各セットには、時間どおりに入力される出力の行がたくさんあります。
.jslを使用して、行1で「1」で始まる新しい「setid」列を作成し、ユーザーが選択した列(1つ以上)を取得し、それらの列のいずれかの値が変更されるたびに、それをインクリメントすることは可能ですか?setid列の値-それ以外の場合、setidは同じままです。 行はセットによって合理的にソートされていると想定できます。
これは、最初に使用できる小さな例です。 私は何年も前に行った古いコードをいくつか掘り起こして、修正しました。 最初にダイアログボックスをポップアップします

列を選択した後、[OK]をクリックすると、新しい列が作成されます。
スクリプティングガイドをまだ読んでいない場合は、これを読んでください。 この単純なスクリプトを拡張するには、JSLとそれを使って何ができるかを理解する必要があります。 これがスクリプトです
Clear Symbols();
Names Default To Here( 1 );
dt = Current Data Table();
allcolumnslist = dt << get column names( "string" );
nw = New Window( "Generate SETID Column",
Border Box( Left( 3 ), top( 2 ),
V List Box(
Text Box( "Create a SETID Column" ),
H List Box(
V List Box(
// Generate the master display box for the columns in the data table
Panel Box( "Select Columns",
colListData = Col List Box( width( 180 ), nLines( Min( N Cols( dt ), 15 ) ) ),
colListData << append( dt << get column names( "string" ) ),
// At startup, sselect the columns in the selection box for
// the columns that are selected in the data table
For( II = 1, II <= N Items( All Columns list ), II++,
If( Column( ii ) << get selected == 1,
colListData << set selected( II )
)
);
)
),
// Setup the selection buttons and the selection boxes
Panel Box( "Selected Columns to Create SETID from",
Lineup Box( N Col( 2 ), Spacing( 3 ),
Button Box( "Add Column(s)", colListY << Append( colListData << GetSelected ) ),
colListY = Col List Box( width( 180 ), nLines( 10 ), min col( 1 ), max col( 0 ) ),
)
),
// Setup the action buttons that control the window processing
V List Box(
Panel Box( "Action",
Lineup Box( N Col( 1 ),
Button Box( "OK",
// Check to see if the required data has been input
If( N Items( colListY << GetItems ) == 0,
Dialog( "No Y Columns Specified", Button( "OK" ) ),
// Process the Y Columns
thecols = {};
thecols = colListY << GetItems;
nw << close window;
runit();
)
),
Button Box( "Cancel", Stop() ),
Text Box( " " ),
Button Box( "Remove", colListY << RemoveSelected ),
Button Box( "Help", notImplemented )
)
)
),
)
)
)
);
// Here is the function that calculates the new column.
runit = Function( {},
If( Try( dt:SetID << get name, "" ) != "",
dt << delete columns( {"SetID"} )
);
dt << New Column( "SetID", numeric );
// Set the value for row 1
mySetID = 1;
dt:SetID[1] = mySetID;
// Loop across the remaining rows, checking for a change from the previous row
For( i = 2, i <= N Rows( dt ), i++,
thesame = "Yes";
For( k = 1, k <= N Items( thecols ), k++,
If( Column( dt, thecols[k] )[i] != Column( dt, thecols[k] )[i - 1],
thesame = "No"
)
);
// If a change is found, increase the counter
If( thesame == "No",
mySetID
++);
// Set the value of the new column
dt:SetID[i] = mySetID;
);
);