Added Head and Tail to Utils category and replaced 'AllBut' argument functionality with support for negative values of n.

This commit is contained in:
n1474335 2017-04-23 18:05:00 +01:00
parent dea214bd2e
commit d081ff745d
3 changed files with 62 additions and 69 deletions

View File

@ -162,6 +162,8 @@ const Categories = [
"Unique",
"Split",
"Filter",
"Head",
"Tail",
"Count occurrences",
"Expand alphabet range",
"Parse escaped string",

View File

@ -3201,9 +3201,9 @@ const OperationConfig = {
description: [
"Like the UNIX head utility.",
"<br>",
"Gets the first $Number of lines.",
"Gets the first n lines.",
"<br>",
"Optionally you can select all but the last $Number of lines.",
"You can select all but the last n lines by entering a negative value for n.",
"<br>",
"The delimiter can be changed so that instead of lines, fields (i.e. commas) are selected instead.",
].join("\n"),
@ -3221,20 +3221,15 @@ const OperationConfig = {
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.",
"Gets the last n lines.",
"<br>",
"Optionally you can select all lines after line $Number.",
"Optionally you can select all lines after line n by entering a negative value for n.",
"<br>",
"The delimiter can be changed so that instead of lines, fields (i.e. commas) are selected instead.",
].join("\n"),
@ -3252,11 +3247,6 @@ const OperationConfig = {
type: "number",
value: 10,
},
{
name: "Start from line $Number",
type: "boolean",
value: false,
},
]
},
};

View File

@ -460,6 +460,62 @@ const StrUtils = {
},
/**
* Head lines operation.
*
* @param {string} input
* @param {Object[]} args
* @returns {string}
*/
runHead: function(input, args) {
let delimiter = args[0],
number = args[1];
delimiter = Utils.charRep[delimiter];
let splitInput = input.split(delimiter);
return splitInput
.filter((line, lineIndex) => {
lineIndex += 1;
if (number < 0) {
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];
delimiter = Utils.charRep[delimiter];
let splitInput = input.split(delimiter);
return splitInput
.filter((line, lineIndex) => {
lineIndex += 1;
if (number < 0) {
return lineIndex > -number;
} else {
return lineIndex > splitInput.length - number;
}
})
.join(delimiter);
},
/**
* Adds HTML highlights to matches within a string.
*
@ -537,61 +593,6 @@ 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;