Neverending Pile of Messages

    @thi.ng/csv
    TypeScript icon, indicating that this package has built-in type declarations

    0.1.28 • Public • Published

    csv

    npm version npm downloads Twitter Follow

    This project is part of the @thi.ng/umbrella monorepo.

    About

    Customizable, transducer-based CSV parser/object mapper and transformer.

    Partially ported and extended from the Clojure versions of the ws-ldn-1 and resonate-2014 workshop repos.

    Features

    The parser supports customizable delimiters, quoted and unquoted cells, line breaks within quoted cells. Being transducer based, memory usage is kept at a minimum by only processing single lines of (pre-split) text. For CSV records spanning multiple lines (due to line breaks), new results are only emitted/processed downstream once a logical CSV row is complete.

    Also, being transducer based means the parser can be easily integrated into more complex data preparation, cleaning or conversion workflows. See @thi.ng/transducers for more details/ideas.

    Status

    BETA - possibly breaking changes forthcoming

    Search or submit any issues for this package

    Planned features

    • [x] Simple CSV row parsing w/o object mapping (parseCSVSimple())
    • [ ] CSV output from structured data
    • [ ] CSVW support (#257)
    • [ ] Integration with thi.ng/egf

    Installation

    yarn add @thi.ng/csv
    // ES module
    <script type="module" src="https://unpkg.com/@thi.ng/csv?module" crossorigin></script>
    
    // UMD
    <script src="https://unpkg.com/@thi.ng/csv/lib/index.umd.js" crossorigin></script>

    Package sizes (gzipped, pre-treeshake): ESM: 1.07 KB / CJS: 1.15 KB / UMD: 1.16 KB

    Dependencies

    API

    Generated API docs

    Also see extensive doc strings for parseCSV() and CSVOpts. See parseCSVSimple() and parseCSVFromString() for alternatives and syntax sugar forms.

    import { parseCSV, upper, float } from "@thi.ng/csv";
    
    [...parseCSV(
      {
        all: false,
        cols: {
          "country": { tx: upper },
          "latitude": { alias: "lat", tx: float(0) },
          "longitude": { alias: "lon", tx: float(0) },
        }
      },
      [
         `"country","country group","name (en)","latitude","longitude"`,
         `"at","eu","Austria","47.6965545","13.34598005"`,
         `"be","eu","Belgium","50.501045","4.47667405"`,
         `"bg","eu","Bulgaria","42.72567375","25.4823218"`,
      ]
    )]
    
    // [
    //   { country: 'AT', lat: 47.6965545, lon: 13.34598005 },
    //   { country: 'BE', lat: 50.501045, lon: 4.47667405 },
    //   { country: 'BG', lat: 42.72567375, lon: 25.4823218 }
    // ]

    Authors

    Karsten Schmidt

    If this project contributes to an academic publication, please cite it as:

    @misc{thing-csv,
      title = "@thi.ng/csv",
      author = "Karsten Schmidt",
      note = "https://thi.ng/csv",
      year = 2014
    }

    License

    © 2014 - 2021 Karsten Schmidt // Apache Software License 2.0

    Install

    npm i @thi.ng/csv

    DownloadsWeekly Downloads

    42

    Version

    0.1.28

    License

    Apache-2.0

    Unpacked Size

    57.2 kB

    Total Files

    16

    Last publish

    Collaborators

    • avatar