CSV 形式ランダムデータの合成(C を使用)(Ubuntu 上)

概要

乱数を用いて,整数,浮動小数点数,文字列,日時を含むデータを合成する C のプログラムである。データベースシステム(データを蓄積・管理するソフトウエア)の機能や性能を試験するためのテスト用データ(試験に使う仮のデータ)を作る目的で用いる。出力は CSV 形式(値をコンマで区切って並べたテキスト形式)である。

目次

プログラム

次の C のプログラムは,指定した行数だけデータを生成し,画面(標準出力)へ CSV 形式で出力する。各行は,通し番号(整数),固定の文字列,二つの浮動小数点数,生成した日時からなる。

#include<stdio.h>
#include<time.h>
#include<sys/time.h>
#include<stdlib.h>
int main(int argc, char** argv)
{
  struct timeval tv;
  struct tm *pnow = NULL;
  int i;
  srand((unsigned)time(NULL));
  for( i = 1; i < atoi(argv[1]); i++ ) {
    gettimeofday(&tv, NULL);
    pnow = localtime(&tv.tv_sec);
    int yy = pnow->tm_year + 1900;
    int mm = pnow->tm_mon + 1;
    int dd = pnow->tm_mday;
    int h = pnow->tm_hour;
    int m = pnow->tm_min;
    int s = pnow->tm_sec;
    int msec = tv.tv_usec;
    /* K, NAME */
    printf( "%12.12d, A001, ", i );
    /* B1, B2 */
    printf( "%f, %f, ", 100.0 * ((double)rand()) / RAND_MAX, 100.0 * ((double)rand()) / RAND_MAX );
    /* created_at */
    printf( "%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d.%6.6d\n", yy, mm, dd, h, m, s, msec );
  }
  return 0;
}

使い方

  1. 上のプログラムを populate.c のようなファイル名で保存する。
  2. コンパイルする。

    Ubuntu では,次のように gcc(GNUのCコンパイラ)を使ってコンパイルする。-o は出力ファイル名を指定するオプションである。

    gcc -o populate.out populate.c
  3. 次のようにして実行する。

    10」のところには,生成したいデータの行数を指定する。

    ./populate.out 10
  4. 次のようなファイルが得られる。

    整数,浮動小数点数,文字列,日時を含むデータである。画面に出た結果をファイルへ保存したいときは,./populate.out 10 > data.csv のようにリダイレクト(出力先をファイルに切り替える書き方)を使う。

動作チェック、利用(csvkitと組み合わせ

python populate.py 10 | csvlook          # 生成結果を整形表示して確認する
python populate.py 10 | csvstat           # 生成結果の統計を確認する
python populate.py 10 > data.csv
csvsql --db "postgresql:///testdb" --insert data.csv   # DBへ投入する