找回密码
 加入
搜索
楼主: feicuiboy

[效率算法] (已解决)在配置文件中设置通用字符,辨别变量和普通字符()

 火.. [复制链接]
发表于 2011-3-31 21:06:55 | 显示全部楼层
回复  afan
...
就是仅对%%之间的进行计算,其他保持原样 ...
feicuiboy 发表于 2011-3-31 20:01



    你早说不就好了~ 这个和之前不是一样哦,之前的%%之间的只是变量: “AA=该列有%$xx%-2个”,现在你的意思是:“AA=该列有%$xx-2%个”

评分

参与人数 1金钱 +20 收起 理由
feicuiboy + 20 谢谢关注

查看全部评分

 楼主| 发表于 2011-3-31 21:18:14 | 显示全部楼层
回复 16# afan


=======================
就是在配置文件中有一行是

AA=该列有%$xx[1]-2%个

若数组$xx[1]=100

然后msgbox后程序得输出为:
该列有98个

不知道我讲的你是否明白?
发表于 2011-3-31 21:27:43 | 显示全部楼层
文字%$xx[1]-2%文字
还有别的格式吗?如:
文字%$xx[1]*2%文字 --- 其它运算符如*/
文字%$xx-2%文字    --- 不是数组
文字%$xx[1]%文字   --- 没有运算

评分

参与人数 1金钱 +20 收起 理由
feicuiboy + 20 谢谢

查看全部评分

 楼主| 发表于 2011-3-31 21:38:35 | 显示全部楼层
本帖最后由 feicuiboy 于 2011-3-31 21:45 编辑

回复 18# afan


========================格式有如下几种:

第一种:上图第1、2、4、5、6、7、9行

第二种:不含任何%% (如上图第三行)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-3-31 21:46:13 | 显示全部楼层
回复 19# feicuiboy


    晕,1种格式?至少有3种格式吧~! 仔细看看我18#写的,除了“文字%$xx[1]*2%文字 --- 其它运算符如*/”这种没有,其它都猜到了……
 楼主| 发表于 2011-3-31 21:51:09 | 显示全部楼层
本帖最后由 feicuiboy 于 2011-3-31 22:00 编辑

回复 20# afan
我在归纳一下

第一种 :字符或文字+%%+字符或文字  
第二种:多个   字符或文字+%%+字符或文字  组成一行,  但是每个之间有逗号 分开:
第三种:没有任何计算 不含%%
  这样归纳OK吗?大大


我的思路:
对于第三种,函数可以先检测有无%%,没有则直接输出。
对于第二种和第一种,先读取出字段(不计算),然后循环用变量替换%%之间的计算结果,连接一起输出就是结果
发表于 2011-3-31 21:55:21 | 显示全部楼层
回复 21# feicuiboy


    不是说的这种格式,而是 %xxx% 之前的不同格式……
 楼主| 发表于 2011-3-31 22:05:35 | 显示全部楼层
本帖最后由 feicuiboy 于 2011-3-31 22:10 编辑

回复 22# afan



文字%$xx[1]-2%文字-----------
文字%$xx[1]*2%文字 --- 其它运算符如*/((存在这种情况,含加减乘除中的一种)
文字%$xx-2%文字    --- 不是数组(存在这种情况)
文字%$xx[1]%文字   --- 没有运算(存在这种情况)


也就是%%之间有加减乘除计算(加减的情况比较多,乘除的情况比较少),%%之间的变量是数组或非数组(若不好实现,就全用数组也可以)
发表于 2011-3-31 22:09:47 | 显示全部楼层
如我所述,很麻烦。因为你用了数组做变量,而且有些又不是数组。
 楼主| 发表于 2011-3-31 22:11:47 | 显示全部楼层
本帖最后由 feicuiboy 于 2011-3-31 22:14 编辑

回复 24# afan

全用数组,不用非数组,这样会不会好些?


这个是您写的第一版,也是数组的
Dim $xx[3], $ini = "配置.ini"

$xx[0] = IniRead($ini, "尺寸", "B1", "")

$xx[1] = IniRead($ini, "尺寸", "B2", "")

$AA = IniRead($ini, "零件通用信息", "A3", "")

MsgBox(0, '', _Execute($AA, 1) & @LF & _Execute($AA, 2))



Func _Execute($s_ini, $x)

        Local $sR = StringRegExp($s_ini, '%\$(.+?)\[(\d+)\]%([+-])(\d+(?:\.\d+)?)', 3)

        If @error Then Return SetError(1, 0, '')

        If Not IsDeclared($sR[0]) Then Return SetError(2, 0, '')

        Local $tmp = Eval($sR[0])

        If $x = 1 Then Return Execute($tmp[$sR[1]] & $sR[2] & $sR[3])

        If UBound($sR) <> 8 Then Return SetError(3, 0, '')

        $tmp = Eval($sR[4])

        Return Execute($tmp[$sR[5]] & $sR[6] & $sR[7])

EndFunc   ;==>_Execute
发表于 2011-3-31 22:13:37 | 显示全部楼层
回复 25# feicuiboy


    反了,不用数组最好~
发表于 2011-3-31 22:18:24 | 显示全部楼层
回复 25# feicuiboy


    那是仅针对一种情况的,混搭就很麻烦。
如果你的变量是自己赋值的,那就不如用非数组变量,比如 $xx_1 , $xx_2 ...
 楼主| 发表于 2011-3-31 22:21:47 | 显示全部楼层
我把我文件的源代码附上,你看下--稍后
发表于 2011-3-31 22:24:17 | 显示全部楼层
回复 28# feicuiboy


    不用了,看那些东西麻烦,我没时间~
 楼主| 发表于 2011-3-31 22:38:39 | 显示全部楼层
回复 29# afan

用非数组的变量,两个问题
第一个:图
第二个 正则。。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-20 22:05 , Processed in 0.085646 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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