找回密码
 加入
搜索
查看: 3228|回复: 10

[AU3基础] 又不会了,还是正则。[已解决]

  [复制链接]
发表于 2012-2-14 12:46:13 | 显示全部楼层 |阅读模式
本帖最后由 sunkiss 于 2012-2-15 13:14 编辑

我用gdisk32生成了一个文件,我想提取一部分,一直没成功!
$GDARRY = StringRegExp(FileRead($gdisk32T), 'h*(\d)........(.).............................\h+(\V\d*\.\d)\h+([^CQUTOOLS^USB^DL07^ADATA^Flash^Kingston].*)', 3)
这样不行。
我想要Disk  Partitions Mbytes  Model这四列的数据,但是又不想要其中U盘的数据,现在看到的最后一列是U盘的信息。求教!
就是$GDARRY[0]=1,$GDARRY[1]=4,$GDARRY[2]=476940.0,$GDARRY[3]=ST3500418AS,$GDARRY[4]=2,$GDARRY[5]=5,$GDARRY[6]=476940.0,$GDARRY[7]=ST9500325AS,$GDARRY[8]=3,$GDARRY[9]=7,$GDARRY[10]=476940.0,$GDARRY[11]=ST950032 5AS 0001
如果有移动硬盘就接着再$GDARRY[12]=XXX,就是不要U盘的信息。现在$GDARRY[12]=4,就是我的U盘了。因为我有3个U盘,生成的息如下面的三个。每次接U盘生成的信息都变。不知道怎么获得我想要的数据。
我本来想只要去掉最后一行就行了,但是,有时我接移动硬盘后,最后一行不是U盘。但是我的U盘型号是不变的,我想能不能用型号排除。一直没成功。
Disk  Partitions  Cylinders  Heads  Sectors  Mbytes  Model
  1        4        60801     255      63  476940.0  ST3500418AS
  2        5        60801     255      63  476940.0  ST9500325AS
  3        7        60801     255      63  476940.0  ST950032 5AS 0001
  4        1         1906     255      63   14952.0  CQUTOOLS DL07

Disk  Partitions  Cylinders  Heads  Sectors  Mbytes  Model
  1        4        60801     255      63  476940.0  ST3500418AS
  2        5        60801     255      63  476940.0  ST9500325AS
  3        7        60801     255      63  476940.0  ST950032 5AS 0001
  4        1         1906     255      63   14952.0  ADATA USB Flash

Disk  Partitions  Cylinders  Heads  Sectors  Mbytes  Model
  1        4        60801     255      63  476940.0  ST3500418AS
  2        5        60801     255      63  476940.0  ST9500325AS
  3        7        60801     255      63  476940.0  ST950032 5AS 0001
  4        1         1906     255      63   14952.0  Kingston DT102
发表于 2012-2-14 12:52:17 | 显示全部楼层
我用gdisk32生成了一个文件,我想提取一部分,一直没成功!
下面的4开头的是我的U盘,三个不一样!我想排除 ...
sunkiss 发表于 2012-2-14 12:46



    描述得很乱, 我是看不明白你到底要做什么!
好好考虑下, 重新组织下语言吧!
 楼主| 发表于 2012-2-14 13:16:41 | 显示全部楼层
回复 2# user3000


    再帮忙看看吧!能看懂了吧!就是提取除U盘在内的别的我想要的信息,因为以前我用删除最后一行的办法能行来着,现在有时接移动硬盘,移动硬盘会在最后一行,所以不行了。能懂吧
发表于 2012-2-14 13:24:43 | 显示全部楼层
Local $Str = _
                'Disk  Partitions  Cylinders  Heads  Sectors  Mbytes  Model' & @CRLF & _
                '  1        4        60801     255      63  476940.0  ST3500418AS' & @CRLF & _
                '  2        5        60801     255      63  476940.0  ST9500325AS' & @CRLF & _
                '  3        7        60801     255      63  476940.0  ST950032 5AS 0001' & @CRLF & _
                '  4        1         1906     255      63   14952.0  CQUTOOLS DL07' & @CRLF & @CRLF & _
                'Disk  Partitions  Cylinders  Heads  Sectors  Mbytes  Model' & @CRLF & _
                '  1        4        60801     255      63  476940.0  ST3500418AS' & @CRLF & _
                '  2        5        60801     255      63  476940.0  ST9500325AS' & @CRLF & _
                '  3        7        60801     255      63  476940.0  ST950032 5AS 0001' & @CRLF & _
                '  4        1         1906     255      63   14952.0  ADATA USB Flash' & @CRLF & @CRLF & _
                'Disk  Partitions  Cylinders  Heads  Sectors  Mbytes  Model' & @CRLF & _
                '  1        4        60801     255      63  476940.0  ST3500418AS' & @CRLF & _
                '  2        5        60801     255      63  476940.0  ST9500325AS' & @CRLF & _
                '  3        7        60801     255      63  476940.0  ST950032 5AS 0001' & @CRLF & _
                '  4        1         1906     255      63   14952.0  Kingston DT102'
MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExpReplace($str, '.*(?:CQUTOOLS|Flash|Kingston).*\n?', '')
MsgBox(0, '替换结果', $Test)
 楼主| 发表于 2012-2-14 13:34:09 | 显示全部楼层
afan就是厉害,每次都是afan帮我忙!太感谢了,内牛满面了!这就去试试啊!
发表于 2012-2-14 13:36:25 | 显示全部楼层
#include <Array.au3>
Local $Str1 = _
                'Disk  Partitions  Cylinders  Heads  Sectors  Mbytes  Model' & @CRLF & _
                '  1        4        60801     255      63  476940.0  ST3500418AS' & @CRLF & _
                '  2        5        60801     255      63  476940.0  ST9500325AS' & @CRLF & _
                '  3        7        60801     255      63  476940.0  ST950032 5AS 0001' & @CRLF & _
                '  4        1         1906     255      63   14952.0  CQUTOOLS DL07' & @CRLF & @CRLF
Local $Str2 = _
                'Disk  Partitions  Cylinders  Heads  Sectors  Mbytes  Model' & @CRLF & _
                '  1        4        60801     255      63  476940.0  ST3500418AS' & @CRLF & _
                '  2        5        60801     255      63  476940.0  ST9500325AS' & @CRLF & _
                '  3        7        60801     255      63  476940.0  ST950032 5AS 0001' & @CRLF & _
                '  4        1         1906     255      63   14952.0  ADATA USB Flash' & @CRLF & @CRLF
Local $Str3 = _
                'Disk  Partitions  Cylinders  Heads  Sectors  Mbytes  Model' & @CRLF & _
                '  1        4        60801     255      63  476940.0  ST3500418AS' & @CRLF & _
                '  2        5        60801     255      63  476940.0  ST9500325AS' & @CRLF & _
                '  3        7        60801     255      63  476940.0  ST950032 5AS 0001' & @CRLF & _
                '  4        1         1906     255      63   14952.0  Kingston DT102'
Local $Str = $Str1
;Local $Str = $Str2
;Local $Str = $Str3
MsgBox(0, '原字符串', $Str)
Local $str_Re = StringRegExpReplace($str, '.*(?:CQUTOOLS|Flash|Kingston).*\n?', '')
MsgBox(0, '替换结果', $str_Re)

Local $aSR = StringRegExp($str_Re, '\h+(\d)\h+(\d)(?:\h+\d+){3}\h+([\d.]+)\h+(\V+)', 3)
_ArrayDisplay($aSR, UBound($aSR))
发表于 2012-2-14 13:38:34 | 显示全部楼层
回复  user3000


    再帮忙看看吧!能看懂了吧!就是提取除U盘在内的别的我想要的信息,因为以前我用 ...
sunkiss 发表于 2012-2-14 13:16


看明白了, 但还是有点费力...
建议你还直接粘出文件内容, 内容过多可上传文件, 然后标出想要结果, 这样更一目了然.
别人也有了测试的基础, 这样才好帮忙吧?
话说回来, 既然想排查U盘那行数据, 我看到固定硬盘的 Disk 肯定是 1  2  3, 还有 Partitions 也是 4  5  7 (都是不止一个分区, 而你的U盘都是一个分区), 所以可以用这两项来作进一步排除.
提取 Disk 用 '[123]' 代替 '\d', 提取 Partitions 时可类似用'[23456789]'(2到9个分区, 汗)!
发表于 2012-2-14 13:43:13 | 显示全部楼层
当然按你的想法也行,  但要改下:
([^CQUTOOLS^USB^DL07^ADATA^Flash^Kingston].*)
改为 ([^AaCcKk].*)
发表于 2012-2-14 13:57:03 | 显示全部楼层
其实不用先删除,可以直接提取
Local $Test = StringRegExp($str, '\h+(\d)\h+(\d)(?:\h+\d+){3}\h+([\d.]+)\h+(\H(?:(?!QUTOOLS|Flash|ingston).)+)(?=\r|$)', 3)
_ArrayDisplay($Test, UBound($Test))
 楼主| 发表于 2012-2-14 14:20:51 | 显示全部楼层
回复 4# afan


    太感谢了,成功了!哈哈,一直StringRegExp就没成功,哈哈,StringRegExpReplace后成功了!
Local $Str = FileRead(FileOpen( "K:\SYS\au3\失败\gd.txt"))
MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExpReplace($str, '.*(?:CQUTOOLS|Flash|Kingston).*\n?', '')
MsgBox(0, '替换结果', $Test)
 楼主| 发表于 2012-2-14 14:43:23 | 显示全部楼层
回复 9# afan


    高手就是高手,又学习了!哈哈,一直没看明白帮助里的,这下直接会了!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-22 17:41 , Processed in 0.090112 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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