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", "Unique",
"Split", "Split",
"Filter", "Filter",
"Head",
"Tail",
"Count occurrences", "Count occurrences",
"Expand alphabet range", "Expand alphabet range",
"Parse escaped string", "Parse escaped string",

View file

@ -3201,9 +3201,9 @@ const OperationConfig = {
description: [ description: [
"Like the UNIX head utility.", "Like the UNIX head utility.",
"<br>", "<br>",
"Gets the first $Number of lines.", "Gets the first n lines.",
"<br>", "<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>", "<br>",
"The delimiter can be changed so that instead of lines, fields (i.e. commas) are selected instead.", "The delimiter can be changed so that instead of lines, fields (i.e. commas) are selected instead.",
].join("\n"), ].join("\n"),
@ -3221,20 +3221,15 @@ const OperationConfig = {
type: "number", type: "number",
value: 10, value: 10,
}, },
{
name: "All but last $Number of lines",
type: "boolean",
value: false,
},
] ]
}, },
"Tail": { "Tail": {
description: [ description: [
"Like the UNIX tail utility.", "Like the UNIX tail utility.",
"<br>", "<br>",
"Gets the last $Number of lines.", "Gets the last n lines.",
"<br>", "<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>", "<br>",
"The delimiter can be changed so that instead of lines, fields (i.e. commas) are selected instead.", "The delimiter can be changed so that instead of lines, fields (i.e. commas) are selected instead.",
].join("\n"), ].join("\n"),
@ -3252,11 +3247,6 @@ const OperationConfig = {
type: "number", type: "number",
value: 10, 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. * Adds HTML highlights to matches within a string.
* *
@ -537,61 +593,6 @@ const StrUtils = {
return output; 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; export default StrUtils;