計算機科学のブログ

C - 小さなツールの作成 - 1つのことだけをうまくやる - パイプ

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

コード

bermuda.c

#include <stdio.h>

int main()
{
    float latitude;
    float longitude;
    char info[80];
    while (scanf("%f,%f,%79[^\n]", &latitude, &longitude, info) == 3)
    {
        if (latitude > 26 && latitude < 34)
        {
            if (longitude > -76 && longitude < -64)
            {
                printf("%f,%f,%s\n", latitude, longitude, info);
            }
        }
    }
}

temp.csv

1,2,info1
3,4,info2
5,6,info3
7,8,info4
27,-70,info5
30,-70,info6
-90,10,info7

入出力結果(Terminal, Zsh)

% cc bermuda.c -o bermuda              
% cat temp.csv | ./bermuda
27.000000,-70.000000,info5
30.000000,-70.000000,info6
% cat temp.csv | ./bermuda | ./geo2json 
data=[
{latitude: 27.000000, longitude: -70.000000, info: 'info5'},
{latitude: 30.000000, longitude: -70.000000, info: 'info6'}
]
% (./bermuda | ./geo2json ) < temp.csv 
data=[
{latitude: 27.000000, longitude: -70.000000, info: 'info5'},
{latitude: 30.000000, longitude: -70.000000, info: 'info6'}
]
%