Generates a new TSV string by adding N to each number in the number column. Calculation results are added at the end of the line. This can be used for creating discounted price lists, etc. Removes whitespace from both ends of a string.
Configs
A: Select STRING DATA for TSV Text *
B: Set ID of Numeric Column to be added (e.g. “0”, “3”) *
C: Set Value to add (e.g. “1.5”, “-500”) *
D: Select STRING DATA for New TSV Text (update) *
Script (click to open)
// GraalJS Script (engine type: 2)
// (c) 2021, Questetra, Inc. (the MIT License)
/*
=input tsv=
A1 B1 C1 10000
A2 B1 C1 10800
=N=
-500
=output tsv=
A1 B1 C1 10000 9500
A2 B1 C1 10800 10300
*/
//////// START "main()" ////////
main();
function main(){
//// == Config Retrieving / 工程コンフィグの参照 ==
const dataIdA = configs.get( "conf_DataIdA" ) + ""; // config required
const columnB = configs.get( "conf_ColumnB" ) + ""; // config required
const valueC = configs.get( "conf_ValueC" ) + ""; // config required
const dataIdD = configs.get( "conf_DataIdD" ) + ""; // config required
// 'java.lang.String' to javascript primitive 'string' by ""
engine.log( " AutomatedTask Config: ID of Numeric Column " + columnB );
engine.log( " AutomatedTask Config: Value to add " + valueC );
// Design-time Config Format Check
const intColumnB = parseInt( columnB );
if ( isNaN( intColumnB )){
throw new Error( "\n AutomatedTask ConfigError:" +
" Config {ID of Numeric Column} is not an integer \n" );
}
const numValueC = parseFloat( valueC );
if ( isNaN( numValueC )){
throw new Error( "\n AutomatedTask ConfigError:" +
" Config {Value to add} is not a number \n" );
}
//// == Data Retrieving / ワークフローデータの参照 ==
// Run-time Data Format Check
if( engine.findDataByNumber( dataIdA ) === null ){
throw new Error( "\n AutomatedTask UnexpectedStringError:" +
" String {A} as TSV is null \n" );
}
const inputText = (engine.findDataByNumber( dataIdA ) + "").trim();
if( inputText === "" ){
throw new Error( "\n AutomatedTask UnexpectedStringError:" +
" String {A} as TSV is empty \n" );
}
//// == Calculating / 演算 ==
let outputText = "";
const arrInputText = inputText.split("\n");
engine.log( " AutomatedTask MultilineString:" +
" String {A} as TSV, number of lines " + arrInputText.length );
for( let i = 0; i < arrInputText.length; i++ ){
let arrCellValues = arrInputText[i].split("\t");
let strValueB = arrCellValues[ intColumnB ];
let numValueB = parseFloat( strValueB );
// Run-time Data Format Check
if ( isNaN( numValueB )){
throw new Error( "\n AutomatedTask UnexpectedStringError:" +
" String {A} as TSV, Specified Column is not numeric at " + i + "\n" );
}
let newValue = numValueB + numValueC;
outputText += arrInputText[i] + "\t" + newValue;
if( i !== arrInputText.length - 1 ){
outputText += "\n";
}
}
//// == Data Updating / ワークフローデータへの代入 ==
engine.setDataByNumber( dataIdD, outputText );
} //////// END "main()" ////////
Pingback: TSV String; Sum of Number Column – Questetra Support