stjie 发表于 2009-1-15 15:44:11

查找并返回包含字符的行

还未解决~再研究

写了一个函数将指定目录下的exe文件写入变量$str中,现想查看并返回包含字符(假设为aa.exe)的行,如何处理?
#include <Timers.au3>
$str=""
$DirName="f:\start"
$ext="*.*"

$starttime = _Timer_Init()
_listview($DirName,$ext)
$time=_Timer_Diff($starttime)


MsgBox(0,$time,$str)

Func _listview($Dir,$ext)
        Local $FHandle,$FFileName
        If StringRight($Dir, 1) <> '\' Then $Dir = $DirName & '\'
        $FHandle = FileFindFirstFile($Dir & $ext)
;~         If $FHandle = -1 Then Return -1
        While True
                $FFileName = FileFindNextFile($FHandle)
                If @error Then ExitLoop
                If $FFileName = '.' Or $FFileName = '..' Then ContinueLoop
                If StringInStr(FileGetAttrib($Dir & $FFileName), 'D') Then
                        _listview($Dir & $FFileName & "\","*.exe")
                Else
                        If StringRight($FFileName,3)="exe"Then $str &= $Dir & $FFileName& ""
                EndIf
        WEnd
        FileClose($FFileName)
EndFunc



[ 本帖最后由 stjie 于 2009-1-19 15:52 编辑 ]

sxd 发表于 2009-1-15 16:03:07

虽然没看懂你的意思 但是看标题
StringReplace

stjie 发表于 2009-1-15 16:38:39

原帖由 sxd 于 2009-1-15 16:03 发表 http://www.autoitx.com/images/common/back.gif
虽然没看懂你的意思 但是看标题
StringReplace

可以表述的不太好,假设我的函数$str返回了以下内容,我想在这变量中查找并返回包含c字符的行给另外的变量$a使用($a=1111111c2222222),如何实现呢?
1111111a2222222
1111111b2222222
1111111c2222222
1111111d2222222
1111111e2222222
1111111f2222222

sxd 发表于 2009-1-15 16:53:38

额 我错了 应该是StringInStr呵呵
$replace = StringInStr($str, "c")
If $replace <> 0 Then
        $a = $str
EndIf
如果你要找更复杂的条件 那就要StringRegExp 了

stjie 发表于 2009-1-15 23:36:31

可能还是我没说明白,已经假设了我的$str已经包含以下的内容:
1111111a2222222
1111111b2222222
1111111c2222222
1111111d2222222
1111111e2222222
1111111f2222222
你的方法只能判断存不存在而已,并没办法取回包含字符的行,至于提供的StringRegExp我就不熟啦,弄N久啦都没成功,似乎是没有办法这样去弄?

sxd 发表于 2009-1-16 00:18:18

那就笨一点的办法 每一行读到一个变量里再检查变量里是否含有 有的话就取那个变量

stjie 发表于 2009-1-16 08:39:34

原帖由 sxd 于 2009-1-16 00:18 发表 http://www.autoitx.com/images/common/back.gif
那就笨一点的办法 每一行读到一个变量里再检查变量里是否含有 有的话就取那个变量


这方法虽可行,但多起来的话这不是最简洁的方式。所以我才考虑与到变量中,就是想看看有没有办法通过查找字符串的方式来找寻特定的行。看大伙哪位能挤出个方法来?

顽固不化 发表于 2009-1-16 09:07:52

FileClose($FFileName)这句,
在哪里打开的文件我都没看出来。

sxd 发表于 2009-1-16 10:12:20

原帖由 顽固不化 于 2009-1-16 09:07 发表 http://www.autoitx.com/images/common/back.gif
FileClose($FFileName)这句,
在哪里打开的文件我都没看出来。

我想他是想关闭句柄 写错了 FileClose($FHandle)

stjie 发表于 2009-1-16 10:32:36

原帖由 sxd 于 2009-1-16 10:12 发表 http://www.autoitx.com/images/common/back.gif


我想他是想关闭句柄 写错了 FileClose($FHandle)

帮助例子提供的:
; Shows the filenames of all files in the current directory.
$search = FileFindFirstFile("*.*")

; Check if the search was successful
If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
EndIf

While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
   
    MsgBox(4096, "File:", $file)
WEnd

; Close the search handle
FileClose($search)

sxd 发表于 2009-1-16 10:47:07

$FHandle = FileFindFirstFile($Dir & $ext)
      $FFileName = FileFindNextFile($FHandle)

应该关闭$FHandle而不是关闭 $FFileName

stjie 发表于 2009-1-16 13:31:55

原帖由 sxd 于 2009-1-16 10:47 发表 http://www.autoitx.com/images/common/back.gif
$FHandle = FileFindFirstFile($Dir & $ext)
      $FFileName = FileFindNextFile($FHandle)

应该关闭$FHandle而不是关闭 $FFileName

谢谢更正,不过问题还是没有解决?

liongodmien 发表于 2009-1-16 14:37:02

可以表述的不太好,假设我的函数$str返回了以下内容,我想在这变量中查找并返回包含c字符的行给另外的变量$a使用($a=1111111c2222222),如何实现呢?
1111111a2222222
1111111b2222222
1111111c2222222
1111111d2222222
1111111e2222222
1111111f2222222

下面是找出中间含字母C的正则式,不过只找出第一个,要找出全部合条件的修改一下即可
$a = stringregexp($str, '(?U)\w*c\w*', 1, 1)

ainizm 发表于 2013-6-2 23:59:34

学习,脚印。。。。。。。。。。
页: [1]
查看完整版本: 查找并返回包含字符的行