JavaScript library for reading whitespace-separated data, which is a common input data format for tasks in many algorithmic competitions.
npm install --save input-readerconstreader=require('input-reader')constdata=` 4 2 9 1 2 3`constpattern=` a b c ...arr`reader(data,pattern)// { a: 4, b: 2, c: 9, arr: [1, 2, 3] }Module exports single function, which takes three parameters:
reader(data,pattern,options)Parameters:
- data - string containing input data.
- pattern - string describing how data should be mapped to the returned object.
- options - object specifying additional behaviour. Optional.
Return value:
- Object containing input data placed in properties sepecified by pattern parameter.
Single-line mapping
constdata='1 2'constpattern='foo bar'reader(data,pattern)// { foo: 1, bar: 2 }Multi-line mapping
constdata=` 1 2 3 4 5`constpattern=` foo bar a b c`reader(data,pattern)// { foo: 1, bar: 2, a: 3, b: 4, c: 5 }Rest operator Rest operator collects all the remaining elements of the line into an array. It must be used as the last symbol of the line.
constdata=` 1 2 3 4`constpattern=` foo ...bar`reader(data,pattern)// { foo: 1, bar: [2, 3, 4] }Multi-line rest operator Multi-line rest operator collects all the remaining lines into an array. It can be only used in the last line of a pattern string.
constdata=` 9 8 7 6 5`constpattern=` foo ...bar[a b]`reader(data,pattern)// { foo: 9, bar: [{ a: 8, b: 7 }, { a: 6, b: 5 }] }Empty multi-line rest operator If you don't specify the structure of each line, all the values will be collected directly into arrays.
constdata=` 9 8 7 6 5`constpattern=` foo ...bar[]`reader(data,pattern)// { foo: 9, bar: [[8, 7], [6, 5]] }Nested rest operator
constdata=` 9 1 2 3 4 5 6 7 8`constpattern=` foo ...bar[a ...b]`reader(data,pattern)// { foo: 9, bar: [{ a: 1, b: [2, 3, 4] }, { a: 5, b: [6, 7, 8] }] }Convert to numbers
constdata='1 hello'constpattern='foo bar'reader(data,pattern,{convertToNumbers: true})// { foo: 1, bar: 'hello' }reader(data,pattern,{convertToNumbers: false})// { foo: '1', bar: 'hello' }| Property Name | Type | Default Value | Description |
|---|---|---|---|
| convertToNumbers | boolean | true | If true, all elements will be converted to Number type. If conversion results in NaN value, then the original type and value will be left. |