TypeScript + Node クリップボードにコピーした内容をCSV形式に変換する簡単なプログラムをつくってみた

仕様

以下のような文字列をクリップボードにコピーします。

hoge
1
true
foo
2
false
bar
3
true

プログラムを実行します。

npm run start 3

3 はCSVのカラム数です。

以下が出力されます。

hoge,1,true
foo,2,false
bar,3,true

実装紹介

コードのみ紹介です。clipboardy というnpmモジュールを使いました。

import * as clipboard from 'clipboardy'
import getColumnNumFromArg from './helper/getColumnNumFromArg.js'
import makeOutput from './helper/makeOutput.js'

const main = (): void => {
  const columnNum = getColumnNumFromArg()

  const c = clipboard.readSync()
  const arr = c.split(/\r\n/)

  const output = makeOutput(arr, columnNum)

  console.log(output)
}

main()
const makeOutput = (arr: string[], columnNum: number): string =>
  arr.reduce((prev, current, index) => {
    if ((index + 1) % columnNum === 0) {
      return `${prev}${current}\r\n`
    } else {
      return `${prev}${current},`
    }
  }, '')

export default makeOutput
const getColumnNumFromArg = () => {
  const columnNum = parseInt(process.argv[2])
  if (isNaN(columnNum)) throw Error('カラム数を数値で指定してください')
  return columnNum
}

export default getColumnNumFromArg