找回密码
 加入
搜索
查看: 2729|回复: 13

查找并返回包含字符的行

[复制链接]
发表于 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 编辑 ]
发表于 2009-1-15 16:03:07 | 显示全部楼层
虽然没看懂你的意思 但是看标题
StringReplace
 楼主| 发表于 2009-1-15 16:38:39 | 显示全部楼层
原帖由 sxd 于 2009-1-15 16:03 发表
虽然没看懂你的意思 但是看标题
StringReplace


可以表述的不太好,假设我的函数$str返回了以下内容,我想在这变量中查找并返回包含c字符的行给另外的变量$a使用($a=1111111c2222222),如何实现呢?
1111111a2222222
1111111b2222222
1111111c2222222
1111111d2222222
1111111e2222222
1111111f2222222
发表于 2009-1-15 16:53:38 | 显示全部楼层
额 我错了 应该是StringInStr  呵呵
$replace = StringInStr($str, "c")
If $replace <> 0 Then
        $a = $str
EndIf

如果你要找更复杂的条件 那就要StringRegExp 了
 楼主| 发表于 2009-1-15 23:36:31 | 显示全部楼层
可能还是我没说明白,已经假设了我的$str已经包含以下的内容:
1111111a2222222
1111111b2222222
1111111c2222222
1111111d2222222
1111111e2222222
1111111f2222222
你的方法只能判断存不存在而已,并没办法取回包含字符的行,至于提供的StringRegExp我就不熟啦,弄N久啦都没成功,似乎是没有办法这样去弄?
发表于 2009-1-16 00:18:18 | 显示全部楼层
那就笨一点的办法 每一行读到一个变量里  再检查变量里是否含有 有的话就取那个变量
 楼主| 发表于 2009-1-16 08:39:34 | 显示全部楼层
原帖由 sxd 于 2009-1-16 00:18 发表
那就笨一点的办法 每一行读到一个变量里  再检查变量里是否含有 有的话就取那个变量



这方法虽可行,但多起来的话这不是最简洁的方式。所以我才考虑与到变量中,就是想看看有没有办法通过查找字符串的方式来找寻特定的行。看大伙哪位能挤出个方法来?
发表于 2009-1-16 09:07:52 | 显示全部楼层
FileClose($FFileName)这句,
在哪里打开的文件我都没看出来。
发表于 2009-1-16 10:12:20 | 显示全部楼层
原帖由 顽固不化 于 2009-1-16 09:07 发表
FileClose($FFileName)这句,
在哪里打开的文件我都没看出来。


我想他是想关闭句柄 写错了 FileClose($FHandle)
 楼主| 发表于 2009-1-16 10:32:36 | 显示全部楼层
原帖由 sxd 于 2009-1-16 10:12 发表


我想他是想关闭句柄 写错了 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)
发表于 2009-1-16 10:47:07 | 显示全部楼层
$FHandle = FileFindFirstFile($Dir & $ext)
      $FFileName = FileFindNextFile($FHandle)

应该关闭$FHandle  而不是关闭 $FFileName
 楼主| 发表于 2009-1-16 13:31:55 | 显示全部楼层
原帖由 sxd 于 2009-1-16 10:47 发表
$FHandle = FileFindFirstFile($Dir & $ext)
      $FFileName = FileFindNextFile($FHandle)

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


谢谢更正,不过问题还是没有解决?
发表于 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)
发表于 2013-6-2 23:59:34 | 显示全部楼层
学习,脚印。。。。。。。。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-29 03:35 , Processed in 0.094551 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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