Guest User

Untitled

a guest
Jun 20th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. #!/usr/bin/env node
  2. const program = require('commander')
  3. const { promisify } = require('util')
  4. const fs = require('fs')
  5. const csv = require('csv')
  6. const moment = require('moment')
  7. const {
  8. map,
  9. filter
  10. } = require('lodash')
  11.  
  12. program
  13. .option('-i, --in <in>', 'Input CSV')
  14. .option('-o, --out <out>', 'Output CSV')
  15. .parse(process.argv)
  16.  
  17. async function main () {
  18. if (!program.in) throw new Error('No input file specified')
  19. if (!program.out) throw new Error('No output file specified')
  20.  
  21. console.log(`Reading from: ${program.in}`)
  22. const inputCsv = await promisify(fs.readFile)(program.in, { encoding: 'utf8' })
  23. const parsedCsv = await promisify(csv.parse)(inputCsv, { columns: true })
  24.  
  25. // Fix dates to ISO format that python strftime expects (6 digit microsecond, not 3)
  26. const processedCsv = map(parsedCsv, (r => {
  27. const ReceivedDateTime = moment.utc(r.ReceivedDateTime).format('Y-MM-DD[T]HH:mm:ss.SSSSSS')
  28. return Object.assign({}, r, { ReceivedDateTime })
  29. }))
  30.  
  31. const filteredCsv = filter(processedCsv, (r => !moment(r.ReceivedDateTime).isAfter(moment())))
  32. console.log(`Filtered ${parsedCsv.length - filteredCsv.length} records`)
  33.  
  34. console.log(`Writing to: ${program.out}`)
  35. const stringifiedCsv = await promisify(csv.stringify)(filteredCsv, { header: true })
  36. await promisify(fs.writeFile)(program.out, stringifiedCsv, { encoding: `utf8` })
  37. }
  38.  
  39. main()
Add Comment
Please, Sign In to add comment