Groovyでカンマで区切られたデータ(CSV)を処理する

ライブラリを使用しないで、カンマ区切りのファイルを処理する。

やりたいこと

  • CSVファイルを読み込む
  • CSVファイルを書き込む
  • ""でのエスケープなど厳密なチェックはしない。

データファイル 201009気温.csv

日,平均気温,最高気温,最低気温
1,27.4,31.6,25.4
2,27.5,30.9,25.1
3,29.1,35.7,25.3
4,28.7,34,26.1
5,27.9,31.2,25.2
6,29.3,36.7,25.8
7,29.2,34.9,26.5
8,25.3,28.3,23.2
9,24.4,27.2,22.8
10,24.1,28,20.8
11,27.7,33,23.1
12,27.9,32.2,24.7
13,29.5,33.9,25.7
14,25.1,28.8,21.6
15,22.3,25.5,20.2
16,20.9,22.9,19.4
17,22.7,27,19.6
18,24.2,27.7,21.3
19,24.5,28.4,21.3
20,24.8,29.1,22.2
21,25.5,29.8,22.4
22,28.3,33.4,23.8
23,21.2,27.5,16.7
24,18.5,19.9,16.7
25,19.9,23.6,17.6
26,18.9,23,16.7
27,18,19.2,16.7
28,19.7,24,17.3
29,21.7,25.3,20.1
30,19.4,21.6,17.9

ソース

f = new File(".\\testdata\\201009気温.csv")
def monthlyList = []
f.splitEachLine(","){ data ->
    println "データ:"+ data
    monthlyList.add(data)
}
println "----------"
println monthlyList

println "----------"
f2 = new File(".\\testdata\\201009気温_save.csv")
f2.write("")
monthlyList[1..-1].each{data ->
    line = data[0]+ "日,平均気温:" + data[1] + ",最高気温:" + data[2] + ",最低気温:" + data[3]
    println line
    f2.append(line + "\n")
}

結果

[D:\workspace\groovy_SandBox]groovy Q077_カンマで区切られたデータ_CSV_を処理する.groovy
データ:[日, 平均気温, 最高気温, 最低気温]
データ:[1, 27.4, 31.6, 25.4]
データ:[2, 27.5, 30.9, 25.1]
データ:[3, 29.1, 35.7, 25.3]
データ:[4, 28.7, 34, 26.1]
データ:[5, 27.9, 31.2, 25.2]
データ:[6, 29.3, 36.7, 25.8]
データ:[7, 29.2, 34.9, 26.5]
データ:[8, 25.3, 28.3, 23.2]
データ:[9, 24.4, 27.2, 22.8]
データ:[10, 24.1, 28, 20.8]
データ:[11, 27.7, 33, 23.1]
データ:[12, 27.9, 32.2, 24.7]
データ:[13, 29.5, 33.9, 25.7]
データ:[14, 25.1, 28.8, 21.6]
データ:[15, 22.3, 25.5, 20.2]
データ:[16, 20.9, 22.9, 19.4]
データ:[17, 22.7, 27, 19.6]
データ:[18, 24.2, 27.7, 21.3]
データ:[19, 24.5, 28.4, 21.3]
データ:[20, 24.8, 29.1, 22.2]
データ:[21, 25.5, 29.8, 22.4]
データ:[22, 28.3, 33.4, 23.8]
データ:[23, 21.2, 27.5, 16.7]
データ:[24, 18.5, 19.9, 16.7]
データ:[25, 19.9, 23.6, 17.6]
データ:[26, 18.9, 23, 16.7]
データ:[27, 18, 19.2, 16.7]
データ:[28, 19.7, 24, 17.3]
データ:[29, 21.7, 25.3, 20.1]
データ:[30, 19.4, 21.6, 17.9]
----------
[[日, 平均気温, 最高気温, 最低気温], [1, 27.4, 31.6, 25.4], [2, 27.5, 30.9, 25.1], [3, 29.1, 35.7, 25.3], [4, 28.7, 34, 26.1], [5, 27.9, 31.2, 25.2], [6, 29.3,
36.7, 25.8], [7, 29.2, 34.9, 26.5], [8, 25.3, 28.3, 23.2], [9, 24.4, 27.2, 22.8], [10, 24.1, 28, 20.8], [11, 27.7, 33, 23.1], [12, 27.9, 32.2, 24.7], [13, 29.5, 33.9, 25.7], [14, 25.1, 28.8, 21.6], [15, 22.3, 25.5, 20.2], [16, 20.9, 22.9, 19.4], [17, 22.7, 27, 19.6], [18, 24.2, 27.7, 21.3], [19, 24.5, 28.4, 21.3], [20, 24.8, 29.1, 22.2], [21, 25.5, 29.8, 22.4], [22, 28.3, 33.4, 23.8], [23, 21.2, 27.5, 16.7], [24, 18.5, 19.9, 16.7], [25, 19.9, 23.6, 17.6], [26, 18.9, 23, 16.7], [27, 18, 19.2, 16.7], [28, 19.7, 24, 17.3], [29, 21.7, 25.3, 20.1], [30, 19.4, 21.6, 17.9]]
----------
1日,平均気温:27.4,最高気温:31.6,最低気温:25.4
2日,平均気温:27.5,最高気温:30.9,最低気温:25.1
3日,平均気温:29.1,最高気温:35.7,最低気温:25.3
4日,平均気温:28.7,最高気温:34,最低気温:26.1
5日,平均気温:27.9,最高気温:31.2,最低気温:25.2
6日,平均気温:29.3,最高気温:36.7,最低気温:25.8
7日,平均気温:29.2,最高気温:34.9,最低気温:26.5
8日,平均気温:25.3,最高気温:28.3,最低気温:23.2
9日,平均気温:24.4,最高気温:27.2,最低気温:22.8
10日,平均気温:24.1,最高気温:28,最低気温:20.8
11日,平均気温:27.7,最高気温:33,最低気温:23.1
12日,平均気温:27.9,最高気温:32.2,最低気温:24.7
13日,平均気温:29.5,最高気温:33.9,最低気温:25.7
14日,平均気温:25.1,最高気温:28.8,最低気温:21.6
15日,平均気温:22.3,最高気温:25.5,最低気温:20.2
16日,平均気温:20.9,最高気温:22.9,最低気温:19.4
17日,平均気温:22.7,最高気温:27,最低気温:19.6
18日,平均気温:24.2,最高気温:27.7,最低気温:21.3
19日,平均気温:24.5,最高気温:28.4,最低気温:21.3
20日,平均気温:24.8,最高気温:29.1,最低気温:22.2
21日,平均気温:25.5,最高気温:29.8,最低気温:22.4
22日,平均気温:28.3,最高気温:33.4,最低気温:23.8
23日,平均気温:21.2,最高気温:27.5,最低気温:16.7
24日,平均気温:18.5,最高気温:19.9,最低気温:16.7
25日,平均気温:19.9,最高気温:23.6,最低気温:17.6
26日,平均気温:18.9,最高気温:23,最低気温:16.7
27日,平均気温:18,最高気温:19.2,最低気温:16.7
28日,平均気温:19.7,最高気温:24,最低気温:17.3
29日,平均気温:21.7,最高気温:25.3,最低気温:20.1
30日,平均気温:19.4,最高気温:21.6,最低気温:17.9

