设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 3576|回复: 4
收起左侧

【ide利器】中文字母数字混拼搜索

[复制链接]
发表于 2018-3-11 00:02:36 | 显示全部楼层 |阅读模式
今天在写一个仓库管理的软件,把混拼搜索写了。因为易语言的自带提示很坑*,多年积累的怨言,现在凑巧写了个混拼的,比你想象中要强大。(呃,广告词,其实并没有怎么考虑各种突发情况的效率,但功能是有的,一般的效率也是有的,大神有机会帮忙看看有没有啥问题,或者提提怎么写更好)
下面的图片不是特意截得,只是跟朋友说的时候,随手截给他看的。因为我不是主要在写混搜...懒得再截了
先放易语言让我不爽的,貌似只支持纯首拼或双拼..
(单纯的只是不爽,接下来的行动对这个不爽并没啥改变)
TIM图片20180310234438.png
TIM图片20180310234442.png
。。。。。单拼不能接双拼...
TIM图片20180310234446.png
TIM图片20180310234454.png
先不说必须输入_好麻烦,尤其是在中文环境需要切换输入法,当然,据说可以宏定义键盘


这忍了。


但是......双拼完之后不允许首拼...
TIM图片20180310234503.png
我这么长的怎么输...前缀还一样一样的

所以我想支持拼音混合,容许遗漏,模糊搜索


这个用来选择的时候有奇效


比如仓库里有两百多件不同名字的材料。


