計算機科学のブログ

C - 小さなツールの作成 - 1つのことだけをうまくやる - カンマ区切りデータの読み込み, JSON形式での表示

Head First C ―頭とからだで覚えるCの基本David Griffiths(著)、 Dawn Griffiths(著)、 中田 秀基(監修)、 木下 哲也(翻訳)、 O’Reilly Media)の 3章(小さなツールの作成 - 1つのことだけをうまくやる)、p.105(ポケットコード)の解答を求めてみる。

コード

main.c

#include <stdio.h>
#include <stdbool.h>

int main(int argc, char const *argv[])
{
    float latitude;
    float longitude;
    char info[80];
    bool started = false;

    puts("data[");
    while (scanf("%f,%f,%79[^\n]", &latitude, &longitude, info) == 3)
    {
        if (started)
        {
            printf(",\n");
        }
        else
        {
            started = true;
        }
        printf("{latitude: %f, longitude: %f, info: '%s'}", latitude, longitude, info);
    }
    puts("\n]");
}

temp.csv

1,2,info1
3,4,info2
5,6,info3
7,8,info4
9,10,info5

入出力結果(Terminal, Zsh)

% cc main.c && ./a.out < temp.csv
data[
{latitude: 1.000000, longitude: 2.000000, info: 'info1'},
{latitude: 3.000000, longitude: 4.000000, info: 'info2'},
{latitude: 5.000000, longitude: 6.000000, info: 'info3'},
{latitude: 7.000000, longitude: 8.000000, info: 'info4'},
{latitude: 9.000000, longitude: 10.000000, info: 'info5'}
]
%