どうも!LSSです!!
AndroidStudio+Kotlinでアプリ開発の勉強中です。
最近、CSVファイルについて人と話す機会があったので、CSVデータを整形する方法をいくつか考えたのですが、
「そうだ、Kotlinでやってしまおう!」
と思いついたので、記事にしてみます^^
※ただ、実際に利用するには自分でKotlinの文字列データを変換する部分を書く必要があります^^;ので記事タイトルには「ほぼネタ」とつけさせていただきました。
- また、Try Kotlinへのリンク張ります
- CSVファイルとは?
- Try KotlinでCSV変換機を作ってみました!
- 処理概要
- 使い方
- 余談:var i=2について
- プログラム書ける人にしか使えないものですね^^;
また、Try Kotlinへのリンク張ります
↑このリンクをクリックするだけで、ブラウザ上でKotlinを試せる環境が出てきます^^
CSVファイルとは?
表形式のデータを「,」(カンマ)区切りで列を、改行で行を表現する事で、テキストファイルで表現したファイルです。
※名前から、Comma Separated Valueと「カンマで区切った値」の略称となっています。
通常、拡張子「.csv」で作られます。
例えば、
TEL1,TEL2,TEL3,姓,名
090,1234,5678,山田,太郎
080,9876,5432,田中,瑠璃子
070,3141,5926,遠周,律夫
中身が↑こんな感じのCSVファイルがあったとして、表計算ソフト(Excelとか)で開くと
↑こんな感じの表として表示されます。
(数字を勝手に数値として扱われるせいで090→90に変換されてしまうのが難点^^;)
Try KotlinでCSV変換機を作ってみました!
↑画面的にはこんな感じ。
コードは、
val csv=
"""
TEL1,TEL2,TEL3,姓,名
090,1234,5678,山田,太郎
080,9876,5432,田中,瑠璃子
070,3141,5926,遠周,律夫
"""
fun main(args: Array<String>) {
println("電話番号,氏名")
val retsuArr=csv.split("\n")
var i=2
while(i < retsuArr.size){
if(retsuArr[i] != ""){
val koumokuArr = retsuArr[i].split(",")
/*変換&出力処理 ここから*/
val tel = "${koumokuArr[0]}-${koumokuArr[1]}-${koumokuArr[2]}"
val shimei = "${koumokuArr[3]} ${koumokuArr[4]}"
println("$tel,$shimei")
/*変換&出力処理 ここまで*/
}
i++
}
}
↑このように書きました。
処理概要
TEL1,TEL2,TEL3,姓,名
090,1234,5678,山田,太郎
080,9876,5432,田中,瑠璃子
070,3141,5926,遠周,律夫
という形式のデータを、
電話番号,氏名
090-1234-5678,山田 太郎
080-9876-5432,田中 瑠璃子
070-3141-5926,遠周 律夫
という形式に変換してくれるソフトです。
使い方
まずコードをTry Kotlinにコピペ
まず、Try Kotlinを開き、上記コードをコピペします。
CSVファイルをテキストとして開き、Kotlinコード内に埋め込み
次に、変換したい元のCSVファイルを、テキストファイルとして開きます。
(WindowsならCSVファイルを右クリックして「プログラムから開く」で「メモ帳」を選択するなど)
そしてその内容のテキストを全選択して、
”””
で挟まれた部分に上書き貼り付けします!
val csv=
"""
TEL1,TEL2,TEL3,姓,名
090,1234,5678,山田,太郎
080,9876,5432,田中,瑠璃子
070,3141,5926,遠周,律夫
"""
↑この緑文字の部分ですね。
実行ボタンクリック
で、データ形式が↑のと同じで、出力したいのも同じであれば右上の
▶をクリックして、左下の
をまたテキストを全選択してCSVファイルにコピペすれば完了です^^
ただ…実際に利用するには処理部分を書き換えないと^^;
とは言っても、変換したい内容って場合によって色々で、
「元のCSVの表すデータ形式」を「結果出力したいデータ形式」にどう変換するかの部分は、それにあわせて書き換える必要がでてきます^^;;;
現在のサンプルは
/*変換&出力処理 ここから*/
val tel = "${koumokuArr[0]}-${koumokuArr[1]}-${koumokuArr[2]}"
val shimei = "${koumokuArr[3]} ${koumokuArr[4]}"
println("$tel,$shimei")
/*変換&出力処理 ここまで*/
という部分で、この中身の変更ですね。
カンマで区切られた一つ目のデータがkoumokuArr[0]に、二つ目のデータがkoumokuArr[2]に、という具合に格納されています。
このサンプルの場合は
「1列目、2列目、3列目(koumokuArr[0~2])を-で連結したものを、変数telに入れる」
「4列目、5列目(koumokuArr[3と4])を全角スペースで連結したものを、変数shimeiに入れる」
という処理をくわえた上で、
println("$tel,$shimei")
で、その2つの間にカンマを入れて出力しています。
あ、あと、最初に
println("電話番号,氏名")
で項目行を出力しているので、ここも出力したい結果に合わせて書き換える必要があります。
余談:var i=2について
ループ処理で、val koumokuArr = retsuArr[i].split(",")としてi番目のretsuArrを処理していますが、そのretsuArrの添え字は
↑こうなっています。
0は0文字の文字列、1は項目名の行なので、実際のデータは入ってるのは2からだからですね。
プログラム書ける人にしか使えないものですね^^;
実用性はだいぶ怪しい…。
ですが、誰かの参考程度にでもなればいいな、と記事にしてしまいますwww
てなとこで、今回はこのへんで!
次回もまた、よろしくお願いいたします^^