🌟
シェルでcsv出力して面倒臭い作業を半自動化した。
前回
こういうことをやったので、
面倒臭いことは全部やってしまえという話。
今回やったこと。
都道府県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ファイルは、
ここの都道府県コードからコピペで引っ張って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
参考記事
Discussion