1
1

More than 1 year has passed since last update.

【JavaScript】CSV形式でcsvファイルに書き込むツールを作ってみた

Posted at

はじめに

こんにちは。
今回はちょっとしたツールを作ってみました。
そのツールはタイトル通りのCSV形式でcsvファイルに書き込むツールになります。
具体的には別ファイルで定義してあるオブジェクトを取得そしてJson形式に変換し分解して最終的にcsv形式に変換後csvファイルに出力すると言うことです。
そして今回はnpmの外部パッケージを使用しないと言う制約をつけました。

構成

インストール必須

  • node.js
ディクトリ構成図
 write_csv
├─ test.csv            書き込みを行うcsvファイル
├─ writeCsv.js        実行するコード
└─ text               定義しているファイルはここに入れてある
    ├─ alphabet.js    定義ファイル
    ├─ hiragana.js    定義ファイル
    └─ katakana.js    定義ファイル

実際のコード

writeCsv.js
// 別ファイルから値取得
let alphabet = require('./text/alphabet.js')
let hiragana = require('./text/hiragana.js')
let katakana = require('./text/katakana.js')
// csvに出力する
let csvStr = ""

createText()

// Json変換
function createText() {
  addheder(JSON.stringify(alphabet))
  addText(JSON.stringify(alphabet),"alphabet.js")
  addText(JSON.stringify(hiragana),"hiragana.js")
  addText(JSON.stringify(katakana),"katakana.js")
  writeText()
}

function addheder(json) {
  let count = 1;
  let keys = [""]
  JSON.parse(json,(key)=>{
    if (key) {
      // jsonのkeyの数を取得する
      count++;
      // keyを取得する
      keys.push(key)
    }
  })

  for (let i = 0; i < count; i++) {
    if (i == count-1) {
      // 最後の処理
      csvStr = csvStr.concat(keys[i],"\n")
    } else {
      csvStr = csvStr.concat(keys[i],", ")
    }
  }
}

function addText(json,fileName) {
  let count = 1;
  let values = [fileName]
  JSON.parse(json,(key,value)=>{
    if (key) {
      // keyの数を取得する
      count++;
      values.push(value)
    }
  })

  for (let i = 0; i < count; i++) {
    if (i == count-1) {
      // 最後の処理
      csvStr = csvStr.concat(values[i],"\n")
    } else {
      // それ以外
      csvStr = csvStr.concat(values[i],", ")
    }
  }
}

function writeText() {
  if (csvStr == "") {
    console.log("empty Text .")
    return 
  }
  const fs = require('fs');

  // 既存ファイルの上書きか既存ファイルの書き換えかを以下変数を設定してください
  // 既存ファイルの上書き "overwrite" / 既存ファイルの書き換え "rewrite"
  // 例: const WRITE_CONFIG = "rewrite"
  const WRITE_CONFIG = "rewrite"

  if (WRITE_CONFIG == "rewrite") {
    fs.writeFileSync("./test.csv",csvStr)
    console.log("Rewrite csv file .")
  } else if (WRITE_CONFIG == "overwrite") {
    fs.appendFileSync("./test.csv",csvStr);
    console.log("overwrite csv file .")
  } else {
     console.log("Please check! \nnot write csvfile .")
  }
}

定義ファイル(alphabet.js など)
// ※補足 他ファイルもkeyは全ファイル同じでvalueのみ値が違うと言う想定です。
module.exports = {
  COMMENT_ONE: "TEXT1",
  COMMENT_TWO: "TEXT2",
  COMMENT_THREE: "TEXT3",
  COMMENT_FOUR: "TEXT4",
  COMMENT_FIVE: "TEXT5",
  COMMENT_SIX: "TEXT6",
  COMMENT_SEVEN: "TEXT7",
  COMMENT_EIGHT: "TEXT8",
  COMMENT_NINE: "TEXT9",
  COMMENT_TEN: "TEXT10"
}

実際に実行すると

その前に実行方法としては今回はnode.jsを使用して実行します。
なのでブラウザで実行することはできません。以下のコマンドで実行してください
実行ファイル箇所がある場所までターミナルを移動して以下のコマンドを叩いてください。
$ node writeCsv.js
csvファイルの書き込みをおこないます。
ちなみに出力は以下ようになります。

実行結果
, COMMENT_ONE, COMMENT_TWO, COMMENT_THREE, COMMENT_FOUR, COMMENT_FIVE, COMMENT_SIX, COMMENT_SEVEN, COMMENT_EIGHT, COMMENT_NINE
alphabet.js, TEXT1, TEXT2, TEXT3, TEXT4, TEXT5, TEXT6, TEXT7, TEXT8, TEXT9
hiragana.js, てきすと1, てきすと2, てきすと3, てきすと4, てきすと5, てきすと6, てきすと7, てきすと8, てきすと9
katakana.js, テキスト1, テキスト2, テキスト3, テキスト4, テキスト5, テキスト6, テキスト7, テキスト8, テキスト9

ちょっと解説

では、コードを簡単に解説します。
別ファイル取得時はrequireからやり取りを行なっています。

let alphabet = require('./text/alphabet.js')
let hiragana = require('./text/hiragana.js')
let katakana = require('./text/katakana.js')

そして、JSON.parseで実際にテキストにvalueを配列に詰めているのとfor文実行のためcountをプラスしている処理を実行しています。

 JSON.parse(json,(key,value)=>{
    if (key) {
      // keyの数を取得する
      count++;
      values.push(value)
    }
  })

次にfor文で回しながら配列を見て実際にテキスト詰めています。
そしてまたこの時に","と半角空欄を書き込んでいます。

for (let i = 0; i < count; i++) {
    if (i == count-1) {
      // 最後の処理
      csvStr = csvStr.concat(values[i],"\n")
    } else {
      // それ以外
      csvStr = csvStr.concat(values[i],", ")
    }
  }

そして最後にnode.jsデフォルトのwriteFileSyncを使用してcsvを出力しています。

    // 既存ファイルの上書きか既存ファイルの書き換えかを以下変数を設定してください
  // 既存ファイルの上書き "overwrite" / 既存ファイルの書き換え "rewrite"
  // 例: const WRITE_CONFIG = "rewrite"
  const WRITE_CONFIG = "rewrite"

  if (WRITE_CONFIG == "rewrite") {
    fs.writeFileSync("./test.csv",csvStr)
    console.log("Rewrite csv file .")
  } else if (WRITE_CONFIG == "overwrite") {
    fs.appendFileSync("./test.csv",csvStr);
    console.log("overwrite csv file .")
  } else {
     console.log("Please check! \nnot write csvfile .")
  }

最後に

いかがでしたでしょうか?
今回はちょっとしたツールを作ってみました。
もしかしたら実務などでも参考になったりするかもと言うことで記事にしてみました!
お役に立てると嬉しく思います。
最後までありがとうございました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1