Re:タブ区切りデータの処理
お題: Server error
投稿: Server error
いまさら投稿してみた。分かりやすく書いたつもりです。
ポイント
- ヘッダとデータは #head(), #tail()を使って取得。
- ヘッダごと入れ替え時は、列を1本ずつ取得してから、#transpose()で行・列を入れ替え。
用意するファイル
test.tsv
ID Surname Forename Age
1 Sato Hanako 17
0 Suzuki Taro 18
ソース
// 入力 def list0 = new File('test.tsv').readLines()*.split('\t') // 第1カラムの値でデータを昇順にソートする。 def list1 = [list0.head(), *(list0.tail().sort{it[0]})] // 第2カラムと第3カラムをヘッダを含めて入れ替える。 def list2 = [ list1*.getAt(0), list1*.getAt(2), // ←第2カラムと list1*.getAt(1), // ←第3カラムの入れ替え list1*.getAt(3) ].transpose() // 第4カラムの値にそれぞれ1を加える。 def list3 = [list2.head(), *(list2.tail().collect{ [*(it[0..2]), it[3].toInteger() + 1] })] // 出力 println """\ [入力時] ${ list0*.join('\t').join('\n') } [出力時] ${ list3*.join('\t').join('\n') }\ """
実行結果
[入力時]
ID Surname Forename Age
1 Sato Hanako 17
0 Suzuki Taro 18[出力時]
ID Forename Surname Age
0 Taro Suzuki 19
1 Hanako Sato 18