• 締切済

    質問Ruby on Railsで住所自動入力作成したい

    • 2014/6/25
    • do79tama13

    よくホームページ等のユーザー登録画面にある、郵便番号を入力してボタンを押すと自動的にテキストボックス内に住所が表示される画面を作成したいのですが、Railsでどのように作成すればよいか分かりません。

    どなたか詳しい方いらっしゃいましたらご教示願います。

  • 回答

    • 2014/6/25
    • ki073

    No.1です。
    まず、郵便番号のデータベースを作る必要があるのですが、
    質問者さんのRubyのプログラムをどの程度書けるのか分かりませんので、まず概略だけを書いておきます、それと
    使用しているOSも書いてください。


    郵便番号データは
    http://www.post.japanpost.jp/zipcode/dl/kogaki.h …
    から「全国一括」をダウンロードして、基本的な部分だけにしてください。表計算ソフトでもできますし、プログラムを書いてやっても構いません。
    最初の方は
    600000北海道札幌市中央区以下に掲載がない場合
    640941北海道札幌市中央区旭ケ丘
    600041北海道札幌市中央区大通東
    600042北海道札幌市中央区大通西(1~19丁目)
    で必要なデータ、
    郵便番号、都道府県名、市区町村名、町域名だけにします。上のような感じです。
    これをデータベースに登録します。(テーブル1つに全部読み込ませた方が楽かも)

    コンパクトなデータにしたいのでしたら、
    都道府県名、市区町村名は重複がいっぱい有りますので、
    テーブルを3つに分けています。
    都道府県名と全国地方公共団体コードの上位2桁で1つのテーブルを作り
    市区町村名と全国地方公共団体コードでテーブルを作り
    町域名と全国地方公共団体コード、郵便番号でテーブルを
    以上のようにすると、コンパクトになります。こちらではこのように作りました。

    このあたりのプログラムもあるのですが、どうしましょうか???

    続きを読む

  • 締切済

    質問c言語プログラムについて

    • 2010/4/7
    • nardobrea

    http://www.post.japanpost.jp/zipcode/dl/kokagi.h …
    から全国一括(1,735,160Byte)をダウンロード

    このファイルを使って、

    Linuxマシン上で、
    例えば、北海道札幌市中央区旭ケ丘 と入力すれば、0640941 と返却されるプログラム(引数はコマンドラインで)をcで作成したいと思っているのですが、ファイルのダウンロードとファイルの読み込みまでは出来たのですが、その後の「北海道札幌市中央区旭ケ丘 と入力すれば、0640941」からが分かりません。どなたか続きを教えて頂けないでしょうか?

    使用OS:fedora

    一応、ソースを載せておきます
    #include <stdio.h>

    int main(void){
    FILE *fp;

    char *fname="ken_all.csv";

    char d[100];
    char e[100];
    char f[100];
    char g[100];
    char h[100];
    char i[100];

    int ret,a,b,c;

    fp = fopen("ken_all.csv", "r");

    if (fp == NULL) {
    printf("ファイルをオープンできませんでした\n",fname);
    return -1;
    }
    while( (ret = fscanf( fp, "%[^, ],%d,%d,%s,%s,%s,%s,%s,%s", &a, &b, &c, d, e, f, g, h, i ) ) != EOF ){
    printf( "%d %d %d %s %s %s %s %s %s", a, b, c, d, e, f, g , h , i);
    }

    fclose(fp);
    return 0;

    }

    続きを読む

  • 回答

    • 2010/4/12
    • hiroshi09s

    #2 です。


    >hiroshi09s様のソースを参考にコンパイルして実行してみましたが、「Segmentation fault」になってしまいました。何が原因と考えられるのでしょうか?


     通常は、設定変数メモリ枠を超えたアクセス(読み書き)に発生し、そのエラーを「Segmentation fault」と知らせてくれます。



    >お礼の所ですいません。動いてはいるみたいですが、正しい結果が出るのは最初の3件(北海道札幌市中央区大通東)までで、残りは「Segmentation fault」なってしまいます。

    ・・・ということは、2~3件目において動いているならば10件になろうと100件、1000件になろうと同じですから、そのことを配慮すれば、あなたの提示したCSVファイルの内容(書式)が4件目から違っていると思われます。したがって、データについて、更に3~6件目くらいのCVSの内容を同じ展開になっているのかチェックする必要があります。
     それともう1つ考えられるのは

    while(fgets(buff,SIZE,fp) != NULL) {
    setstr(line.dummy,buff);
    setstr(line.head_num,NULL);

    の setstr() における buff と NULL の使い方です。strtok() は「 static char * 」を使っているため、fgets() 直後の setstr() は NULL ではなく、きちんと「 buff である」とスタート位置を示す必要があります。単に NULL を続けると容量をオーバーし「Segmentation fault」となります。

    続きを読む

  • 締切済

    質問エクセルの郵便番号から住所抽出について

    • 2008/3/24
    • noname#168641

    エクセルで郵便番号を打てば住所がでるようにしたいのです。
    A1--193-0934と打てばB2--八王子小比企町
    といったように関数がわかりません。
    教えていただけませんか。
    お願いいたします 

  • 回答

    • 2008/3/24
    • chie65536

    http://www.post.japanpost.jp/zipcode/download.html
    から、郵便番号データ全件をダウンロードして下さい。

    そして、
    A列     B列
    060-0000 北海道札幌市中央区以下に掲載がない場合
    064-0941 北海道札幌市中央区旭ケ丘
    060-0041 北海道札幌市中央区大通東
    060-0042 北海道札幌市中央区大通西(1~19丁目)
    064-0820 北海道札幌市中央区大通西(20~28丁目)
    060-0031 北海道札幌市中央区北一条東

    C列     D列
    100-0000 東京都千代田区以下に掲載がない場合
    102-0072 東京都千代田区飯田橋
    102-0082 東京都千代田区一番町
    101-0032 東京都千代田区岩本町
    101-0047 東京都千代田区内神田

    E列     F列
    200-0000 (以下略)

    と言う感じの検索用ブックを作ります。

    なお「検索用ブックには65536行しか入らず、郵便番号のリスト全件をそのまま縦1列に入れる事が不可能」なので

    A列には0から始まる郵便番号
    B列にはA列の住所
    C列には1から始まる郵便番号
    D列にはC列の住所
    E列には2から始まる郵便番号
    F列にはE列の住所
          |
    S列には9から始まる郵便番号
    T列にはS列の住所

    と言う感じで、工夫したブックを作るのが肝心です。

    検索ブックが出来たら、B2セルに
    =CHOOSE(MID(A1,1,1)+1,VLOOKUP(A1,[検索ブック.XLS]Sheet1!A:B,2,FALSE),VLOOKUP(A1,[検索ブック.XLS]Sheet1!C:D,2,FALSE),VLOOKUP(A1,[検索ブック.XLS]Sheet1!E:F,2,FALSE),VLOOKUP(A1,[検索ブック.XLS]Sheet1!G:H,2,FALSE),VLOOKUP(A1,[検索ブック.XLS]Sheet1!I:J,2,FALSE),VLOOKUP(A1,[検索ブック.XLS]Sheet1!K:L,2,FALSE),VLOOKUP(A1,[検索ブック.XLS]Sheet1!M:N,2,FALSE),VLOOKUP(A1,[検索ブック.XLS]Sheet1!O:P,2,FALSE),VLOOKUP(A1,[検索ブック.XLS]Sheet1!Q:R,2,FALSE),VLOOKUP(A1,[検索ブック.XLS]Sheet1!S:T,2,FALSE))
    と言う式を入れましょう。そうすれば、A1セルに「193-0934」で「東京都八王子市小比企町」が出ます。

    もし「あたまの1文字の0~9で10個に分けても、65536行じゃ足りない」と言う場合は、もう少し工夫が必要です。

    続きを読む