易語(yǔ)言純IP數(shù)據(jù)庫(kù)查詢代碼實(shí)例
以下是我們給大家分享了易語(yǔ)言IP數(shù)據(jù)庫(kù)查詢相關(guān)的內(nèi)容代碼,大家可以測(cè)試下
.版本 2 .支持庫(kù) spec .程序集 程序集1 .子程序 _啟動(dòng)子程序, 整數(shù)型, , 請(qǐng)?jiān)诒咀映绦蛑蟹胖靡啄K初始化代碼 _臨時(shí)子程序 () ' 在初始化代碼執(zhí)行完畢后調(diào)用測(cè)試代碼 返回 (0) ' 可以根據(jù)您的需要返回任意數(shù)值 .子程序 _臨時(shí)子程序 ' 本名稱子程序用作測(cè)試程序用,僅在開(kāi)發(fā)及調(diào)試環(huán)境中有效,編譯發(fā)布程序前將被系統(tǒng)自動(dòng)清空,請(qǐng)將所有用作測(cè)試的臨時(shí)代碼放在本子程序中。 ***注意不要修改本子程序的名稱、參數(shù)及返回值類型。 調(diào)試輸出 (查詢IP歸屬地 (“192.168.0.0”)) .子程序 查詢IP歸屬地, 文本型, 公開(kāi), 查詢IP地址的地理位置 .參數(shù) IP地址, 文本型, , 可以是域名 .參數(shù) 數(shù)據(jù)庫(kù)文件名, 文本型, 可空 .局部變量 文件號(hào), 整數(shù)型 .局部變量 文件頭字節(jié)集, 字節(jié)集 .局部變量 IP數(shù)量, 長(zhǎng)整數(shù)型 .局部變量 計(jì)次變量, 整數(shù)型 .局部變量 開(kāi)始IP字節(jié)集, 字節(jié)集 .局部變量 結(jié)束IP偏移, 長(zhǎng)整數(shù)型 .局部變量 結(jié)束IP字節(jié)集, 字節(jié)集 .局部變量 地區(qū)偏移, 長(zhǎng)整數(shù)型 .局部變量 查詢IP數(shù)值, 長(zhǎng)整數(shù)型 .局部變量 地區(qū)文本, 文本型 .局部變量 IP段信息, 文本型 .局部變量 開(kāi)始IP讀取位置, 長(zhǎng)整數(shù)型 .局部變量 開(kāi)始ip, 文本型 .局部變量 結(jié)束IP, 文本型 .局部變量 first_start_ip_offset, 長(zhǎng)整數(shù)型 .局部變量 last_start_ip_offset, 長(zhǎng)整數(shù)型 .局部變量 開(kāi)始IP數(shù)值, 長(zhǎng)整數(shù)型 .局部變量 結(jié)束IP數(shù)值, 長(zhǎng)整數(shù)型 .如果真 (IP地址 = “”) 返回 (“”) .如果真結(jié)束 .如果真 (是否為空 (數(shù)據(jù)庫(kù)文件名)) 數(shù)據(jù)庫(kù)文件名 = “.\QQWry.dat” .如果真結(jié)束 文件號(hào) = 打開(kāi)文件 (數(shù)據(jù)庫(kù)文件名, #讀入, #無(wú)限制) .如果真 (文件號(hào) = 0) 信息框 (“沒(méi)找到數(shù)據(jù)庫(kù)”, 0, , ) 返回 (“”) .如果真結(jié)束 文件頭字節(jié)集 = 讀入字節(jié)集 (文件號(hào), 8) first_start_ip_offset = 取字節(jié)集數(shù)據(jù) (取字節(jié)集左邊 (文件頭字節(jié)集, 4), #整數(shù)型, ) last_start_ip_offset = 取字節(jié)集數(shù)據(jù) (取字節(jié)集右邊 (文件頭字節(jié)集, 4), #整數(shù)型, ) IP數(shù)量 = (last_start_ip_offset - first_start_ip_offset) \ 7 + 1 查詢IP數(shù)值 = IP文本轉(zhuǎn)整數(shù)值 (IP地址) 開(kāi)始IP讀取位置 = 二分法確定位置 (文件號(hào), first_start_ip_offset, 1, IP數(shù)量, 查詢IP數(shù)值) 移動(dòng)讀寫(xiě)位置 (文件號(hào), , first_start_ip_offset + (開(kāi)始IP讀取位置 - 1) × 7) 開(kāi)始IP字節(jié)集 = 讀入字節(jié)集 (文件號(hào), 7) 開(kāi)始ip = IP文本補(bǔ)位 (取十六進(jìn)制文本 (取字節(jié)集數(shù)據(jù) (取字節(jié)集左邊 (開(kāi)始IP字節(jié)集, 4), #整數(shù)型, ))) 結(jié)束IP偏移 = 取字節(jié)集數(shù)據(jù) (取字節(jié)集右邊 (開(kāi)始IP字節(jié)集, 3), #整數(shù)型, ) 移動(dòng)讀寫(xiě)位置 (文件號(hào), , 結(jié)束IP偏移) 結(jié)束IP字節(jié)集 = 讀入字節(jié)集 (文件號(hào), 4) 結(jié)束IP = IP文本補(bǔ)位 (取十六進(jìn)制文本 (取字節(jié)集數(shù)據(jù) (結(jié)束IP字節(jié)集, #整數(shù)型, ))) 地區(qū)偏移 = 結(jié)束IP偏移 + 4 開(kāi)始IP數(shù)值 = 十六進(jìn)制到十進(jìn)制 (開(kāi)始ip) 結(jié)束IP數(shù)值 = 十六進(jìn)制到十進(jìn)制 (結(jié)束IP) .如果真 (查詢IP數(shù)值 ≥ 開(kāi)始IP數(shù)值 且 查詢IP數(shù)值 ≤ 結(jié)束IP數(shù)值) 地區(qū)文本 = 取地區(qū)文本 (文件號(hào), 地區(qū)偏移) .如果真結(jié)束 關(guān)閉文件 (文件號(hào)) 返回 (地區(qū)文本) .子程序 二分法確定位置, 整數(shù)型 .參數(shù) 文件號(hào), 整數(shù)型 .參數(shù) 基址, 長(zhǎng)整數(shù)型 .參數(shù) 初始位置, 長(zhǎng)整數(shù)型 .參數(shù) 結(jié)束位置, 長(zhǎng)整數(shù)型 .參數(shù) 查詢值, 長(zhǎng)整數(shù)型 .局部變量 中間讀寫(xiě)位置, 長(zhǎng)整數(shù)型 .局部變量 中間位置, 長(zhǎng)整數(shù)型 .局部變量 中間IP文本, 文本型 .局部變量 中間IP數(shù)值, 長(zhǎng)整數(shù)型 .局部變量 結(jié)束讀寫(xiě)位置, 長(zhǎng)整數(shù)型 .局部變量 結(jié)束IP文本, 文本型 .局部變量 結(jié)束IP數(shù)值, 長(zhǎng)整數(shù)型 中間位置 = (初始位置 + 結(jié)束位置) \ 2 .如果真 (初始位置 = 中間位置) 返回 (初始位置) .如果真結(jié)束 結(jié)束讀寫(xiě)位置 = 基址 + (結(jié)束位置 - 1) × 7 移動(dòng)讀寫(xiě)位置 (文件號(hào), , 結(jié)束讀寫(xiě)位置) 結(jié)束IP文本 = IP文本補(bǔ)位 (取十六進(jìn)制文本 (取字節(jié)集數(shù)據(jù) (取字節(jié)集左邊 (讀入字節(jié)集 (文件號(hào), 7), 4), #整數(shù)型, ))) 結(jié)束IP數(shù)值 = 十六進(jìn)制到十進(jìn)制 (結(jié)束IP文本) .如果真 (查詢值 ≥ 結(jié)束IP數(shù)值) 返回 (結(jié)束位置) .如果真結(jié)束 中間讀寫(xiě)位置 = 基址 + (中間位置 - 1) × 7 移動(dòng)讀寫(xiě)位置 (文件號(hào), , 中間讀寫(xiě)位置) 中間IP文本 = IP文本補(bǔ)位 (取十六進(jìn)制文本 (取字節(jié)集數(shù)據(jù) (取字節(jié)集左邊 (讀入字節(jié)集 (文件號(hào), 7), 4), #整數(shù)型, ))) 中間IP數(shù)值 = 十六進(jìn)制到十進(jìn)制 (中間IP文本) .如果真 (查詢值 < 中間IP數(shù)值) .如果真 (結(jié)束位置 - 初始位置 = 1) 返回 (初始位置) .如果真結(jié)束 返回 (二分法確定位置 (文件號(hào), 基址, 初始位置, 中間位置, 查詢值)) .如果真結(jié)束 .如果真 (查詢值 > 中間IP數(shù)值) 返回 (二分法確定位置 (文件號(hào), 基址, 中間位置, 結(jié)束位置, 查詢值)) .如果真結(jié)束 .如果真 (查詢值 = 中間IP數(shù)值) 返回 (中間位置) .如果真結(jié)束 返回 (0) .子程序 取地區(qū)文本, 文本型 .參數(shù) 文件號(hào), 整數(shù)型 .參數(shù) 地區(qū)偏移, 整數(shù)型 .局部變量 首字節(jié)集, 字節(jié)集 .局部變量 偏移, 整數(shù)型 .局部變量 國(guó)家記錄, 文本型 .局部變量 地區(qū)記錄, 文本型 .局部變量 長(zhǎng)度, 整數(shù)型 移動(dòng)讀寫(xiě)位置 (文件號(hào), , 地區(qū)偏移) 首字節(jié)集 = 讀入字節(jié)集 (文件號(hào), 1) .判斷開(kāi)始 (首字節(jié)集 = { 1 }) ' 模式1的國(guó)家記錄后面不會(huì)再有地區(qū)記錄 偏移 = 取字節(jié)集數(shù)據(jù) (讀入字節(jié)集 (文件號(hào), 3), #整數(shù)型, ) 國(guó)家記錄 = 讀國(guó)家記錄 (文件號(hào), 偏移, 長(zhǎng)度) 偏移 = 偏移 + 長(zhǎng)度 地區(qū)記錄 = 讀地區(qū)記錄 (文件號(hào), 偏移) .判斷 (首字節(jié)集 = { 2 }) ' 模式2的國(guó)家記錄后會(huì)有地區(qū)記錄 偏移 = 取字節(jié)集數(shù)據(jù) (讀入字節(jié)集 (文件號(hào), 3), #整數(shù)型, ) 國(guó)家記錄 = 讀國(guó)家記錄 (文件號(hào), 偏移, 長(zhǎng)度) 偏移 = 地區(qū)偏移 + 4 地區(qū)記錄 = 讀地區(qū)記錄 (文件號(hào), 偏移) .默認(rèn) 偏移 = 地區(qū)偏移 國(guó)家記錄 = 讀國(guó)家記錄 (文件號(hào), 偏移, 長(zhǎng)度) 偏移 = 偏移 + 長(zhǎng)度 地區(qū)記錄 = 讀地區(qū)記錄 (文件號(hào), 偏移) .判斷結(jié)束 .如果真 (到大寫(xiě) (刪首尾空 (地區(qū)記錄)) = “CZ88.NET”) 地區(qū)記錄 = “” .如果真結(jié)束 .如果真 (地區(qū)記錄 = “” 且 國(guó)家記錄 ≠ “”) 返回 (國(guó)家記錄) .如果真結(jié)束 .如果真 (地區(qū)記錄 ≠ “” 且 國(guó)家記錄 = “”) 返回 (地區(qū)記錄) .如果真結(jié)束 .如果真 (國(guó)家記錄 = 地區(qū)記錄) 返回 (國(guó)家記錄) .如果真結(jié)束 返回 (國(guó)家記錄 + “ ” + 地區(qū)記錄) .子程序 讀國(guó)家記錄, 文本型 .參數(shù) 文件號(hào), 整數(shù)型 .參數(shù) 地區(qū)偏移, 整數(shù)型 .參數(shù) 長(zhǎng)度, 整數(shù)型, 參考, 記錄所占的長(zhǎng)度 .局部變量 首字節(jié)集, 字節(jié)集 .局部變量 偏移, 整數(shù)型 .局部變量 國(guó)家記錄, 文本型 .局部變量 記錄長(zhǎng)度, 整數(shù)型 移動(dòng)讀寫(xiě)位置 (文件號(hào), #文件首, 地區(qū)偏移) 首字節(jié)集 = 讀入字節(jié)集 (文件號(hào), 1) .如果 (首字節(jié)集 = { 2 }) ' 第2次重定向一定是模式2 偏移 = 取字節(jié)集數(shù)據(jù) (讀入字節(jié)集 (文件號(hào), 3), #整數(shù)型, ) 移動(dòng)讀寫(xiě)位置 (文件號(hào), #文件首, 偏移) 首字節(jié)集 = 讀入字節(jié)集 (文件號(hào), 1) .如果 (首字節(jié)集 = { 2 } 或 首字節(jié)集 = { 1 }) ' 可能有錯(cuò)誤,不管了 偏移 = 取字節(jié)集數(shù)據(jù) (讀入字節(jié)集 (文件號(hào), 3), #整數(shù)型, ) 移動(dòng)讀寫(xiě)位置 (文件號(hào), #文件首, 偏移) .否則 ' 不是重定向 移動(dòng)讀寫(xiě)位置 (文件號(hào), #現(xiàn)行位置, -1) ' 移動(dòng)回去 上面讀過(guò)一字節(jié)數(shù)據(jù)了 .如果結(jié)束 國(guó)家記錄 = 讀入文本 (文件號(hào), ) 長(zhǎng)度 = 4 .否則 ' 不是重定向 移動(dòng)讀寫(xiě)位置 (文件號(hào), #現(xiàn)行位置, -1) ' 移動(dòng)回去 上面讀過(guò)一字節(jié)數(shù)據(jù)了 國(guó)家記錄 = 讀入文本 (文件號(hào), ) 記錄長(zhǎng)度 = 取文本長(zhǎng)度 (國(guó)家記錄) 長(zhǎng)度 = 記錄長(zhǎng)度 + 1 .如果結(jié)束 返回 (國(guó)家記錄) .子程序 讀地區(qū)記錄, 文本型 .參數(shù) 文件號(hào), 整數(shù)型 .參數(shù) 地區(qū)偏移 .局部變量 首字節(jié)集, 字節(jié)集 .局部變量 偏移, 整數(shù)型 .局部變量 地區(qū)記錄, 文本型 移動(dòng)讀寫(xiě)位置 (文件號(hào), #文件首, 地區(qū)偏移) 首字節(jié)集 = 讀入字節(jié)集 (文件號(hào), 1) .如果 (首字節(jié)集 = { 1 } 或 首字節(jié)集 = { 2 }) ' 對(duì)于地區(qū)記錄,模式1和模式2是一樣的 偏移 = 取字節(jié)集數(shù)據(jù) (讀入字節(jié)集 (文件號(hào), 3), #整數(shù)型, ) 移動(dòng)讀寫(xiě)位置 (文件號(hào), #文件首, 偏移) 首字節(jié)集 = 讀入字節(jié)集 (文件號(hào), 1) .如果 (首字節(jié)集 = { 1 } 或 首字節(jié)集 = { 2 }) ' 再來(lái)判斷下是否是重定向,安全第一 偏移 = 取字節(jié)集數(shù)據(jù) (讀入字節(jié)集 (文件號(hào), 3), #整數(shù)型, ) 移動(dòng)讀寫(xiě)位置 (文件號(hào), #文件首, 偏移) .否則 ' 不是重定向 移動(dòng)讀寫(xiě)位置 (文件號(hào), #現(xiàn)行位置, -1) ' 移動(dòng)回去 上面讀過(guò)一字節(jié)數(shù)據(jù)了 .如果結(jié)束 .否則 ' 不是重定向 移動(dòng)讀寫(xiě)位置 (文件號(hào), #現(xiàn)行位置, -1) ' 移動(dòng)回去 上面讀過(guò)一字節(jié)數(shù)據(jù)了 .如果結(jié)束 地區(qū)記錄 = 讀入文本 (文件號(hào), ) 返回 (地區(qū)記錄) .子程序 IP文本轉(zhuǎn)整數(shù)值, 長(zhǎng)整數(shù)型 .參數(shù) IP文本, 文本型 .局部變量 IP變量數(shù)組, 文本型, , "0" .局部變量 十六進(jìn)制IP文本, 文本型 .局部變量 十進(jìn)制值, 長(zhǎng)整數(shù)型 .局部變量 新ip, 文本型 .局部變量 i, 整數(shù)型 .局部變量 IP段, 文本型 IP變量數(shù)組 = 分割文本 (IP文本, “.”, ) .如果真 (取數(shù)組成員數(shù) (IP變量數(shù)組) ≠ 4) 新ip = 轉(zhuǎn)換為IP地址 (IP文本) IP變量數(shù)組 = 分割文本 (新ip, “.”, ) .如果真 (取數(shù)組成員數(shù) (IP變量數(shù)組) ≠ 4) 返回 (0) .如果真結(jié)束 .如果真結(jié)束 十六進(jìn)制IP文本 = “” .計(jì)次循環(huán)首 (4, i) IP段 = 取文本右邊 (“00” + 取十六進(jìn)制文本 (到整數(shù) (IP變量數(shù)組 [5 - i])), 2) 十六進(jìn)制IP文本 = 十六進(jìn)制IP文本 + IP段 .計(jì)次循環(huán)尾 () 十進(jìn)制值 = 十六進(jìn)制到十進(jìn)制 (倒轉(zhuǎn)十六進(jìn)制文本 (十六進(jìn)制IP文本)) 返回 (十進(jìn)制值) .子程序 十六進(jìn)制到十進(jìn)制, 長(zhǎng)整數(shù)型 .參數(shù) 十六進(jìn)制文本, 文本型 .局部變量 字節(jié)集, 字節(jié)集 .局部變量 字節(jié)集長(zhǎng)度, 整數(shù)型 .局部變量 最終值, 長(zhǎng)整數(shù)型 .局部變量 i, 整數(shù)型, , , 中間循環(huán)變量 .局部變量 臨時(shí)數(shù)值, 整數(shù)型, , , 每一位上的值 字節(jié)集 = 到字節(jié)集 (到大寫(xiě) (十六進(jìn)制文本)) 字節(jié)集長(zhǎng)度 = 取字節(jié)集長(zhǎng)度 (字節(jié)集) .計(jì)次循環(huán)首 (字節(jié)集長(zhǎng)度, i) 臨時(shí)數(shù)值 = 字節(jié)集 [字節(jié)集長(zhǎng)度 - i + 1] .如果真 (臨時(shí)數(shù)值 > 64 且 臨時(shí)數(shù)值 < 71) ' A=65 F=70 最終值 = 最終值 + (臨時(shí)數(shù)值 - 65 + 10) × 求次方 (16, i - 1) 到循環(huán)尾 () .如果真結(jié)束 最終值 = 最終值 + 到整數(shù) (字符 (臨時(shí)數(shù)值)) × 求次方 (16, i - 1) .計(jì)次循環(huán)尾 () 返回 (最終值) .子程序 倒轉(zhuǎn)十六進(jìn)制文本, 文本型 .參數(shù) IP地址文本, 文本型 .局部變量 計(jì)次變量, 整數(shù)型 .局部變量 臨時(shí)文本, 文本型 .局部變量 結(jié)果文本, 文本型 臨時(shí)文本 = IP文本補(bǔ)位 (IP地址文本) .計(jì)次循環(huán)首 (4, 計(jì)次變量) 結(jié)果文本 = 結(jié)果文本 + 取文本中間 (臨時(shí)文本, 8 - 計(jì)次變量 × 2 + 1, 2) .計(jì)次循環(huán)尾 () 返回 (結(jié)果文本) .子程序 IP文本補(bǔ)位, 文本型 .參數(shù) IP地址文本, 文本型 .局部變量 文本長(zhǎng)度, 整數(shù)型 .局部變量 臨時(shí)文本, 文本型 .局部變量 計(jì)次變量, 整數(shù)型 臨時(shí)文本 = IP地址文本 文本長(zhǎng)度 = 取文本長(zhǎng)度 (IP地址文本) .如果真 (文本長(zhǎng)度 < 8) 臨時(shí)文本 = 取重復(fù)文本 (8 - 文本長(zhǎng)度, “0”) + 臨時(shí)文本 .如果真結(jié)束 返回 (臨時(shí)文本) .子程序 十六進(jìn)制文本到IP地址, 文本型 .參數(shù) IP文本, 文本型 .局部變量 臨時(shí)文本, 文本型 .局部變量 結(jié)果文本, 文本型 .局部變量 計(jì)次變量, 整數(shù)型 .局部變量 結(jié)果ip, 文本型, , "4" .局部變量 IP地址, 文本型 臨時(shí)文本 = IP文本補(bǔ)位 (IP文本) .計(jì)次循環(huán)首 (4, 計(jì)次變量) 結(jié)果文本 = 取文本中間 (臨時(shí)文本, 1 + (計(jì)次變量 - 1) × 2, 2) IP地址 = IP地址 + 到文本 (十六進(jìn)制到十進(jìn)制 (結(jié)果文本)) + “.” .計(jì)次循環(huán)尾 () 返回 (取文本左邊 (IP地址, 取文本長(zhǎng)度 (IP地址) - 1))
以上代碼大家可以在易語(yǔ)言環(huán)境里測(cè)試下,感謝大家對(duì)腳本之家的支持。
相關(guān)文章
易語(yǔ)言調(diào)用api獲取網(wǎng)卡信息網(wǎng)絡(luò)連接名的代碼
今天小編就為大家分享一篇關(guān)于易語(yǔ)言調(diào)用api獲取網(wǎng)卡信息網(wǎng)絡(luò)連接名的代碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-11-11易語(yǔ)言將數(shù)值轉(zhuǎn)換為指定格式的文本
今天小編就為大家分享一篇關(guān)于易語(yǔ)言將數(shù)值轉(zhuǎn)換為指定格式的文本,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-11-11易語(yǔ)言將指定的主機(jī)名與IP地址轉(zhuǎn)換功能
今天小編就為大家分享一篇關(guān)于易語(yǔ)言將指定的主機(jī)名與IP地址轉(zhuǎn)換功能,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-11-11易語(yǔ)言設(shè)置在月歷框架內(nèi)是否顯示今天的日期
今天小編就為大家分享一篇關(guān)于易語(yǔ)言設(shè)置在月歷框架內(nèi)是否顯示今天的日期,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-11-11易語(yǔ)API監(jiān)視鼠標(biāo)狀態(tài)教學(xué)
在本篇文章中小編給大家分享了關(guān)于易語(yǔ)言調(diào)用系統(tǒng)鉤子API監(jiān)視鼠標(biāo)狀態(tài)教學(xué),有興趣的朋友們學(xué)習(xí)下。2019-01-01詳解易語(yǔ)言自適應(yīng)組件的寫(xiě)法與思路
在本篇內(nèi)容里小編給各位分享了關(guān)于易語(yǔ)言自適應(yīng)組件的寫(xiě)法與思路,喜歡易語(yǔ)言的朋友們可以學(xué)習(xí)下。2019-01-01一步一步跟我學(xué)易語(yǔ)言之初學(xué)者的常見(jiàn)問(wèn)題
今天小編就為大家分享一篇關(guān)于一步一步跟我學(xué)易語(yǔ)言之初學(xué)者的常見(jiàn)問(wèn)題,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10