fix: fromDecimal Auto delimiter now correctly parses multiple numbers (#2270)
This commit is contained in:
parent
c7898130e7
commit
5a01c71098
@ -24,12 +24,12 @@ import Utils from "../Utils.mjs";
|
||||
* fromDecimal("10:20:30", "Colon");
|
||||
*/
|
||||
export function fromDecimal(data, delim="Auto") {
|
||||
delim = Utils.charRep(delim);
|
||||
const output = [];
|
||||
let byteStr = data.split(delim);
|
||||
if (byteStr[byteStr.length-1] === "")
|
||||
byteStr = byteStr.slice(0, byteStr.length-1);
|
||||
const delimRegex = delim === "Auto" ? /[^\d-]+/ : Utils.regexRep(delim);
|
||||
let byteStr = data.split(delimRegex);
|
||||
|
||||
byteStr = byteStr.filter(str => str !== "");
|
||||
|
||||
const output = [];
|
||||
for (let i = 0; i < byteStr.length; i++) {
|
||||
output[i] = parseInt(byteStr[i], 10);
|
||||
}
|
||||
|
||||
@ -8,6 +8,11 @@ import Operation from "../Operation.mjs";
|
||||
import {DELIM_OPTIONS} from "../lib/Delim.mjs";
|
||||
import {fromDecimal} from "../lib/Decimal.mjs";
|
||||
|
||||
/**
|
||||
* From Decimal delimiters, plus auto-detection.
|
||||
*/
|
||||
const FROM_DECIMAL_DELIM_OPTIONS = [...DELIM_OPTIONS, "Auto"];
|
||||
|
||||
/**
|
||||
* From Decimal operation
|
||||
*/
|
||||
@ -28,7 +33,7 @@ class FromDecimal extends Operation {
|
||||
{
|
||||
"name": "Delimiter",
|
||||
"type": "option",
|
||||
"value": DELIM_OPTIONS
|
||||
"value": FROM_DECIMAL_DELIM_OPTIONS
|
||||
},
|
||||
{
|
||||
"name": "Support signed values",
|
||||
|
||||
@ -30,4 +30,59 @@ TestRegister.addTests([
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "From Decimal with Auto delimiter (space)",
|
||||
input: "72 101 108 108 111",
|
||||
expectedOutput: "Hello",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "From Decimal",
|
||||
args: ["Auto", false]
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "From Decimal with Auto delimiter (comma)",
|
||||
input: "72,101,108,108,111",
|
||||
expectedOutput: "Hello",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "From Decimal",
|
||||
args: ["Auto", false]
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "From Decimal with Auto delimiter (mixed)",
|
||||
input: "72, 101 : 108; 108\t111",
|
||||
expectedOutput: "Hello",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "From Decimal",
|
||||
args: ["Auto", false]
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "From Decimal with Auto delimiter (newline)",
|
||||
input: "72\n101\n108\n108\n111",
|
||||
expectedOutput: "Hello",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "From Decimal",
|
||||
args: ["Auto", false]
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "From Decimal with Auto delimiter and signed values",
|
||||
input: "-130 -140 -152 -151 115 33 0 -1",
|
||||
expectedOutput: "~this!\u0000\u00ff",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "From Decimal",
|
||||
args: ["Auto", true]
|
||||
},
|
||||
],
|
||||
},
|
||||
]);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user