Add Head and Tail operations

This commit is contained in:
toby 2017-04-21 23:06:59 -04:00
parent 07bb095e73
commit dea214bd2e
3 changed files with 338 additions and 1 deletions

View file

@ -3196,7 +3196,69 @@ const OperationConfig = {
outputType: "html",
args: [
]
}
},
"Head": {
description: [
"Like the UNIX head utility.",
"<br>",
"Gets the first $Number of lines.",
"<br>",
"Optionally you can select all but the last $Number of lines.",
"<br>",
"The delimiter can be changed so that instead of lines, fields (i.e. commas) are selected instead.",
].join("\n"),
run: StrUtils.runHead,
inputType: "string",
outputType: "string",
args: [
{
name: "Delimiter",
type: "option",
value: StrUtils.DELIMITER_OPTIONS
},
{
name: "Number",
type: "number",
value: 10,
},
{
name: "All but last $Number of lines",
type: "boolean",
value: false,
},
]
},
"Tail": {
description: [
"Like the UNIX tail utility.",
"<br>",
"Gets the last $Number of lines.",
"<br>",
"Optionally you can select all lines after line $Number.",
"<br>",
"The delimiter can be changed so that instead of lines, fields (i.e. commas) are selected instead.",
].join("\n"),
run: StrUtils.runTail,
inputType: "string",
outputType: "string",
args: [
{
name: "Delimiter",
type: "option",
value: StrUtils.DELIMITER_OPTIONS
},
{
name: "Number",
type: "number",
value: 10,
},
{
name: "Start from line $Number",
type: "boolean",
value: false,
},
]
},
};
export default OperationConfig;

View file

@ -537,6 +537,61 @@ const StrUtils = {
return output;
},
/**
* Head lines operation.
*
* @param {string} input
* @param {Object[]} args
* @returns {string}
*/
runHead: function(input, args) {
let delimiter = args[0],
number = args[1],
allBut = args[2];
delimiter = Utils.charRep[delimiter];
let splitInput = input.split(delimiter);
return splitInput
.filter((line, lineIndex) => {
lineIndex += 1;
if (allBut) {
return lineIndex <= splitInput.length - number;
} else {
return lineIndex <= number;
}
})
.join(delimiter);
},
/**
* Tail lines operation.
*
* @param {string} input
* @param {Object[]} args
* @returns {string}
*/
runTail: function(input, args) {
let delimiter = args[0],
number = args[1],
allBut = args[2];
delimiter = Utils.charRep[delimiter];
let splitInput = input.split(delimiter);
return splitInput
.filter((line, lineIndex) => {
lineIndex += 1;
if (allBut) {
return lineIndex >= number;
} else {
return lineIndex > splitInput.length - number;
}
})
.join(delimiter);
},
};
export default StrUtils;