全都道府県の総人口と、65歳以上の人口がTAB区切り形式で記録された
データファイル age65.dat
がある。これを読み込み、65歳以上の人口比率の高い順に並べ換えた
結果をCSV形式・タブ区切り形式で出力し、他のソフトウェアで利用
してみよう。
結果をCSV形式で出力するプログラムは以下のようになる。
#include <stdio.h>
#include <stdlib.h>
#define BSIZE 100
#define PMAX 50
struct age65 {
char pref[20];
int total;
int over65;
float ratio65;
};
int compare_age65(const void *x, const void *y)
{
struct age65 *a = (struct age65 *)x;
struct age65 *b = (struct age65 *)y;
float epsilon = 0.00002;
if (a->ratio65 - b->ratio65 > epsilon)
return -1;
else if (b->ratio65 - a->ratio65 > epsilon)
return 1;
else
return 0;
}
output_csv(struct age65 x[], int n)
{
int i;
for (i=0; i<n; i++) {
printf("%s,%.3f\n", x[i].pref, 100*x[i].ratio65);
}
}
int main(int argc, char *argv[])
{
int n, fields;
FILE *fp;
char buf[BSIZE];
struct age65 data[PMAX];
if (argv[1] == NULL) {
fp = stdin;
} else {
if (NULL == (fp=fopen(argv[1], "r"))) {
fprintf(stderr, "%s ファイルを用意しといてね(^_-)\n", argv[1]);
exit(1);
}
}
/* 読み込み開始 */
n=0;
while (NULL != fgets(buf, BSIZE, fp)) {
fields = sscanf(buf, "%19s %d %d",
data[n].pref, &data[n].total, &data[n].over65);
if (fields == 3) {
data[n].ratio65 = (float)data[n].over65/data[n].total;
n++;
}
}
if (fp != stdin)
fclose(fp);
qsort(data, n, sizeof data[0], compare_age65);
output_csv(data, n);
}
このプログラムにデータを与えて実行した結果をファイルに保存しよう。
gcc -o age65csv age65csv.c
./age65csv age65.dat > output.csv
less output.csv (中味を確認。qで抜ける)
作成したデータファイル output.csv
を StarSuite で読み込んでグラフ化してみよう。
ooffice output.csv
「テキストのインポート」ウィンドウが現れるので、
が選択されるように注意してから [OK]
をクリックする。
1位〜10位をグラフ化してみよう。以下のようにする。
[完了] を選ぶとグラフオブジェクトが挿入される。錨マーク(アンカーボタ ン)を押すとスプレッドシート内に定着する。
グラフを画像化すればWebページなど広い範囲で利用可能になる。 最も汎用性の高いJPEG形式にしてみよう。グラフを定着化した状態で グラフオブジェクトを選択し、C-c でコピーする(右クリック → コピー(C)でも良い)。
メニュー → ファイル(F) → 新規作成(N) → 図形描画(D)
で図形描画ソフト Draw を起動。C-v をタイプして グラフを張りつける。これをJPEG形式に「エクスポート」すれば良い。
メニュー → ファイル(F) → エクスポート(E)
- 保存ディレクトリを
~/C-lang
にする- ファイル名は適当に決める
- ファイルの種類(T) → JPEG
保存した画像ファイルは、余白が大きすぎたりすることがあるので、
GIMPなどの画像処理ソフトで余白を切り取っておくのが良い。
エクスポートした画像のファイル名が foo.jpg
だとすると、
これをGIMPで編集するには、
gimp foo.jpg &
としgimpを起動する。道具箱からカット
を選択し、切り取りたい領域を指定して、「切り抜き」をクリックする。
もう一度ファイルを保存(C-s)すれば切り抜いたものが完成する。