找回密码
 加入
搜索
查看: 11302|回复: 36

[AU3基础] [已解决] 求关注!提示下标用于非数组变量,该怎么解决。

 火.. [复制链接]
发表于 2011-7-12 15:35:31 | 显示全部楼层 |阅读模式
本帖最后由 haebong87 于 2011-7-15 13:26 编辑

在一个Test.txt 文档中,有一些数据。但是文本都是以
苹果|1|2|
西瓜|1|3|
香蕉|2|4|
这种形式来组成的。 如果想给这个苹果分隔符后面的1和西瓜分隔符后面的1进行判断应该怎么写?第一行和第二行判断之后继续往下循环。第二行和第三行,第三行和第四行。等等等等。。。
小弟在这里想到这后面不会了。特请高手指点。
$file = FileOpen("test.txt", 0)
$line = FileReadLine($file)
$array = StringSplit($line,"|",2)
If $array[1] <> ????   后面就不会了,还有。。。
If $array[1] = 下面一行的判断相同时
其中我试用过StringLeft但是前面的文本有些文字字数不同,有的是2个字,有些是3个字。
所以 Stringleft也用不了。
发表于 2011-7-12 16:26:44 | 显示全部楼层
#include<array.au3>
$txt="苹果|1|2|"&@CRLF _
&"西瓜|1|3|"&@CRLF _
&"香蕉|2|4|"

$nums=StringRegExp($txt,'.+?\|(\d+)\|',3)

_ArrayDisplay($nums)

评分

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

查看全部评分

发表于 2011-7-12 16:27:13 | 显示全部楼层
#include<array.au3>
$txt="苹果|1|2|"&@CRLF _
&"西瓜|1|3|"&@CRLF _
&"香蕉|2|4|"

$nums=StringRegExp($txt,'.+?\|(\d+)\|',3)

_ArrayDisplay($nums)

评分

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

查看全部评分

 楼主| 发表于 2011-7-12 17:27:31 | 显示全部楼层
嗯,谢谢3楼。我学一学
 楼主| 发表于 2011-7-12 18:00:42 | 显示全部楼层
本帖最后由 haebong87 于 2011-7-12 18:06 编辑

3楼能否解释一下 ($txt,'.+?\|(\d+)\|',3) 里面的 '.+?\|(\d+)\|' 这个是什么意思吗?为什么这样写?

还有如果是文本里面是下面这种情况要怎么办?
苹果|1|2011|07|14|水蜜桃|1|2012|12|12|
西瓜|2|2001|24|12|
只读取苹果的数值时呢?
上面那种情况的时候我发现 $nums会读取1和07 为什么会这样呢?
 楼主| 发表于 2011-7-12 22:21:29 | 显示全部楼层
本帖最后由 haebong87 于 2011-7-13 10:53 编辑

想让第一个数字和下一行的数字进行判断而且需要循环的话,要怎么写?
If $nums[1] <> $nums[1] then
mouseclick("left","200","200")
endif
 楼主| 发表于 2011-7-13 10:53:23 | 显示全部楼层
求回复。。
 楼主| 发表于 2011-7-13 11:54:29 | 显示全部楼层
为什么这么安静。。。
发表于 2011-7-13 15:57:53 | 显示全部楼层
回复 1# haebong87

首先要确定你前面的这些水果名的格式,是不是都是纯汉字,是否有数字 字母出现,
其次就是你后面的分隔符数量是否固定,
另外能否做成一行只含有一个水果的形式
三样有一样可以确定都好说,否则,真的不好判断,
在给别人例子的时候尽量把所有情况都写上,
正则是非常的模糊匹配,写的不详细,也就是能匹配你的例子,你没写的情况往往出现问题的!
发表于 2011-7-13 16:14:36 | 显示全部楼层
#include<array.au3>
$txt="苹果|1|2|橘子|2|4|角瓜|2|4|"&@CRLF _
&"西瓜|1|3|"&@CRLF _
&"香蕉|2|4|"

$nums=StringRegExp($txt,'(?s).+?\|(\d+)\|(?:\d+\|)+',3)

_ArrayDisplay($nums) 
 楼主| 发表于 2011-7-13 16:46:59 | 显示全部楼层
本帖最后由 haebong87 于 2011-7-13 16:51 编辑

-10 谢谢 我目前给这个部分分析明白了。 但是如果我想给苹果分隔符后面的数字提取出来和西瓜分隔符后面的数字进行比较之后判断的话应该怎么写呢?而且需要怎样循环呢?
下面就不会了
If $nums[1] <> $nums[???] then
或者当这些都在一个文档时
$file = fileopen("test.txt",0)
$line = filereadline($file)
$nums=stringregexp($line,'.+?\|(\d+)\|',2)
$nums1=stringregexp(filereadline($file,$n+1),'.+?\|(\d+)\|',2)
If $nums[1] <> $nums1[1] then
msgbox(0,"Test","false")
elseif $nums[1] = $nums1[1] then
msgbox(0,"Test","Ture")
endif
这样写了,但是不知道为什么不可以运行,求纠正。
 楼主| 发表于 2011-7-13 16:49:17 | 显示全部楼层
顺便提示一下哪里为什么出了错,谢谢。
发表于 2011-7-13 16:57:34 | 显示全部楼层
回复 12# haebong87
行数的编号下标开始是1,而数组开始是0
请比较的时候用[0]
 楼主| 发表于 2011-7-13 16:59:43 | 显示全部楼层
本帖最后由 haebong87 于 2011-7-13 17:03 编辑

-13 你是指 $n+1 那部分吗? 我每次运行都是提示 If $nums[1] <> $nums1[1] then 这里出错,能直接给我更正一下错误的部分吗?会更便于理解的,谢谢。 还有我给$nums[0] 和 $nums1[0] 这么对比的时候也提示Error的。
还有如果If $nums[1] = $nums1[1] then  这种情况的话直接跳到下一个步骤该怎么写呢?
发表于 2011-7-13 17:03:24 | 显示全部楼层
本帖最后由 love5173 于 2011-7-13 17:09 编辑

回复 14# haebong87
刚才看错了,看了你的另一个帖子才知道,你不是一起取的而是一个一个取的,下标改成0就可以了,别用1
$nums[0] = $nums1[0]
另外,上面大家给你的代码都是一次全部数字取出来的,你不用非得一行一行的比较啊,因为不知道你具体要做什么,我也不好给代码,给你提示一下
for $i=0 to UBound($array)-1
if $array=$array[i+1] then
MouseClick(......)
else
MouseClick(......)
next
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-1 23:36 , Processed in 0.084747 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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