gikoha’s blog

個人的メモがわり

宛名職人からキタムラへ

宛名書きデータ変換用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)
    }
}