スプシの大規模データを整理するときに楽になったので備忘録として残します。
**この記事の目標 : 住所が大阪の人をリストアップしてテキストデータに書き出す!**この記事で扱うデータはフィクションです。実在の人物や団体などとは関係ありません。
※この記事のダミーデータはこちらからお借りしています。
→テストデータ・ジェネレータ
#使用環境
OS: macOS
Node: v12.2.0
npm: 6.9.0
#パッケージのインストール
Nodeとnpmの環境設定は省略しています。
まずはターミナルから適当なプロジェクトフォルダに必要なパッケージをインストールします。
$npm init -y
$npm i -D fs csvtojson js-beautify
csvtojsonがコンバータ
#csv -> json の変換
スプシからcsvをダウンロード
変換スクリプトを書く
let fs = require('fs');
let csv = require('csvtojson');
let beautify = require('js-beautify').js;
let csvFile = './checksheet.csv';
csv().fromFile(csvFile).then((jsonData)=>{
fs.writeFile('checksheet.json', beautify(JSON.stringify(jsonData),{}), function(err) {
if (err) console.log('error', err);
});
});
スプシからダウンロードした[checksheet.csv]を[checksheet.json]に変換して
beautifyでインデントを追加して書き出す命令を記述。
$ node csvjson_converter.js
ターミナルからスクリプトを実行
こんな感じのjsonが書き出されました。
#必要な要素をリスト化してテキストデータに保存する。
条件を絞って、[.txt]データに書き出します。
let fs = require('fs');
// check item
let json = JSON.parse(fs.readFileSync("checksheet.json"));
let targetItem = [];
json.forEach(function(value,index){
if(value.住所.match(/大阪/)){
// console.log(value.url);
targetItem.push(value.名前+" : "+value.住所+"\n");
}
});
fs.writeFile('大阪の人.txt',targetItem,function(err){
let texts = fs.readFileSync('大阪の人.txt','utf-8');
console.log(texts);
fs.writeFile('大阪の人.txt',texts.replace(/\,/g,""),function(err){});
});
先ほど書き出した[checksheet.json]を読み込んで、[住所]の項目が[大阪]を含む値を判定。
条件に当てはまったデータを[大阪の人.txt]に書き出し。
$ node checkitem.js
ターミナルからスクリプトを実行
この記事で扱うデータはフィクションです。実在の人物や団体などとは関係ありませ
条件式の使い方次第で色々絞り込めます。
↓生年月日から20代を絞り込みの場合
//if(value.住所.match(/大阪/)){
if(1998 >= value.生年月日.slice(0,4) && 1989 <= value.生年月日.slice(0,4)){
#おわりに
スプシのフィルタ機能でカバーできない様な、痒いところに手が届いた気がしました。
スプシ1行目に空のデータがあると、自動で "field番号":[{値},{..}]
が当て込まれるので注意です。
うまく書き換えて、ejsを使ったHTML書き出しにも使えそうです。
###出典