精易论坛

标题: 【BUG修复】精易模块_超级列表框_读取配置(解决无法正常读取超大ini配置... [打印本页]

作者: 272765632    时间: 2019-3-9 13:39
标题: 【BUG修复】精易模块_超级列表框_读取配置(解决无法正常读取超大ini配置...
先说明一下BUG情况:
精易模块6.5以及以下的版本,批量_超级列表框_读取配置,当ini配置文件内的组件字符大于1万个字符,就会无法完整读取,只能读取一部分。
根本原因在于:易语言自带子程序:读配置项()这个子程序存在BUG,也就是配置项的内容大于1万个字符,就会无法完整读取,只能读取一部分。。


起初困扰了我好久,我在论坛上找了一圈,居然没有正确的写法和解决方案。
只能自己写了,同时附带正确的源码,希望给新手带来帮助。
希望管理员,在精易模块下一个版本把这个正确的代码修复进去!


  
子程序名返回值类型公开备 注
批量_超级列表框_读取配置整数型 与"批量_日期框_保存配置()"命令一起用的!  返回被操作的编辑框数量!
参数名类 型参考可空数组备 注
组件的父窗口窗口直接填写顶级窗口就行了,如:_启动窗口
配置文件名文本型可空:默认保存在根目录\data目录下,名为setsoft.ini
变量名类 型静态数组备 注
局_寻找句柄整数型 
局_计次整数型 
局_组件超级列表框 
局_临时文本文本型 
局_组件数量整数型 
局_列数整数型 
局_项数整数型 
局_数组1文本型0
局_数组2文本型0
局_计次1整数型 
局_计次2整数型 
表项整数型 
如果真 (是否为空 (配置文件名))
配置文件名 = 取默认目录 ()
局_寻找句柄 = 寻找组件 (组件的父窗口, , “超级列表框”, , )
局_组件数量 = 取找到组件数目 (局_寻找句柄)
计次循环首 (局_组件数量, 局_计次)
局_组件 = 取所找到组件 (局_寻找句柄, 局_计次 - 1)
' 局_临时文本 = 读配置项 (配置文件名, “超级列表框”, 取组件名称 (局_组件), “”)'‘这段就是之前的错误写法,无法完整读取配置内容。
局_临时文本 = 文本_取中间文本 (到文本 (读入文件 (配置文件名)), 取组件名称 (局_组件)+"=", #换行符, , )
局_数组1 = 分割文本 (局_临时文本, “{!}”, )
局_项数 = 取数组成员数 (局_数组1)
计次循环首 (局_项数, 局_计次1)
局_数组2 = 分割文本 (局_数组1 [局_计次1], “|”, )
表项 = 局_组件.插入表项 (, , , , , )
局_列数 = 取数组成员数 (局_数组2)
计次循环首 (局_列数, 局_计次2)
局_组件.置标题 (表项, 局_计次2 - 1, 局_数组2 [局_计次2])
计次循环尾 ()
计次循环尾 ()
计次循环尾 ()
清除组件寻找句柄 (局_寻找句柄)
返回 (局_组件数量)


i支持库列表   支持库注释   
iext扩展界面支持库一



补充内容 (2019-3-18 22:56):
补上一句,代码里面漏掉了一个等于号=:局_临时文本 = 文本_取中间文本 (到文本 (读入文件 (配置文件名)), 取组件名称 (局_组件)+"=", #换行符, , )
作者: 272765632    时间: 2019-3-9 13:40
文本_取中间文本(),这个就不需要我说了吧。
  1. .版本 2

  2. .子程序 文本_取中间文本, 文本型, 公开, 比如:欲取全文本为“12345”,现在要取出“3”,<3>的前面为“2”,<3>的后面为“4”,
  3. .参数 欲取全文本, 文本型, , 比如:欲取全文本为 12345
  4. .参数 前面文本, 文本型, , 3的前面为“2”,引号直接用 #引号,如:"[color=#引号red#引号]"
  5. .参数 后面文本, 文本型, , 3的后面为“4”,引号直接用 #引号,如:"[color=#引号red#引号]"
  6. .参数 起始搜寻位置, 整数型, 可空, 可空,这里是指搜寻 参数二 前面文本 的开始位置
  7. .参数 是否不区分大小写, 逻辑型, 可空, 为真不区分大小写,为假区分。
  8. .局部变量 局_前面文本位置, 整数型
  9. .局部变量 局_后面文本位置, 整数型
  10. .局部变量 局_前面文本, 文本型
  11. .局部变量 局_后面文本, 文本型

  12. 局_前面文本 = 子文本替换 (前面文本, “#引号”, #引号, , , 真)
  13. 局_后面文本 = 子文本替换 (后面文本, “#引号”, #引号, , , 真)
  14. 局_前面文本位置 = 寻找文本 (欲取全文本, 局_前面文本, 起始搜寻位置, 是否不区分大小写)
  15. .如果真 (局_前面文本位置 = -1)
  16.     返回 (“”)
  17. .如果真结束
  18. 局_前面文本位置 = 局_前面文本位置 + 取文本长度 (局_前面文本)
  19. 局_后面文本位置 = 寻找文本 (欲取全文本, 局_后面文本, 局_前面文本位置, 是否不区分大小写)
  20. .如果真 (局_后面文本位置 = -1)
  21.     返回 (“”)
  22. .如果真结束
  23. 返回 (取文本中间 (欲取全文本, 局_前面文本位置, 局_后面文本位置 - 局_前面文本位置))
复制代码

作者: 272765632    时间: 2019-3-9 13:54
补上一句,代码里面漏掉了一个等于号=:局_临时文本 = 文本_取中间文本 (到文本 (读入文件 (配置文件名)), 取组件名称 (局_组件)+"=", #换行符, , )
作者: 情殇QAQ    时间: 2019-3-9 14:43
感谢分享!
作者: 阿萨辛    时间: 2019-3-9 15:01
66666你可能
作者: mood1000    时间: 2019-3-9 15:07
收藏了,感谢分享
作者: 1668532261    时间: 2019-3-9 16:37
大佬大佬,受教了
作者: sampo2017    时间: 2019-3-10 15:01
感谢楼主分享经验
作者: kyo9766    时间: 2019-3-11 10:51
细致耐心的大佬。感谢分享
作者: 外星星人    时间: 2019-3-14 23:38
感谢分享,。。。
作者: dafei    时间: 2019-3-15 08:32
6666666666666666666666666666666666666666
作者: 1044880614    时间: 2019-3-15 16:15
666666666dadadadad
作者: yoobaby    时间: 2019-3-23 23:59
你也是厉害,。。。
作者: 与你共舞    时间: 2019-4-8 20:02
你也是厉害,。。。
作者: 善有善报    时间: 2022-4-12 08:37
你也是厉害,。。。




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4