--
-- 郵便番号検索 v1.2 without Grid
--
--
-- (C) 2002-2005 AtmarkArtWorks Corp, All Rights Reserved.
--
global db1, db2, db3, db4, db5, db6, db7, db8
global pullDownList
global g1, g2
global searchType
global gTime
on keySearch
member("result box").text = ""
member("time msg").text = ""
member("search txt").text = ""
if 1 <= searchType and searchType < 5 then
keyword = member("keyword").text
if keyword <> "" then
if searchType = 1 then
searchZip5Init(keyword)
else if searchType = 2 then
searchZip7Init(keyword)
else if searchType = 3 then
searchKanjiInit(keyword)
else if searchType = 4 then
searchKanaInit(keyword)
end if
else
alert("キーワードを入力してください。")
end if
else if searchType = 5 then
set pullDownList to sendSprite (11, #DropList_Selection)
provinceNum = pullDownList[#item]
if provinceNum <> 1 then
province = pullDownList[#text]
searchProvinceInit(province)
else
alert("キーワードを選択してください。")
end if
end if
end
on closeDb
db1 = 0
db2 = 0
db3 = 0
db4 = 0
db5 = 0
db6 = 0
db7 = 0
db8 = 0
-- clearStr()
end
--
-- changed
--
on initUbin
onInitPain()
db1 = member("rs")
db1.openFile = "@郵便番号.xls"
if db1.openStatus = #no_open then
alert("エクセルファイルのオープンに失敗しました。終了します。")
quit
end if
updateStage
offInitPain()
end
global ret
global resultLst
global dbcnt
global keyStr
global db
global searchStr
--
-- 5桁郵便番号検索
--
on searchZip5Init data
ret = []
resultLst = []
dbcnt = 0
searchStr = data
onSearchPain()
go to marker(0) + 6
end
on searchZip5First
dbcnt = dbcnt + 1
member("search txt").text = dbcnt &"/8"
updatestage
--db = value("db"&dbcnt)
db = member("rs")
db.sheet(dbcnt)
ret = db.searchFirst(4, 1, searchStr)
if ret = 1 then
-- 次ぎのフレームで検索を処理
else -- ret = 0
-- エラー
-- 検索終了処理
go to marker(0) + 8
end if
end
on searchZip5
repeat while 1
ret = db.searchNext()
if ret[1] = 1 then -- キーワード一致
valzip5 = ret[2] -- 一致セルデータ
valzip7 = db.readNextX()
valkana = db.readNextX()
valkana = valkana && db.readNextX()
valkana = valkana && db.readNextX()
valpro = db.readNextX()
valkanji = db.readNextX()
valkanji = valkanji && db.readNextX()
str = valzip5 && valzip7 && valkana && valpro &&valkanji
resultLst.append(str)
else if ret[1] = 2 then -- キーワード不一致
--
-- 最後まで検索終了
--
exit repeat
end if
end repeat
if dbcnt = 8 then go to marker(0) + 8
else go to marker(0) + 6
-- go the frame
end
on searchEnd
--
-- TEXT キャストは 64KB 以上データを扱えない。ここでは32KBまで表示。
--
offSearchPain()
onOutput()
if resultLst.count <> 0 then
tmp = 0
repeat with i = 1 to resultLst.count
tmp = 8 + tmp + resultLst[i].length
if tmp > 32768 then exit repeat
member("result box").line[i] = "[" & i & "]" & resultLst[i]
end repeat
else
member("result box").text = "一致するキーワードはありませんでした"
end if
offOutput()
-- 終了処理
--closeDb()
go to marker(0) + 1
end
--
-- 7桁郵便番号検索
--
on searchZip7Init data
ret = []
resultLst = []
dbcnt = 0
searchStr = data
onSearchPain()
go to marker(0) + 6
end
on searchZip7First
dbcnt = dbcnt + 1
member("search txt").text = dbcnt &"/8"
updatestage
--db = value("db"&dbcnt)
db = db1
db.sheet(dbcnt)
ret = db.searchFirst(5, 1, searchStr)
if ret = 1 then
-- 次ぎのフレームで検索を処理
else -- ret = 0
-- エラー
-- 検索終了処理
go to marker(0) + 8
end if
end
on searchZip7
repeat while 1
ret = db.searchNext()
if ret[1] = 1 then -- キーワード一致
valzip7 = ret[2] -- 一致セルデータ
valkana = db.readNextX()
valkana = valkana && db.readNextX()
valkana = valkana && db.readNextX()
valpro = db.readNextX()
valkanji = db.readNextX()
valkanji = valkanji && db.readNextX()
valzip5 = db.read(3, db.y()) -- キーより左側のデータなので直接読み出す
str = valzip5 && valzip7 && valkana && valpro &&valkanji
resultLst.append(str)
else if ret[1] = 2 then -- キーワード不一致
--
-- 最後まで検索終了
--
exit repeat
end if
end repeat
if dbcnt = 8 then go to marker(0) + 8
else go to marker(0) + 6
-- go the frame
end
--
-- 都道府県 郵便番号検索
--
on searchProvinceInit data
ret = []
resultLst = []
dbcnt = 0
searchStr = data
onSearchPain()
go to marker(0) + 6
end
on searchProvinceFirst
dbcnt = dbcnt + 1
member("search txt").text = dbcnt &"/8"
updatestage
--db = value("db"&dbcnt)
db = db1
db.sheet(dbcnt)
ret = db.searchFirst(3, 1, searchStr)
if ret = 1 then
-- 次ぎのフレームで検索を処理
else -- ret = 0
-- エラー
-- 検索終了処理
go to marker(0) + 8
end if
end
on searchProvince
repeat while 1
ret = db.searchNext()
if ret[1] = 1 then -- キーワード一致
valpro = ret[2] -- 一致セルデータ
valkanji = db.readNextX()
valkanji = valkanji && db.readNextX()
-- キーより左側のデータなので直接読み出す
-- xls データを readNext で読めるように変更すると高速に処理できる
row = db.y()
valzip5 = db.read(3, row)
valzip7 = db.read(4, row)
valkana = db.read(5, row)
valkana = valkana && db.read(6, row)
valkana = valkana && db.read(7, row)
str = valzip5 && valzip7 && valkana && valpro &&valkanji
resultLst.append(str)
else if ret[1] = 2 then -- キーワード不一致
--
-- 最後まで検索終了
--
exit repeat
end if
end repeat
if dbcnt = 8 then go to marker(0) + 8
else go to marker(0) + 6
-- go the frame
end
--
-- 漢字 郵便番号検索 (2つの項目を連結して検索、時間がかかる方法)
--
on searchKanjiInit data
ret = []
resultLst = []
dbcnt = 0
searchStr = data
onSearchPain()
go to marker(0) + 6
end
on searchKanjiFirst
dbcnt = dbcnt + 1
member("search txt").text = dbcnt &"/8"
updatestage
--db = value("db"&dbcnt)
db = db1
db.sheet(dbcnt)
valkanji = db.readFirst(9, 2)
valkanji = valkanji && db.readNextX()
if valkanji contains searchStr then
-- キーより左側のデータなので直接読み出す
-- xls データを readNext で読めるように変更すると高速に処理できる
row = db.y()
valzip5 = db.read(3, row)
valzip7 = db.read(4, row)
valkana = db.read(5, row)
valkana = valkana && db.read(6, row)
valkana = valkana && db.read(7, row)
valpro = db.read(8, row) && valkanji
str = valzip5 && valzip7 && valkana && valkanji
resultLst.append(str)
end if
end
on searchKanji
num = db.tate()
repeat with i = 2 to num -- readFirstr の1回分を差し引く
valkanji = db.readNext()
valkanji = valkanji && db.readNextX()
if valkanji contains searchStr then
-- キーより左側のデータなので直接読み出す
-- xls データを readNext で読めるように変更すると高速に処理できる
row = db.y()
valzip5 = db.read(3, row)
valzip7 = db.read(4, row)
valkana = db.read(5, row)
valkana = valkana && db.read(6, row)
valkana = valkana && db.read(7, row)
valpro = db.read(8, row) && valkanji
str = valzip5 && valzip7 && valkana && valkanji && valpro
resultLst.append(str)
end if
end repeat
if dbcnt = 8 then
go to marker(0) + 8
else
go to marker(0) + 6
end if
end
--
-- かな 郵便番号検索
-- searchFirst を2つの項目に対して処理する。半角全角は同一視。
--
on searchKanaInit data
ret = []
resultLst = []
dbcnt = 0
searchStr = data
onSearchPain()
go to marker(0) + 5
end
on searchKanaFirst1
dbcnt = dbcnt + 1
member("search txt").text = dbcnt &"/8"
updatestage
--db = value("db"&dbcnt)
db = db1
db1.sheet(dbcnt)
ret = db.searchFirst(7, 1, searchStr)
if ret = 1 then
-- 次ぎのフレームで検索を処理
else -- ret = 0
-- エラー
-- 検索終了処理
go to marker(0) + 9
end if
end
on searchKana1
repeat while 1
ret = db.searchNext()
if ret[1] = 1 then -- キーワード一致
valkana = ret[2] -- 一致セルデータ
valkana = valkana && db.readNextX()
valpro = db.readNextX()
valkanji = db.readNextX()
valkanji = valkanji && db.readNextX()
-- キーより左側のデータなので直接読み出す
-- xls データを readNext で読めるように変更すると高速に処理できる
row = db.y()
valzip5 = db.read(3, row)
valzip7 = db.read(4, row)
valkana = db.read(5, row) && valkana
str = valzip5 && valzip7 && valkana && valpro &&valkanji
resultLst.append(str)
else if ret[1] = 2 then -- キーワード不一致
--
-- 最後まで検索終了
--
exit repeat
end if
end repeat
if dbcnt = 8 then
dbcnt = 0
go to marker(0) + 7 -- 次ぎの検索処理
else
go to marker(0) + 5
end if
-- go the frame
end
on searchKanaFirst2
dbcnt = dbcnt + 1
member("search txt").text = dbcnt &"/8"
updatestage
--db = value("db"&dbcnt)
db = db1
db.sheet(dbcnt)
ret = db.searchFirst(8, 1, searchStr)
if ret = 1 then
-- 次ぎのフレームで検索を処理
else -- ret = 0
-- エラー
-- 検索終了処理
go to marker(0) + 9
end if
end
on searchKana2
repeat while 1
ret = db.searchNext()
if ret[1] = 1 then -- キーワード一致
valkana = ret[2] -- 一致セルデータ
valkana = valkana && db.readNextX()
valpro = db.readNextX()
valkanji = db.readNextX()
valkanji = valkanji && db.readNextX()
-- キーより左側のデータなので直接読み出す
-- xls データを readNext で読めるように変更すると高速に処理できる
row = db.y()
valzip5 = db.read(3, row)
valzip7 = db.read(4, row)
valkana = db.read(5, row) && valkana
str = valzip5 && valzip7 && valkana && valpro &&valkanji
resultLst.append(str)
else if ret[1] = 2 then -- キーワード不一致
--
-- 最後まで検索終了
--
exit repeat
end if
end repeat
if dbcnt = 8 then go to marker(0) + 9
else go to marker(0) + 7
-- go the frame
end
on startMovie
clearStr()
searchType = 0
initUbin()
end startMovie
on stopMovie
closeDB()
end
on clearStr
member("keyword").text = ""
member("result box").text = ""
member("time msg").text = ""
member("search txt").text = ""
end
on onInitPain
sprite(40).loch = 247
sprite(41).loch = 258
gTime = the ticks
updateStage
end
on offInitPain
sprite(40).loch = -500
sprite(41).loch = -500
updateStage
gTime = the ticks - gTime
member("time init msg").text = "▼初期化:" & (gTime / 60.0) & "秒 "
end
on onSearchPain
sprite(42).loch = 247
sprite(43).loch = 258
sprite(44).loch = 184
gTime = the ticks
updateStage
end
on offSearchPain
sprite(42).loch = -500
sprite(43).loch = -500
sprite(44).loch = -500
gTime = the ticks - gTime
--msg = member("time msg").text
msg = msg & "▼検索:" & (gTime / 60.0) & "秒 "
TotalLine = 0
db.sheet(1)
TotalLine = TotalLine + db.tate()
db.sheet(2)
TotalLine = TotalLine + db.tate()
db.sheet(3)
TotalLine = TotalLine + db.tate()
db.sheet(4)
TotalLine = TotalLine + db.tate()
db.sheet(5)
TotalLine = TotalLine + db.tate()
db.sheet(6)
TotalLine = TotalLine + db.tate()
db.sheet(7)
TotalLine = TotalLine + db.tate()
db.sheet(8)
TotalLine = TotalLine + db.tate()
msg = msg & "▼ヒット:" & resultLst.count & " / " & TotalLine
member("time msg").text = msg
updateStage
end
on onOutput
sprite(45).loch = 247
sprite(46).loch = 258
updateStage
end
on offOutput
sprite(45).loch = -500
sprite(46).loch = -500
updateStage
end
|