//////// START "main()" ////////
main();
function main(){
//// == Config Retrieving / 工程コンフィグの参照 ==
const dataIdA = configs.get( "conf_DataIdA" ) + "";
const dataIdB = configs.get( "conf_DataIdB" ) + "";
const saveAs = configs.get( "conf_SaveAs" ) + "";
// 'java.lang.String' (String Obj) to javascript primitive 'string'
let fileName = "";
if( saveAs === "" ){
fileName = "Mizuho.csv";
}else{
fileName = saveAs;
}
//// == Data Retrieving / ワークフローデータの参照 ==
var myFiles = engine.findDataByNumber( dataIdA );
var upFiles = engine.findDataByNumber( dataIdB );
// java.util.ArrayList
if (myFiles === null || myFiles.size() != 1) {
throw new Error( "\n One-file attachment is only valid. \n" );
}
if (upFiles === null ) {
upFiles = new java.util.ArrayList();
}
//// == Calculating / 演算 ==
/// Read Lines
let myLineCounter = 0;
let allText = "";
fileRepository.readFile(myFiles.get(0), "Shift_JIS", function(line) {
allText += line;
myLineCounter++;
});
engine.log( "#Line of Text-File: " + myLineCounter );
/// Remove CRLF
allText = allText.replace(/\r?\n/g, "");
/// Divide into 120 characters each
let arrRecords = allText.match(/[\s\S]{120}/g);
if (arrRecords === null || !arrRecords[0].startsWith("1") ) {
throw new Error( "\n Not a ZENGIN file \n" );
}
/// Generate CSV
let csvText = "";
for( let i = 0; i < arrRecords.length; i++ ){
if( arrRecords[i].startsWith("2") ){
engine.log( i + " is a data record" );
csvText += arrRecords[i].slice( 20, 23 );
csvText += arrRecords[i].slice( 43, 50 );
csvText += ",";
csvText += arrRecords[i].slice( 80, 90 );
csvText += ",0";
csvText += "\n";
}
}
/// Generate CSV files
csvText = csvText.trim(); // remove last "\n"
let arrCsvText = csvText.split("\n");
let numOfFiles = Math.ceil( arrCsvText.length / 20 );
engine.log( "# of Output Files: " + numOfFiles );
/// Add to Files Array
for( let i = 0; i < numOfFiles; i++ ){
const csvFileText = arrCsvText.slice( i*20, i*20+20 ).join("\n");
if( i !== 0 ){ fileName = fileName.replace(/(\.[\w\d]+)$/i, "-"+(i+1)+"$1");}
upFiles.add( new com.questetra.bpms.core.event.scripttask.NewQfile(
fileName, "text/comma-separated-values; charset=Shift_JIS", csvFileText ));
}
//// == Data Updating / ワークフローデータへの代入 ==
engine.setDataByNumber( dataIdB, upFiles );
} //////// END "main()" ////////