package jp.co.atmarkit.eclipse;
import java.io.*;
import java.util.*;

public class ZipCode {
	public static ZipCode searchByZip(String zipCodeString)
		throws IOException {
		ZipCode zipCode = null;
		InputStream t_in =
			ZipCode.class.getClassLoader().getResourceAsStream("KEN_ALL.CSV");
		BufferedReader in = new BufferedReader(new InputStreamReader(t_in));
		String line;
		while ((line = in.readLine()) != null) {
			zipCode = new ZipCode(line);
			if (zipCode.郵便番号.equals(zipCodeString)) {
				break;
			}
		}
		if (line == null)
			zipCode = null; // 見つからなかったらnullを返す
		return zipCode;
	}
	int 全国地方公共団体コード;
	String 旧郵便番号;
	String 郵便番号;
	String 都道府県名カナ;
	String 市区町村名カナ;
	String 町域名半角カナ;
	public String 都道府県名;
	public String 市区町村名;
	public String 町域名;
	boolean 一町域が二以上の郵便番号で表されるか;
	boolean 小字毎に番地が起番されているか;
	boolean 丁目を有する町域か;
	boolean 一つの郵便番号で二以上の町域を表すか;
	int 更新の表示;
	// 「0」は変更なし、「1」は変更あり、「2」廃止（廃止データのみ使用））
	int 変更理由;
	// 「0」は変更なし、「1」市政・区政・町政・分区・政令指定都市施行、
	// 「2」住居表示の実施、「3」区画整理、「4」郵便区調整、集配局新設、
	// 「5」訂正、「6」廃止(廃止データのみ使用))

	protected ZipCode(String line) {
		super();
		try {
			StringTokenizer csvDevider = new StringTokenizer(line, ",\"");
			if (csvDevider.countTokens() != 15) {
				throw new InstantiationError("入力フォーマットが異なります; " + line);
			}
			this.全国地方公共団体コード = Integer.parseInt(csvDevider.nextToken());
			this.旧郵便番号 = csvDevider.nextToken();
			this.郵便番号 = csvDevider.nextToken();
			this.都道府県名カナ = csvDevider.nextToken();
			this.市区町村名カナ = csvDevider.nextToken();
			this.町域名半角カナ = csvDevider.nextToken();
			this.都道府県名 = csvDevider.nextToken();
			this.市区町村名 = csvDevider.nextToken();
			this.町域名 = csvDevider.nextToken();
			this.一町域が二以上の郵便番号で表されるか = csvDevider.nextToken().equals("1");
			this.小字毎に番地が起番されているか = csvDevider.nextToken().equals("1");
			this.丁目を有する町域か = csvDevider.nextToken().equals("1");
			this.一つの郵便番号で二以上の町域を表すか = csvDevider.nextToken().equals("1");
			this.更新の表示 = Integer.parseInt(csvDevider.nextToken());
			this.変更理由 = Integer.parseInt(csvDevider.nextToken());
		} catch (NumberFormatException ex) {
			throw new InstantiationError("入力フォーマットが異なります; " + ex.getMessage());
		}
	}
}

