haebong87 发表于 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 <> ????   后面就不会了,还有。。。
If $array = 下面一行的判断相同时其中我试用过StringLeft但是前面的文本有些文字字数不同,有的是2个字,有些是3个字。
所以 Stringleft也用不了。

papapa314 发表于 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)

papapa314 发表于 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)

haebong87 发表于 2011-7-12 17:27:31

嗯,谢谢3楼。我学一学

haebong87 发表于 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 为什么会这样呢?

haebong87 发表于 2011-7-12 22:21:29

本帖最后由 haebong87 于 2011-7-13 10:53 编辑

想让第一个数字和下一行的数字进行判断而且需要循环的话,要怎么写?If $nums <> $nums then
mouseclick("left","200","200")
endif

haebong87 发表于 2011-7-13 10:53:23

求回复。。

haebong87 发表于 2011-7-13 11:54:29

为什么这么安静。。。

love5173 发表于 2011-7-13 15:57:53

回复 1# haebong87

首先要确定你前面的这些水果名的格式,是不是都是纯汉字,是否有数字 字母出现,
其次就是你后面的分隔符数量是否固定,
另外能否做成一行只含有一个水果的形式
三样有一样可以确定都好说,否则,真的不好判断,
在给别人例子的时候尽量把所有情况都写上,
正则是非常的模糊匹配,写的不详细,也就是能匹配你的例子,你没写的情况往往出现问题的!

love5173 发表于 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)

haebong87 发表于 2011-7-13 16:46:59

本帖最后由 haebong87 于 2011-7-13 16:51 编辑

-10 谢谢 我目前给这个部分分析明白了。 但是如果我想给苹果分隔符后面的数字提取出来和西瓜分隔符后面的数字进行比较之后判断的话应该怎么写呢?而且需要怎样循环呢?
下面就不会了If $nums <> $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 <> $nums1 then
msgbox(0,"Test","false")
elseif $nums = $nums1 then
msgbox(0,"Test","Ture")
endif这样写了,但是不知道为什么不可以运行,求纠正。{:face (319):}

haebong87 发表于 2011-7-13 16:49:17

顺便提示一下哪里为什么出了错,谢谢。

love5173 发表于 2011-7-13 16:57:34

回复 12# haebong87
行数的编号下标开始是1,而数组开始是0
请比较的时候用

haebong87 发表于 2011-7-13 16:59:43

本帖最后由 haebong87 于 2011-7-13 17:03 编辑

-13 你是指 $n+1 那部分吗? 我每次运行都是提示 If $nums <> $nums1 then 这里出错,能直接给我更正一下错误的部分吗?会更便于理解的,谢谢。 还有我给$nums 和 $nums1 这么对比的时候也提示Error的。
还有如果If $nums = $nums1 then这种情况的话直接跳到下一个步骤该怎么写呢?

love5173 发表于 2011-7-13 17:03:24

本帖最后由 love5173 于 2011-7-13 17:09 编辑

回复 14# haebong87
刚才看错了,看了你的另一个帖子才知道,你不是一起取的而是一个一个取的,下标改成0就可以了,别用1
$nums = $nums1
另外,上面大家给你的代码都是一次全部数字取出来的,你不用非得一行一行的比较啊,因为不知道你具体要做什么,我也不好给代码,给你提示一下
for $i=0 to UBound($array)-1
if $array=$array then
MouseClick(......)
else
MouseClick(......)
next
页: [1] 2 3
查看完整版本: [已解决] 求关注!提示下标用于非数组变量,该怎么解决。