掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
カスタマバーコード (ID:28876)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
http://www.post.japanpost.jp/zipcode/download.html からダウンロードできる CSV ファイルを使用します 東京都千代田区霞が関1丁目3番2号 郵便プラザ503室 を Edit に入力して実行すると 1000013 が出てきます *実際には 霞が関(次のビルを除く) になってしまっているので見付かりませんが 最後に S1 に1丁目3番2号 郵便プラザ503室 が入力されるので 数字の抜き出しは自分でやってみてください 全件データから探すと時間がかかるので Edit1 の文字列から都道府県を区別し、読み込む CSV を分ければ処理時間を短く出来ると思います unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls,StrUtils, ComCtrls; type TFieldData = Record Data1 : String; Data2 : String; Data3 : String; Data4 : String; Data5 : String; Data6 : String; End; TForm2 = class(TForm) OpenDialog1: TOpenDialog; Panel1: TPanel; Button1: TButton; Edit1: TEdit; Button2: TButton; PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; Memo1: TMemo; Memo2: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form2: TForm2; StringList : TStringList; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin if OpenDialog1.Execute = True then begin PageControl1.ActivePageIndex := 1; StringList.LoadFromFile(OpenDialog1.FileName); Memo2.Lines.Text := StringList.Text; end; end; procedure TForm2.Button2Click(Sender: TObject); var I,I2,J,L,L1,L2,L3,FoundLength,FirstIndex,FoundIndex : Integer; S,S1,S2,S3,SE : String; B1,B2,Found,Error,EOF : Boolean; procedure GetData(S:String; var S1,S2,S3 : String; var L1,L2,L3: Integer); var J,K,K2,K3,K4 : Integer; begin //1行分のデータを取得 K := 0; for J:=0 to 4 do begin K := PosEx('","',S,K+1); end; K2 := PosEx('","',S,K +1); K3 := PosEx('","',S,K2+1); K4 := PosEx('",' ,S,K3+1); S1 := Copy(S,K +3,K2-K -3); //都道府県 S2 := Copy(S,K2+3,K3-K2-3); //市町村 S3 := Copy(S,K3+3,K4-K3-3); L1 := Length(S1); L2 := Length(S2); L3 := Length(S3); end; function GetZipCode(S:String):String; var K2,K3 : Integer; begin K2 := PosEx('","',S,1); K3 := PosEx('","',S,K2+1); Memo1.Lines.Add (Copy(S,K2+3,K3-K2-3)); end; begin Memo1.Lines.Clear; PageControl1.ActivePageIndex := 0; SE := Edit1.Text; I := 0; FoundIndex := -1; Error := False; Found := False; EOF := False; while (I < StringList.Count -1) and (EOF = False) do begin S := StringList[I]; GetData(S,S1,S2,S3,L1,L2,L3); if Copy(SE,1,L1+L2) = S1+S2 then begin B2 := True; if B1 = False then begin if S3 = '以下に掲載がない場合' then begin B1 := True; FirstIndex := I; end; end; if Copy(SE,1,L1+L2+L3) = S1+S2+S3 then begin //一致した if FoundLength < Length(S1+S2+S3) then begin FoundLength := Length(S1+S2+S3); FoundIndex := I; end; Found := True; end; end else if B2 = True then begin //最低1件は見付かっている if Found = True then begin S := StringList[FoundIndex]; GetData(S,S1,S2,S3,L1,L2,L3); Memo1.Lines.Add ('一致するデータ'); Memo1.Lines.Add(S1+S2+S3); Memo1.Lines.Add (GetZipCode(S)); EOF := True; end else if B1 = True then begin S := StringList[FirstIndex]; GetData(S,S1,S2,S3,L1,L2,L3); Memo1.Lines.Add ('一致するデータ(以下に掲載が無い場合)'); Memo1.Lines.Add (S1+S2); Memo1.Lines.Add (GetZipCode(S)); S3 := ''; EOF := True; end; end; Inc(I); end; if B2 = True then begin Memo1.Lines.Add('残りのデータ'); //残りのデータ L := Length(S1+S2+S3); S1 := Copy(SE,L+1,Length(S)-L); Memo1.Lines.Add(S1); end else begin Memo1.Lines.Add('見付かりませんでした'); end; Memo1.Lines.Add('終了'); end; procedure TForm2.FormCreate(Sender: TObject); begin StringList := TStringList.Create; end; procedure TForm2.FormDestroy(Sender: TObject); begin StringList.Free; end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.