。。。。。。以上都是节选自聊天记录,懒得打字
忽略分析过程了..总之就是准备提取出两串拼音来顺序匹配,加上数字和字母,忽略其他符号
TIM图片20180310235134.png
大概就是这样。
写出来之后给朋友的截图是
TIM图片20180310233725.png
TIM图片20180310233743.png
TIM图片20180310233747.png
TIM图片20180310233755.png
就这样咯...

  1. .版本 2

  2. .程序集 窗口程序集_启动窗口
  3. .程序集变量 数组, 文本型, , "0"

  4. .子程序 _编辑框_搜索内容_内容被改变
  5. .局部变量 i, 整数型
  6. .局部变量 文本, 文本型
  7. .局部变量 搜索文本拼音, 文本型
  8. .局部变量 原串拼音, 文本型
  9. .局部变量 原长, 整数型
  10. .局部变量 搜索位置, 整数型
  11. .局部变量 临时数组, 文本型, , "0"

  12. 编辑框_搜索结果.内容 = “”

  13. .如果真 (编辑框_搜索内容.内容 ≠ “”)
  14.     搜索文本拼音 = 取文本拼音 (编辑框_搜索内容.内容)
  15.     原长 = 取文本长度 (搜索文本拼音)
  16.     .如果真 (原长 = 0)
  17.         返回 ()
  18.     .如果真结束
  19.     .计次循环首 (取数组成员数 (数组), i)
  20.         原串拼音 = 取文本拼音 (数组 [i])
  21.         .如果真 (取文本长度 (原串拼音) ≥ 原长 且 原长 > 0 且 顺序是否匹配 (原串拼音, 搜索文本拼音))
  22.             文本 = 文本 + 数组 [i] + #换行符
  23.         .如果真结束

  24.     .计次循环尾 ()
  25. .如果真结束
  26. 编辑框_搜索结果.内容 = 文本



  27. .子程序 顺序是否匹配, 逻辑型
  28. .参数 原字符串, 文本型
  29. .参数 新字符串, 文本型
  30. .局部变量 寻找位置, 整数型

  31. ' 调试输出 (原字符串, 新字符串)
  32. .如果真 (新字符串 = “”)
  33.     ' 调试输出 (原字符串, “ok”)
  34.     返回 (真)
  35. .如果真结束
  36. 寻找位置 = 寻找文本 (原字符串, 取文本左边 (新字符串, 1), , 假)
  37. .如果真 (寻找位置 ≠ -1)
  38.     返回 (顺序是否匹配 (取文本右边 (原字符串, 取文本长度 (原字符串) - 寻找位置), 取文本右边 (新字符串, 取文本长度 (新字符串) - 1)))
  39. .如果真结束
  40. 返回 (假)


  41. .子程序 取文本拼音, 文本型
  42. .参数 文本, 文本型
  43. .局部变量 文本数组, 文本型, , "0"
  44. .局部变量 i, 整数型
  45. .局部变量 拼音, 文本型

  46. 功能_逐字分割 (文本, 文本数组)
  47. ' 调试输出 (文本数组)
  48. .计次循环首 (取数组成员数 (文本数组), i)
  49.     拼音 = 拼音 + 选择 (判断单字符是否字母数字 (文本数组 [i]), 文本数组 [i], 取拼音 (文本数组 [i], 1))
  50. .计次循环尾 ()
  51. 返回 (拼音)

  52. .子程序 判断单字符是否字母数字, 逻辑型
  53. .参数 字符, 文本型
  54. .局部变量 ascii, 整数型

  55. ascii = 取代码 (字符, )
  56. .判断开始 (ascii ≥ 65 且 ascii ≤ 90)  ' A-Z

  57. .判断 (ascii ≥ 97 且 ascii ≤ 122)  ' a-z

  58. .判断 (ascii ≥ 48 且 ascii ≤ 57)  ' 0=48,9=57

  59. .默认
  60.     返回 (假)
  61. .判断结束
  62. 返回 (真)

  63. .子程序 功能_逐字分割
  64. .参数 文本, 文本型
  65. .参数 wb数组, 文本型, 数组, 存放分割后的文本
  66. .局部变量 Buf, 文本型
  67. .局部变量 数据, 字节集

  68. 数据 = { 87, 139, 124, 36, 16, 51, 192, 51, 201, 56, 7, 116, 54, 86, 139, 116, 36, 24, 138, 20, 56, 128, 250, 127, 118, 9, 136, 20, 49, 131, 192, 1, 131, 193, 1, 138, 20, 56, 136, 20, 49, 131, 193, 1, 198, 4, 49, 32, 131, 192, 1, 131, 193, 1, 128, 60, 56, 0, 117, 214, 198, 4, 49, 0, 94, 95, 195, 139, 84, 36, 20, 136, 4, 17, 95 }
  69. Buf = 取空白文本 (取文本长度 (文本) × 2)
  70. CallWindowProcA (数据, _启动窗口.取窗口句柄 (), 1025, 文本, Buf)
  71. wb数组 = 分割文本 (Buf, “ ”, )


  72. .子程序 _编辑框_文本池_内容被改变

  73. 数组 = 分割文本 (编辑框_文本池.内容, #换行符, )


  74. .子程序 __启动窗口_创建完毕

  75. 数组 = 分割文本 (编辑框_文本池.内容, #换行符, )
复制代码
  1. .版本 2

  2. .DLL命令 CallWindowProcA, 整数型, "user32.dll", "CallWindowProcA", , 转载自网上,用于逐字分割
  3.     .参数 字节集, 字节集
  4.     .参数 窗口句柄, 整数型
  5.     .参数 消息类型, 整数型
  6.     .参数 文本, 文本型
  7.     .参数 buf, 文本型
复制代码
  1. 中国
  2. 易语言
  3. 汉字
  4. 程序
  5. 数据类型
  6. 成员
  7. 程序集
  8. 子程序
  9. 参数
  10. 子程序参数
  11. 变量
  12. 程序集变量
  13. 全局变量
  14. 常量
  15. 资源
  16. 图片
  17. 声音
  18. 字节
  19. 短整数
  20. 整数
  21. 长整数
  22. 小数
  23. 双精度小数
  24. 数值
  25. 逻辑值
  26. 日期时间
  27. 文本
  28. 字节集
  29. 指针
  30. 子程序指针
  31. 系统
  32. 数据集
  33. 窗口
  34. 窗口组件
  35. 报表
  36. 报表组件
  37. 字体
  38. 文件
  39. 目录
  40. 属性
  41. 事件
  42. 尺寸
  43. 名称
  44. 坐标
  45. 宽度
  46. 高度
  47. 标签
  48. 标题
  49. 边框
  50. 颜色
  51. 音乐
  52. 图标
  53. 位置
  54. 帮助
  55. 信息
  56. 计数
  57. 计次
  58. 计算
  59. 计算机
  60. 电脑
  61. 数目
  62. 文件号
  63. 字段
  64. 数据库
  65. 索引
  66. fdajklfjakl
  67. fad
  68. fadf‘发【】43
  69. fadsf34
  70. 【】456
  71. 测试中文89345
  72. 测试345见了美女#¥%混合
  73. 我是用来测试用的文本没错我就是用来测试用的文本
  74. 我是用来测试用的文本没错我就是用来测试用的文
  75. 我是用来测试用的文本没错我就是用来测试用的
  76. 我是用来测试用的文本没错我就是用来测试用
  77. 我是用来测试用的文本没错我就是用来测试
  78. 我是用来测试用的文本没错我就是用来测
  79. 我是用来测试用的文本没错我就是用来
  80. 我是用来测试用的文本没错我就是用
  81. 我是用来测试用的文本没错我就是
  82. 我是用来测试用的文本没错我就
  83. 我是用来测试用的文本没错我
  84. 我是用来测试用的文本没错
  85. 我是用来测试用的文本没
  86. 我是用来测试用的文本
  87. 我是用来测试用的文
  88. 我是用来测试用的
  89. 我是用来测试用
  90. 我是用来测试
  91. 我是用来测
  92. 我是用来
  93. 我是用
  94. 我是
复制代码
上面这段文本是编辑框_文本池的。

==================混乱分割线
需要的朋友直接下载下面的附件吧。
混拼搜索.rar (3.19 KB, 下载次数: 126)

代码其实就是把一堆文本和一个搜索文本,然后对比他们的经过处理之后的文本(转换成拼音加保留字母数字)是否存在短文本串中的字符完全顺序匹配长文本串(注:这里的短文本串指的是搜索文本处理之后的文本,然后比这个文本长度短的不会被判断是否匹配)
是否顺序匹配用的是判断之后的文本串是否匹配,然后砍掉之前的文本丢到递归里去。
再着就循环就是了。
然后...逐字分割是我随便找的
嗯...因为随手写了个混搜,所以来水一贴...准备睡觉,或者继续写软件。

评分

1

查看全部评分

发表于 2018-3-11 08:03:23 | 显示全部楼层
看来用这玩意发明一套输入法啥的问题还真不少
发表于 2018-3-11 21:46:07 | 显示全部楼层
本小白看不动
发表于 2018-3-13 16:18:27 | 显示全部楼层
没错这玩意也是输入法的一部分。
发表于 2018-3-27 17:22:47 | 显示全部楼层

巧了,我也是
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-3-29 15:02 , Processed in 0.436025 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表