jmdfwy 发表于 2015-1-13 23:42:31

如何查找数组里面的数据

前几天发贴咨询如何获取进程描述,有高手已经回复了,可用代码
#include <Array.au3>
Local $List = ProcessList()   ;返回当前运行进程的名称和 PID 值的数组.
For $i = 1 To $List
      $List[$i] = FileGetVersion($List[$i], "FileDescription")
Next
_ArrayDisplay($List,"显示进程数组",Default,32,Default,"进程名|描述")
现在又遇到一个新问题了,上面代码得到一个数组,里面包含进程名和描述

我想要根据描述结束某个进程,那么,我会定义一个变量赋值为将要结束的进程

比如dim $killprocess="任务管理器"那么我就需要在这个数组里面进行搜索匹配的值

我查看了帮助文档,有三个命令可能查找_ArraySearch、_ArrayFindAll、_ArrayBinarySearch

好像未能成功,只能根据二进制来查找吗?

然后我使用StringToBinary("任务管理器")转换为二进制,再用_ArrayBinarySearch($List,$killprocess)查找,得到的结果是-1


请问,数组里面的数据不能查找中文吗?看帮助文档里面示例都是查找的数字

另外,还有一种办法,用_ArrayToString可以把数组内容导出为字符串,这样就不好定位进程名字


请高手解惑,TKS

afan 发表于 2015-1-14 00:01:38

已经检索过,同时标记下,或当时立即结束进程不就行了?何必之后再去搜索一遍#include <Array.au3>

Local $killprocess = '任务管理器'
Local $killprocessList = ''
Local $aList = ProcessList() ;返回当前运行进程的名称和 PID 值的数组.
ReDim $aList[$aList + 1]
For $i = 1 To $aList
        $aList[$i] = FileGetVersion($aList[$i], 'FileDescription')
        If $aList[$i] == $killprocess Then $killprocessList &= $aList[$i] & '|'
Next
_ArrayDisplay($aList, '显示进程数组', -1, 0, '', '进程名|描述')

If $killprocessList = '' Then Exit
MsgBox(0, '', $killprocessList)
Local $aPid = StringRegExp($killprocessList, '\d+', 3)
For $i = 0 To UBound($aPid) - 1
        ;ProcessClose($aPid[$i])        ;结束进程
Next

jmdfwy 发表于 2015-1-14 00:55:45

回复 2# afan


    非常感谢超级版主给力的回复

ReDim 这个关键字有些不懂

查看官方文档,注释是调整现有数组大小

按官方示例来说ReDim $aList[$aList + 1]这句代码就已经数组加1了,为何版主后面还带了个呢?

另外,这个+1是增加的行或者列?还是行和列同时加1?

afan 发表于 2015-1-14 01:13:08

回复 3# jmdfwy


    +1 才和原数组的元素数量一致,因为是在基数上加的,实际等同于 UBound(原数组)
后面的是调整的第二维的维数,即列数,原数组为2,调整为3,以装载新数据

其实就本例目的而言,这些都是多余的,只是为了调试,显示出来看看而已

tvzml 发表于 2015-1-14 09:05:23

本帖最后由 tvzml 于 2015-1-14 09:08 编辑


#include <Array.au3>
Local $killprocess = '任务管理器'
Local $killprocessList = ''
Local $aList = ProcessList() ;返回当前运行进程的名称和 PID 值的数组.
ReDim $aList[$aList + 1]
For $i = 1 To $aList
        $aList[$i] = FileGetVersion($aList[$i], 'FileDescription')
        If $aList[$i] == $killprocess Then $killprocessList &= $aList[$i] & '|'
Next
_ArrayDisplay($aList, '显示进程数组', -1, 0, '', '进程名|PID|描述')
Local $SO = _ArrayFindAll($aList, "描述关键字", 0, 0, 0, 0, 2)
If IsArray($SO) Then
        ProcessClose($aList[$SO]) ;结束进程
EndIf



绝对匹配查找,如果存在多个结果,请处理好数组即可!

jmdfwy 发表于 2015-1-14 14:45:39

FileGetVersion 这个关键字,好像不能完全获取想要的信息

上面代码中,只能获取部分程序的描述,但是在任务管理器里面,所有进程都有描述的。。。

请问,有啥解决办法不?


hjq766 发表于 2015-1-14 15:38:26

支持下,学习学习·

mshuking 发表于 2015-1-14 21:36:36

谢谢分享。。。。。。。。

wangms 发表于 2015-1-15 09:08:56

学习学习。。。。。。。。。。。。。。。。。。
页: [1]
查看完整版本: 如何查找数组里面的数据