fix: init
This commit is contained in:
81
README.md
Normal file
81
README.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# purescript-csv-stream
|
||||
|
||||
Type-safe bindings for the streaming API of `csv-parse` and `csv-stringify`.
|
||||
|
||||
## Installing
|
||||
```bash
|
||||
spago install csv-stream
|
||||
{bun|yarn|npm|pnpm} install csv-parse csv-stringify
|
||||
```
|
||||
|
||||
## Examples
|
||||
### Stream
|
||||
```purescript
|
||||
module Main where
|
||||
|
||||
import Prelude
|
||||
|
||||
import Effect (Effect)
|
||||
import Effect.Class (liftEffect)
|
||||
import Effect.Aff (launchAff_)
|
||||
import Node.Stream (pipe)
|
||||
import Node.Stream as Stream
|
||||
import Node.Stream.CSV.Stringify as CSV.Stringify
|
||||
import Node.Stream.CSV.Parse as CSV.Parse
|
||||
|
||||
type MyCSVType1 = {a :: Int, b :: Int, bar :: String, baz :: Boolean}
|
||||
type MyCSVType2 = {ab :: Int, bar :: String, baz :: Boolean}
|
||||
|
||||
atob :: MyCSVType1 -> MyCSVType2
|
||||
atob {a, b, bar, baz} = {ab: a + b, bar, baz}
|
||||
|
||||
myCSV :: String
|
||||
myCSV = "a,b,bar,baz\n1,2,\"hello, world!\",true\n3,3,,f"
|
||||
|
||||
main :: Effect Unit
|
||||
main = launchAff_ do
|
||||
parser <- liftEffect $ CSV.Parse.make {}
|
||||
stringifier <- liftEffect $ CSV.Stringify.make {}
|
||||
|
||||
input <- liftEffect $ Stream.readableFromString myCSV
|
||||
liftEffect $ Stream.pipe input parser
|
||||
|
||||
records <- CSV.Parse.readAll parser
|
||||
liftEffect $ for_ records \r -> CSV.Stringify.write $ atob r
|
||||
liftEffect $ Stream.end stringifier
|
||||
|
||||
-- "ab,bar,baz\n3,\"hello, world!\",true\n6,,false"
|
||||
csvString <- CSV.Stringify.readAll stringifier
|
||||
pure unit
|
||||
```
|
||||
|
||||
### Synchronous
|
||||
```purescript
|
||||
module Main where
|
||||
|
||||
import Prelude
|
||||
|
||||
import Effect (Effect)
|
||||
import Effect.Class (liftEffect)
|
||||
import Effect.Aff (launchAff_)
|
||||
import Node.Stream (pipe)
|
||||
import Node.Stream as Stream
|
||||
import Node.Stream.CSV.Stringify as CSV.Stringify
|
||||
import Node.Stream.CSV.Parse as CSV.Parse
|
||||
|
||||
type MyCSVType1 = {a :: Int, b :: Int, bar :: String, baz :: Boolean}
|
||||
type MyCSVType2 = {ab :: Int, bar :: String, baz :: Boolean}
|
||||
|
||||
atob :: MyCSVType1 -> MyCSVType2
|
||||
atob {a, b, bar, baz} = {ab: a + b, bar, baz}
|
||||
|
||||
myCSV :: String
|
||||
myCSV = "a,b,bar,baz\n1,2,\"hello, world!\",true\n3,3,,f"
|
||||
|
||||
main :: Effect Unit
|
||||
main = launchAff_ do
|
||||
records :: Array MyCSVType1 <- CSV.Parse.parse myCSV
|
||||
-- "ab,bar,baz\n3,\"hello, world!\",true\n6,,false"
|
||||
csvString <- CSV.Stringify.stringify (atob <$> records)
|
||||
pure unit
|
||||
```
|
||||
Reference in New Issue
Block a user