.版本
.支持库 spec .程序集 程序集1 .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码 _临时子程序 () ' 在初始化代码执行完毕后调用测试代码
返回 () ' 可以根据您的需要返回任意数值 .子程序 _临时子程序 ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
调试输出 (查询IP归属地 (“192.168.0.0”)) .子程序 查询IP归属地, 文本型, 公开, 查询IP地址的地理位置
.参数 IP地址, 文本型, , 可以是域名
.参数 数据库文件名, 文本型, 可空
.局部变量 文件号, 整数型
.局部变量 文件头字节集, 字节集
.局部变量 IP数量, 长整数型
.局部变量 计次变量, 整数型
.局部变量 开始IP字节集, 字节集
.局部变量 结束IP偏移, 长整数型
.局部变量 结束IP字节集, 字节集
.局部变量 地区偏移, 长整数型
.局部变量 查询IP数值, 长整数型
.局部变量 地区文本, 文本型
.局部变量 IP段信息, 文本型
.局部变量 开始IP读取位置, 长整数型
.局部变量 开始ip, 文本型
.局部变量 结束IP, 文本型
.局部变量 first_start_ip_offset, 长整数型
.局部变量 last_start_ip_offset, 长整数型
.局部变量 开始IP数值, 长整数型
.局部变量 结束IP数值, 长整数型 .如果真 (IP地址 = “”)
返回 (“”)
.如果真结束
.如果真 (是否为空 (数据库文件名))
数据库文件名 = “.\QQWry.dat”
.如果真结束
文件号 = 打开文件 (数据库文件名, #读入, #无限制)
.如果真 (文件号 = )
信息框 (“没找到数据库”, , , )
返回 (“”)
.如果真结束
文件头字节集 = 读入字节集 (文件号, )
first_start_ip_offset = 取字节集数据 (取字节集左边 (文件头字节集, ), #整数型, )
last_start_ip_offset = 取字节集数据 (取字节集右边 (文件头字节集, ), #整数型, )
IP数量 = (last_start_ip_offset - first_start_ip_offset) \ +
查询IP数值 = IP文本转整数值 (IP地址)
开始IP读取位置 = 二分法确定位置 (文件号, first_start_ip_offset, , IP数量, 查询IP数值)
移动读写位置 (文件号, , first_start_ip_offset + (开始IP读取位置 - ) × )
开始IP字节集 = 读入字节集 (文件号, )
开始ip = IP文本补位 (取十六进制文本 (取字节集数据 (取字节集左边 (开始IP字节集, ), #整数型, )))
结束IP偏移 = 取字节集数据 (取字节集右边 (开始IP字节集, ), #整数型, )
移动读写位置 (文件号, , 结束IP偏移)
结束IP字节集 = 读入字节集 (文件号, )
结束IP = IP文本补位 (取十六进制文本 (取字节集数据 (结束IP字节集, #整数型, )))
地区偏移 = 结束IP偏移 +
开始IP数值 = 十六进制到十进制 (开始ip)
结束IP数值 = 十六进制到十进制 (结束IP)
.如果真 (查询IP数值 ≥ 开始IP数值 且 查询IP数值 ≤ 结束IP数值)
地区文本 = 取地区文本 (文件号, 地区偏移)
.如果真结束
关闭文件 (文件号)
返回 (地区文本) .子程序 二分法确定位置, 整数型
.参数 文件号, 整数型
.参数 基址, 长整数型
.参数 初始位置, 长整数型
.参数 结束位置, 长整数型
.参数 查询值, 长整数型
.局部变量 中间读写位置, 长整数型
.局部变量 中间位置, 长整数型
.局部变量 中间IP文本, 文本型
.局部变量 中间IP数值, 长整数型
.局部变量 结束读写位置, 长整数型
.局部变量 结束IP文本, 文本型
.局部变量 结束IP数值, 长整数型 中间位置 = (初始位置 + 结束位置) \
.如果真 (初始位置 = 中间位置)
返回 (初始位置)
.如果真结束
结束读写位置 = 基址 + (结束位置 - ) ×
移动读写位置 (文件号, , 结束读写位置)
结束IP文本 = IP文本补位 (取十六进制文本 (取字节集数据 (取字节集左边 (读入字节集 (文件号, ), ), #整数型, )))
结束IP数值 = 十六进制到十进制 (结束IP文本)
.如果真 (查询值 ≥ 结束IP数值)
返回 (结束位置)
.如果真结束
中间读写位置 = 基址 + (中间位置 - ) ×
移动读写位置 (文件号, , 中间读写位置)
中间IP文本 = IP文本补位 (取十六进制文本 (取字节集数据 (取字节集左边 (读入字节集 (文件号, ), ), #整数型, )))
中间IP数值 = 十六进制到十进制 (中间IP文本)
.如果真 (查询值 < 中间IP数值)
.如果真 (结束位置 - 初始位置 = )
返回 (初始位置)
.如果真结束
返回 (二分法确定位置 (文件号, 基址, 初始位置, 中间位置, 查询值))
.如果真结束
.如果真 (查询值 > 中间IP数值)
返回 (二分法确定位置 (文件号, 基址, 中间位置, 结束位置, 查询值))
.如果真结束
.如果真 (查询值 = 中间IP数值)
返回 (中间位置)
.如果真结束
返回 () .子程序 取地区文本, 文本型
.参数 文件号, 整数型
.参数 地区偏移, 整数型
.局部变量 首字节集, 字节集
.局部变量 偏移, 整数型
.局部变量 国家记录, 文本型
.局部变量 地区记录, 文本型
.局部变量 长度, 整数型 移动读写位置 (文件号, , 地区偏移)
首字节集 = 读入字节集 (文件号, )
.判断开始 (首字节集 = { }) ' 模式1的国家记录后面不会再有地区记录
偏移 = 取字节集数据 (读入字节集 (文件号, ), #整数型, )
国家记录 = 读国家记录 (文件号, 偏移, 长度)
偏移 = 偏移 + 长度 地区记录 = 读地区记录 (文件号, 偏移) .判断 (首字节集 = { }) ' 模式2的国家记录后会有地区记录
偏移 = 取字节集数据 (读入字节集 (文件号, ), #整数型, )
国家记录 = 读国家记录 (文件号, 偏移, 长度)
偏移 = 地区偏移 +
地区记录 = 读地区记录 (文件号, 偏移) .默认
偏移 = 地区偏移
国家记录 = 读国家记录 (文件号, 偏移, 长度) 偏移 = 偏移 + 长度
地区记录 = 读地区记录 (文件号, 偏移)
.判断结束 .如果真 (到大写 (删首尾空 (地区记录)) = “CZ88.NET”)
地区记录 = “”
.如果真结束
.如果真 (地区记录 = “” 且 国家记录 ≠ “”)
返回 (国家记录)
.如果真结束
.如果真 (地区记录 ≠ “” 且 国家记录 = “”)
返回 (地区记录)
.如果真结束
.如果真 (国家记录 = 地区记录)
返回 (国家记录)
.如果真结束
返回 (国家记录 + “ ” + 地区记录) .子程序 读国家记录, 文本型
.参数 文件号, 整数型
.参数 地区偏移, 整数型
.参数 长度, 整数型, 参考, 记录所占的长度
.局部变量 首字节集, 字节集
.局部变量 偏移, 整数型
.局部变量 国家记录, 文本型
.局部变量 记录长度, 整数型 移动读写位置 (文件号, #文件首, 地区偏移)
首字节集 = 读入字节集 (文件号, )
.如果 (首字节集 = { }) ' 第2次重定向一定是模式2
偏移 = 取字节集数据 (读入字节集 (文件号, ), #整数型, )
移动读写位置 (文件号, #文件首, 偏移)
首字节集 = 读入字节集 (文件号, )
.如果 (首字节集 = { } 或 首字节集 = { }) ' 可能有错误,不管了
偏移 = 取字节集数据 (读入字节集 (文件号, ), #整数型, )
移动读写位置 (文件号, #文件首, 偏移) .否则
' 不是重定向
移动读写位置 (文件号, #现行位置, -) ' 移动回去 上面读过一字节数据了 .如果结束
国家记录 = 读入文本 (文件号, )
长度 =
.否则
' 不是重定向
移动读写位置 (文件号, #现行位置, -) ' 移动回去 上面读过一字节数据了
国家记录 = 读入文本 (文件号, )
记录长度 = 取文本长度 (国家记录)
长度 = 记录长度 +
.如果结束 返回 (国家记录) .子程序 读地区记录, 文本型
.参数 文件号, 整数型
.参数 地区偏移
.局部变量 首字节集, 字节集
.局部变量 偏移, 整数型
.局部变量 地区记录, 文本型 移动读写位置 (文件号, #文件首, 地区偏移)
首字节集 = 读入字节集 (文件号, )
.如果 (首字节集 = { } 或 首字节集 = { }) ' 对于地区记录,模式1和模式2是一样的
偏移 = 取字节集数据 (读入字节集 (文件号, ), #整数型, )
移动读写位置 (文件号, #文件首, 偏移)
首字节集 = 读入字节集 (文件号, )
.如果 (首字节集 = { } 或 首字节集 = { }) ' 再来判断下是否是重定向,安全第一
偏移 = 取字节集数据 (读入字节集 (文件号, ), #整数型, )
移动读写位置 (文件号, #文件首, 偏移)
.否则
' 不是重定向
移动读写位置 (文件号, #现行位置, -) ' 移动回去 上面读过一字节数据了
.如果结束 .否则
' 不是重定向
移动读写位置 (文件号, #现行位置, -) ' 移动回去 上面读过一字节数据了
.如果结束 地区记录 = 读入文本 (文件号, )
返回 (地区记录) .子程序 IP文本转整数值, 长整数型
.参数 IP文本, 文本型
.局部变量 IP变量数组, 文本型, , ""
.局部变量 十六进制IP文本, 文本型
.局部变量 十进制值, 长整数型
.局部变量 新ip, 文本型
.局部变量 i, 整数型
.局部变量 IP段, 文本型 IP变量数组 = 分割文本 (IP文本, “.”, )
.如果真 (取数组成员数 (IP变量数组) ≠ )
新ip = 转换为IP地址 (IP文本)
IP变量数组 = 分割文本 (新ip, “.”, )
.如果真 (取数组成员数 (IP变量数组) ≠ )
返回 ()
.如果真结束 .如果真结束
十六进制IP文本 = “”
.计次循环首 (, i)
IP段 = 取文本右边 (“” + 取十六进制文本 (到整数 (IP变量数组 [ - i])), )
十六进制IP文本 = 十六进制IP文本 + IP段
.计次循环尾 ()
十进制值 = 十六进制到十进制 (倒转十六进制文本 (十六进制IP文本))
返回 (十进制值) .子程序 十六进制到十进制, 长整数型
.参数 十六进制文本, 文本型
.局部变量 字节集, 字节集
.局部变量 字节集长度, 整数型
.局部变量 最终值, 长整数型
.局部变量 i, 整数型, , , 中间循环变量
.局部变量 临时数值, 整数型, , , 每一位上的值 字节集 = 到字节集 (到大写 (十六进制文本))
字节集长度 = 取字节集长度 (字节集)
.计次循环首 (字节集长度, i)
临时数值 = 字节集 [字节集长度 - i + ]
.如果真 (临时数值 > 且 临时数值 < ) ' A=65 F=70
最终值 = 最终值 + (临时数值 - + ) × 求次方 (, i - )
到循环尾 ()
.如果真结束
最终值 = 最终值 + 到整数 (字符 (临时数值)) × 求次方 (, i - )
.计次循环尾 ()
返回 (最终值) .子程序 倒转十六进制文本, 文本型
.参数 IP地址文本, 文本型
.局部变量 计次变量, 整数型
.局部变量 临时文本, 文本型
.局部变量 结果文本, 文本型 临时文本 = IP文本补位 (IP地址文本)
.计次循环首 (, 计次变量)
结果文本 = 结果文本 + 取文本中间 (临时文本, - 计次变量 × + , )
.计次循环尾 ()
返回 (结果文本) .子程序 IP文本补位, 文本型
.参数 IP地址文本, 文本型
.局部变量 文本长度, 整数型
.局部变量 临时文本, 文本型
.局部变量 计次变量, 整数型 临时文本 = IP地址文本
文本长度 = 取文本长度 (IP地址文本)
.如果真 (文本长度 < )
临时文本 = 取重复文本 ( - 文本长度, “”) + 临时文本
.如果真结束
返回 (临时文本) .子程序 十六进制文本到IP地址, 文本型
.参数 IP文本, 文本型
.局部变量 临时文本, 文本型
.局部变量 结果文本, 文本型
.局部变量 计次变量, 整数型
.局部变量 结果ip, 文本型, , ""
.局部变量 IP地址, 文本型 临时文本 = IP文本补位 (IP文本)
.计次循环首 (, 计次变量)
结果文本 = 取文本中间 (临时文本, + (计次变量 - ) × , )
IP地址 = IP地址 + 到文本 (十六进制到十进制 (结果文本)) + “.”
.计次循环尾 ()
返回 (取文本左边 (IP地址, 取文本长度 (IP地址) - ))

易语言 - 模块 - 子程序 - 纯真IP数据库查询的更多相关文章

  1. python3通过纯真IP数据库查询IP归属地信息

    在网上看到的别人写的python2的代码,修改成了python3. 把纯真IP数据库文件qqwry.dat放到czip.py同一目录下. #! /usr/bin/env python # -*- co ...

  2. 【VB.NET】利用纯真IP数据库查询IP地址及信息

    几年前从某个博客抄来的,已经忘记原地址了,如果需要C#版的,可以在博客园搜到吧.我因为自己用,所以转换为了VBNET代码,而且也放置了很久,今天无意间翻出来,就分享给大家吧. 首先,先下载 纯真数据库 ...

  3. PHP利用纯真IP数据库在本地实现IP地址信息查询

    https://blog.csdn.net/myweishanli/article/details/45098693 准备工作: 建议本地IP地址数据库,请到http://www.cz88.net/这 ...

  4. 优化读取纯真IP数据库QQWry.dat获取地区信息

    改自HeDaode 2007-12-28的代码 将之改为从硬盘读取后文件后,将MemoryStream放到内存中,提高后续查询速度 ///<summary> /// 提供从纯真IP数据库搜 ...

  5. 纯真IP数据库导入mysql

    下载纯真IP数据库 安装后解压到本地为ip.txt 格式为: 1.1.145.0       1.1.147.255     泰国 沙功那空 1.1.148.0       1.1.149.255   ...

  6. 纯真IP数据库(qqwry.dat)转换成最新的IP数据库格式(ipwry.dat)

    纯真IP数据库(qqwry.dat)转换成最新的IP数据库格式(ipwry.dat) 转载自:http://blog.cafeboy.org/2011/02/25/qqwry-to-ipwry/ ht ...

  7. PHP调用纯真IP数据库返回具体地址

    function convertip($ip) { $ip1num = 0; $ip2num = 0; $ipAddr1 =""; $ipAddr2 =""; ...

  8. 用纯真ip数据库.dat文件查询ip归属

    网址:http://www.cz88.net/ 下载安装后,有这个文件: 安装路径/ip/qqwry.dat 创建实例的时候吧这个文件路径传入,即可调用. /** * 从纯真IP地址库查询ip归属 * ...

  9. PHP获取IP及地区信息(纯真IP数据库)

    昨天在写程序的时候,发现在用户的时候记录IP和地区信息也许以后用得上,去网上找了找,发现实现的方式有好多好多,因为我用的ThinkPHP,后来又去TP官网找了找,最后采用了下面这种方法. <?p ...

随机推荐

  1. Linux基础命令ls

    目录处理命令:ls -a 显示所有文件,包括隐藏文件 --all -l h  详细信息显示  --long --human -d 查看目录属性  - -i 查看文件唯一编号 -表示文件 d表示目录 l ...

  2. linux所有命令不能用显示-bash: ls: command not found

    所有的命令都显示找不到了,原因是修改了/etc/profile造成的 解决方法 1.修正属性文件中的错误 /usr/bin/vi /etc/profile 2.生效属性文件 source /etc/p ...

  3. js前端性能优化之函数节流和函数防抖

    前言:针对一些会频繁触发的事件如scroll.resize,如果正常绑定事件处理函数的话,有可能在很短的时间内多次连续触发事件,十分影响性能 节流: 节流:使得一定时间内只触发一次函数. 它和防抖动最 ...

  4. docker 安装redis , 让宿主机可以访问

    1, docker 拉去最新版本的redis docker pull redis #后面可以带上tag号, 默认拉取最新版本 2, docker安装redis container 安装之前去定义我们的 ...

  5. 学号 20175212 《Java程序设计》第4周学习总结

    学号 20175212 <Java程序设计>第4周学习总结 教材学习内容总结 一. 子类与父类 父类中的private和友好访问权限的成员变量不会被子类继承.子类只继承父类中的protec ...

  6. python数据结构与算法之算法和算法分析

    1.问题.问题实例.算法的概念区分. 一个例子说明一下: 问题:判断一个正整数N是否为素数   #问题是需要解决的一个需求 问题实例:判断1314是否为素数? #问题实例是该问题的一个具体例子 算法: ...

  7. 访问链接出现 ERR_CONTENT_DECODING_FAILED 错误的解决办法

    今天跑一个应用,别人的机器上都是好的,但是本地部署就是不行.访问页面调试工具console总是提示 ERR_CONTENT_DECODING_FAILED 错误. 就是数据表格无法显示,经排查,发现是 ...

  8. 使用docker安装sentry

    一.安装docker yum -y install docker 更换docker镜像源为中科大的 在配置文件/etc/docker/daemon.json中加入 { "registry-m ...

  9. 使用vagrant构建你们团队的开发环境

    vagrant可以让团队快速搭建统一的开发环境. 搭建vagrant你需要准备三个东西: 1.vagrant安装包 . 2.virtualbox安装包. 3.打包后的vagrant虚拟环境镜像 (ln ...

  10. IDEA中项目编码格式设置

    自从换成IntelliJ IDEA 之后各种设置就成了问题,这不,在跟另一家公司做对接的时候,他们说我这边的http接口返回的都是乱码, 所有的接口我这边的都是访问过的,这个怎么会,我用360浏览器和 ...