Skip to content

Repository files navigation

input-reader

JavaScript library for reading whitespace-separated data, which is a common input data format for tasks in many algorithmic competitions.

Quick Start

Installation

npm install --save input-reader

Example usage

constreader=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] }

API

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.

Pattern syntax

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' }

Options

Property NameTypeDefault ValueDescription
convertToNumbersbooleantrueIf true, all elements will be converted to Number type. If conversion results in NaN value, then the original type and value will be left.

About

JavaScript library for reading whitespace-separated data, which is a common input data format for tasks in many algorithmic competitions.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages