TSV 文字列; カラム並べ替え (Tsv String; Re-order Columns)

TSV文字列から列IDリストによって並べ替えられた新しいTSV文字列を抽出します。リスト内のID重複も可能です。必要情報の絞込やフォーマット適合などでご利用いただけます。文字列の末尾先頭にある空白文字や改行文字は削除します。

(C) Questetra, Inc. (MIT License)
https://support.questetra.com/ja/addons/tsv-string-reorder-columns/

Configs
  • A: TSV テキストが格納されている文字列型データ項目を選択してください *
  • B: 抽出カラムのIDリストをセットしてください (例 “0,1,3,0”) *
  • C: 並べ替えられた新しいTSVテキストが格納される文字列型データ項目を選択してください(更新) *
Script (click to open)

// (c) 2019, Questetra, Inc. (the MIT License)

/*
input tsv
A1	B1	C1	D1	E1
A2	B2	C2	D2	E2
column id list
0,1,3,0
output tsv
A1	B1	D1	A1
A2	B2	D2	A2
*/

//////// START "main()" ////////
main();
function main(){ 


//// == Config Retrieving / 工程コンフィグの参照 ==
const dataIdA = configs.get( "conf_DataIdA" ) + ""; // config required
const columns = configs.get( "conf_Columns" ) + ""; // config required
const dataIdC = configs.get( "conf_DataIdC" ) + ""; // config required
// 'java.lang.String' to javascript primitive 'string' by ""

// Design-time Config Format Check
engine.log( " AutomatedTask Config: Column ID List " + columns );
if ( columns.match(/^[0-9][0-9,]*$/) === null ){
  throw new Error( "\n AutomatedTask UnexpectedConfigError:" +
  " Config {Column ID List} allows only numbers and commas. \n" );
}
const arrColumns  = columns.split(",");


//// == 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");
  for( let j = 0; j < arrColumns.length; j++ ){
    if ( arrColumns[j] === "" ){
      throw new Error( "\n AutomatedTask ConfigError:" +
                   " Config {Column ID List} must be CSV format \n" );
    }
    outputText += arrCellValues[ (arrColumns[j] - 0) ];
    if( j !== arrColumns.length - 1 ){
      outputText += "\t";
    }
  }
  if( i !== arrInputText.length - 1 ){
    outputText += "\n";
  }
}


//// == Data Updating / ワークフローデータへの代入 ==
engine.setDataByNumber( dataIdC, outputText );


} //////// END "main()" ////////

Download

Capture

See also

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

%d人のブロガーが「いいね」をつけました。