出力ファイル 201009気温_save.csvファイルの内容

1日,平均気温:27.4,最高気温:31.6,最低気温:25.4
2日,平均気温:27.5,最高気温:30.9,最低気温:25.1
3日,平均気温:29.1,最高気温:35.7,最低気温:25.3
4日,平均気温:28.7,最高気温:34,最低気温:26.1
5日,平均気温:27.9,最高気温:31.2,最低気温:25.2
6日,平均気温:29.3,最高気温:36.7,最低気温:25.8
7日,平均気温:29.2,最高気温:34.9,最低気温:26.5
8日,平均気温:25.3,最高気温:28.3,最低気温:23.2
9日,平均気温:24.4,最高気温:27.2,最低気温:22.8
10日,平均気温:24.1,最高気温:28,最低気温:20.8
11日,平均気温:27.7,最高気温:33,最低気温:23.1
12日,平均気温:27.9,最高気温:32.2,最低気温:24.7
13日,平均気温:29.5,最高気温:33.9,最低気温:25.7
14日,平均気温:25.1,最高気温:28.8,最低気温:21.6
15日,平均気温:22.3,最高気温:25.5,最低気温:20.2
16日,平均気温:20.9,最高気温:22.9,最低気温:19.4
17日,平均気温:22.7,最高気温:27,最低気温:19.6
18日,平均気温:24.2,最高気温:27.7,最低気温:21.3
19日,平均気温:24.5,最高気温:28.4,最低気温:21.3
20日,平均気温:24.8,最高気温:29.1,最低気温:22.2
21日,平均気温:25.5,最高気温:29.8,最低気温:22.4
22日,平均気温:28.3,最高気温:33.4,最低気温:23.8
23日,平均気温:21.2,最高気温:27.5,最低気温:16.7
24日,平均気温:18.5,最高気温:19.9,最低気温:16.7
25日,平均気温:19.9,最高気温:23.6,最低気温:17.6
26日,平均気温:18.9,最高気温:23,最低気温:16.7
27日,平均気温:18,最高気温:19.2,最低気温:16.7
28日,平均気温:19.7,最高気温:24,最低気温:17.3
29日,平均気温:21.7,最高気温:25.3,最低気温:20.1
30日,平均気温:19.4,最高気温:21.6,最低気温:17.9

実行環境




関連あるかもしれない記事












Groovyの詳細についてはJavadocと以下の書籍を参考にしている。

Groovyイン・アクション
Dierk Konig Andrew Glover Paul King Guillaume Laforge Jon Skeet
毎日コミュニケーションズ
売り上げランキング: 294340


問題自体は以下の書籍のもの。rubyと似てる部分も多いので、ヒントにもなる。
写経でもいいが自分で考えるために他言語の例をGroovyで置き換えてる。

Rubyレシピブック 第2版 268の技
青木 峰郎 後藤 裕蔵 高橋 征義
ソフトバンク クリエイティブ
売り上げランキング: 80467


Groovyイン・アクションを読むならあった方が便利かな。

ブックストッパー

トモエ算盤
売り上げランキング: 614


Rubyレシピブックは「ほんたった」で立ててる