🌟

シェルでcsv出力して面倒臭い作業を半自動化した。

2021/09/02に公開約4,500字

前回

https://zenn.dev/apple_nktn/articles/d0f923d8b906d1

こういうことをやったので、

面倒臭いことは全部やってしまえという話。

今回やったこと。

都道府県APIを叩かなければならなくなったので、

それをシェル叩いてandroidのstringファイル生成とenumの中身を生成した。

コード

#!/bin/bash

# 読み込みたいファイルを入れる。
CSV_FILE=todohuken.csv
# 処理
cat ${CSV_FILE} | while read line; do
    colmun1=`echo ${line} | cut -d ' ' -f 1` 
    colmun2=`echo ${line} | cut -d ' ' -f 2`
    colmun3=`echo ${line} | cut -d ' ' -f 3`
    colmun3low=`echo ${line} | tr '[:upper:]' '[:lower:]' | cut -d ' ' -f 3`
    colmun4=`echo ${line} | cut -d ' ' -f 4`
    
    # ログ出力
    echo ${colmun1}
    echo ${colmun2}
    echo ${colmun3}
    echo ${colmun3low}
    echo ${colmun4}

    # csvに出力
    echo "<string name="\""${colmun3}"\"">${colmun2}</string>" >> string_result.csv
    echo "${colmun3}(\"${colmun1}\", R.string.${colmun3low})," >> enum_result.csv
done

解説

csvファイルは、

https://www.land.mlit.go.jp/webland/api.html

ここの都道府県コードからコピペで引っ張ってcsvファイル作成 -> todohuken.csv

引っ張ったやつを手動で整形(自動化できる系ならしたほうがいい)して、

カラム位置を

cut -d ' ' -f 1` 

で判定(,で分けたりしたければシングルクオートの中身を','こうすればいい)

tr '[:upper:]' '[:lower:]'

これで小文字変換をしている。

処理の後に

>> hogehoge.csv

等とすることでファイルを生成しつつそこに書き込んでくれる。

.txtでも.xmlでも何でもいいのでよしなに。

生成したもの

<string name=Hokkaido>北海道</string>
<string name=Aomori>青森県</string>
<string name=Iwate>岩手県</string>
<string name=Miyagi>宮城県</string>
<string name=Akita>秋田県</string>
<string name=Yamagata>山形県</string>
<string name=Fukushima>福島県</string>
<string name=Ibaraki>茨城県</string>
<string name=Tochigi>栃木県</string>
<string name=Gunma>群馬県</string>
<string name=Saitama>埼玉県</string>
<string name=Chiba>千葉県</string>
<string name=Tokyo>東京都</string>
<string name=Kanagawa>神奈川県</string>
<string name=Niigata>新潟県</string>
<string name=Toyama>富山県</string>
<string name=Ishikawa>石川県</string>
<string name=Fukui>福井県</string>
<string name=Yamanashi>山梨県</string>
<string name=Nagano>長野県</string>
<string name=Gifu>岐阜県</string>
<string name=Shizuoka>静岡県</string>
<string name=Aichi>愛知県</string>
<string name=Mie>三重県</string>
<string name=Shiga>滋賀県</string>
<string name=Kyoto>京都府</string>
<string name=Osaka>大阪府</string>
<string name=Hyogo>兵庫県</string>
<string name=Nara>奈良県</string>
<string name=Wakayama>和歌山県</string>
<string name=Tottori>鳥取県</string>
<string name=Shimane>島根県</string>
<string name=Okayama>岡山県</string>
<string name=Hiroshima>広島県</string>
<string name=Yamaguchi>山口県</string>
<string name=Tokushima>徳島県</string>
<string name=Kagawa>香川県</string>
<string name=Ehime>愛媛県</string>
<string name=Kochi>高知県</string>
<string name=Fukuoka>福岡県</string>
<string name=Saga>佐賀県</string>
<string name=Nagasaki>長崎県</string>
<string name=Kumamoto>熊本県</string>
<string name=Oita>大分県</string>
<string name=Miyazaki>宮崎県</string>
<string name=Kagoshima>鹿児島県</string>
<string name=Okinawa>沖縄県</string>
Hokkaido("01", R.string.hokkaido),
Aomori("02", R.string.aomori),
Iwate("03", R.string.iwate),
Miyagi("04", R.string.miyagi),
Akita("05", R.string.akita),
Yamagata("06", R.string.yamagata),
Fukushima("07", R.string.fukushima),
Ibaraki("08", R.string.ibaraki),
Tochigi("09", R.string.tochigi),
Gunma("10", R.string.gunma),
Saitama("11", R.string.saitama),
Chiba("12", R.string.chiba),
Tokyo("13", R.string.tokyo),
Kanagawa("14", R.string.kanagawa),
Niigata("15", R.string.niigata),
Toyama("16", R.string.toyama),
Ishikawa("17", R.string.ishikawa),
Fukui("18", R.string.fukui),
Yamanashi("19", R.string.yamanashi),
Nagano("20", R.string.nagano),
Gifu("21", R.string.gifu),
Shizuoka("22", R.string.shizuoka),
Aichi("23", R.string.aichi),
Mie("24", R.string.mie),
Shiga("25", R.string.shiga),
Kyoto("26", R.string.kyoto),
Osaka("27", R.string.osaka),
Hyogo("28", R.string.hyogo),
Nara("29", R.string.nara),
Wakayama("30", R.string.wakayama),
Tottori("31", R.string.tottori),
Shimane("32", R.string.shimane),
Okayama("33", R.string.okayama),
Hiroshima("34", R.string.hiroshima),
Yamaguchi("35", R.string.yamaguchi),
Tokushima("36", R.string.tokushima),
Kagawa("37", R.string.kagawa),
Ehime("38", R.string.ehime),
Kochi("39", R.string.kochi),
Fukuoka("40", R.string.fukuoka),
Saga("41", R.string.saga),
Nagasaki("42", R.string.nagasaki),
Kumamoto("43", R.string.kumamoto),
Oita("44", R.string.oita),
Miyazaki("45", R.string.miyazaki),
Kagoshima("46", R.string.kagoshima),
Okinawa("47", R.string.okinawa),

完全に自動化したければclass hogehogeとかも書いて、

出力を.ktとかにすればおk

参考記事

https://qiita.com/SoarTec-lab/items/4475ba6de612fba3f163

https://www.yukiiworks.com/archives/62

https://genzouw.com/entry/2019/05/20/150054/1511/

Discussion

ログインするとコメントできます