宛名書きデータ変換用perl
やっぱりperlは楽
swiftバイナリが32kbなのにkotlin jarが 1.31MBっておかしいだろ..
#!/usr/bin/perl # change Atena CSV (sjis) to kitamura # perl -f jushoChanger.pl <jusho.csv # atena23からは # 姓、名、敬称、連名、連名敬称、自宅〒、自宅住所1、自宅住所2、自宅住所3形式で SJIS CSVで書き出す use utf8; binmode STDOUT, ":utf8"; binmode STDIN, ":encoding(cp932)"; print "姓1,名1,敬称1,姓2,名2,敬称2,姓3,名3,敬称3,姓4,名4,敬称4,姓5,名5,敬称5,姓6,名6,敬称6,〒番号,住所1,住所2,住所3,会社名,部署,役職,御中 \n"; while(<>) { chomp; @i = split(/,/, $_); @j = split(/\//, $i[3]); # はげ/ほげ/えげ/ぼけ @k = split(/\//, $i[4]); # 様/// printf("%s,%s,%s,,%s,%s,,%s,%s,,%s,%s,,%s,%s,,,,%s,%s,%s,%s\n", $i[0],$i[1],$i[2], # 姓1,名1,敬称1, $j[0],$k[0], # ,名2,敬称2, $j[1],$k[1], # ,名3,敬称2, $j[2],$k[2], # ,名4,敬称2, $j[3],$k[3], # ,名5,敬称2, $i[5],$i[6],$i[7],$i[8] # 〒番号,住所1,住所2,住所3, ); }
swift版
// main.swift import Cocoa let args = CommandLine.arguments.dropFirst() guard let file = args.first, !file.isEmpty else { print("ERROR: please input filename") exit(1) } let fileName: String = "./" + file // print("filename: \(fileName)") print("姓1,名1,敬称1,姓2,名2,敬称2,姓3,名3,敬称3,姓4,名4,敬称4,姓5,名5,敬称5,姓6,名6,敬称6,〒番号,住所1,住所2,住所3,会社名,部署,役職,御中") // 姓、名、敬称、連名、連名敬称、自宅〒、自宅住所1、自宅住所2、自宅住所3形式で SJIS CSVで書き出されている if let text = try? String(contentsOfFile: fileName, encoding: String.Encoding.shiftJIS) { text.enumerateLines { (line, stop) in let item = line.components(separatedBy: ",") var sub = item[3].components(separatedBy: "/") // 連名 sub.append("") // 連名がないときに備えて4個ほど""アイテムを追加 sub.append("") sub.append("") sub.append("") var subkei = item[4].components(separatedBy: "/") // 連名敬称 subkei.append("") // 連名がないときに備えて4個ほど""アイテムを追加 subkei.append("") subkei.append("") subkei.append("") print("\(item[0]),\(item[1]),\(item[2]),,\(sub[0]),\(subkei[0]),,\(sub[1]),\(subkei[1]),,\(sub[2]),\(subkei[2]),,\(sub[3]),\(subkei[3]),,,,\(item[5]),\(item[6]),\(item[7]),\(item[8])") } } exit(0)
kotlin版
// kotlinc -d jushoChanger.jar -include-runtime src/main.kt // import java.io.File import kotlin.system.exitProcess fun main(args: Array<String>) { if(args.size!=1) { println("ERROR: please input filename") exitProcess(1) } var fileName = args.first() //println(fileName) println("姓1,名1,敬称1,姓2,名2,敬称2,姓3,名3,敬称3,姓4,名4,敬称4,姓5,名5,敬称5,姓6,名6,敬称6,〒番号,住所1,住所2,住所3,会社名,部署,役職,御中") val textFile = File(fileName).absoluteFile val lines = textFile.readLines(charset("windows-31j")) lines.forEach { val i = it.split(",") var j = i[3].split("/").toMutableList() j.add("") j.add("") j.add("") j.add("") var k = i[4].split("/").toMutableList() k.add("") k.add("") k.add("") k.add("") val s = "%s,%s,%s,,%s,%s,,%s,%s,,%s,%s,,%s,%s,,,,%s,%s,%s,%s".format( i[0],i[1],i[2], j[0],k[0], j[1],k[1], j[2],k[2], j[3],k[3], i[5],i[6],i[7],i[8] ) println(s) } }