找回密码
 加入
搜索
查看: 8663|回复: 19

[AU3基础] [已解决]请教大家如何从文本里取出这些文件名?

 火.. [复制链接]
发表于 2014-2-10 17:11:50 | 显示全部楼层 |阅读模式
本帖最后由 smooth 于 2014-3-25 11:40 编辑
       TS# NAME                                                         INCLUD  
---------- ------------------------------------------------------------ ------  
BIGFIL FLASHB ENCRYP                                                            
------ ------ ------                                                            
         0 SYSTEM                                                       YES     
NO     YES                                                                      
                                                                                
         1 SYSAUX                                                       YES     
NO     YES                                                                      
                                                                                
         2 UNDOTBS1                                                     YES     
NO     YES                                                                      
                                                                                

       TS# NAME                                                         INCLUD  
---------- ------------------------------------------------------------ ------  
BIGFIL FLASHB ENCRYP                                                            
------ ------ ------                                                            
         4 USERS                                                        YES     
NO     YES                                                                      
                                                                                
         3 TEMP                                                         NO      
NO     YES                                                                      
                                                                                
         6 EXAMPLE                                                      YES     
NO     YES                                                                      
                                                                                

       TS# NAME                                                         INCLUD  
---------- ------------------------------------------------------------ ------  
BIGFIL FLASHB ENCRYP                                                            
------ ------ ------                                                            
         7 NNC_DATA01                                                   YES     
NO     YES                                                                      
                                                                                
         8 NNC_INDEX01                                                  YES     
NO     YES                                                                      
                                                                                
        10 NNC_DATA02                                                   YES     
NO     YES                                                                      
                                                                                

       TS# NAME                                                         INCLUD  
---------- ------------------------------------------------------------ ------  
BIGFIL FLASHB ENCRYP                                                            
------ ------ ------                                                            
        11 NNC_INDEX02                                                  YES     
NO     YES                                                                      
                                                                                

已选择10行。
想取出SYSTEM、SYSAUX、UNDOTBS1等等这些文件名,今天弄了一天,虽然有点进展,但是还不能最终实现。因为考虑到这些文件名中间可能有空格,就把我难住了。只好前来请教大家指点,谢谢!

附件:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2014-2-10 18:26:10 | 显示全部楼层
如果说这些文本中项目的宽度(字符数)都相同的话,就截长度,去空格
 楼主| 发表于 2014-2-10 18:39:05 | 显示全部楼层
本帖最后由 smooth 于 2014-2-10 22:00 编辑


$sFilePath = "demo.txt"

Func _FileCountLines($sFilePath)

        Local $hFile = FileOpen($sFilePath, 0)
        If $hFile = -1 Then Return SetError(1, 0, 0)
        Local $sFileContent = StringStripWS(FileRead($hFile), 2)
        FileClose($hFile)
        Local $aTmp
        If StringInStr($sFileContent, @LF) Then
                $aTmp = StringSplit(StringStripCR($sFileContent), @LF)
        ElseIf StringInStr($sFileContent, @CR) Then
                $aTmp = StringSplit($sFileContent, @CR)
        Else
                If StringLen($sFileContent) Then
                        Return 1
                Else
                        Return SetError(2, 0, 0)
                EndIf
        EndIf
        Return $aTmp[0]
EndFunc   ;==>_FileCountLines

Local $nLines, $Mid
$lines = _FileCountLines($sFilePath)
$hOpen = FileOpen($sFilePath, 0)
For $i = 1 To $lines
        $rLine = FileReadLine($hOpen)
        If StringRegExp($rLine, "\d") And StringInStr($rLine, "YES") Then
                $rLine = StringReplace($rLine, "YES", "")
                $rLine = StringRegExpReplace ($rLine, "[^A-Za-z0-9/\_/]", "")
                For $i = 1 To StringLen($rLine)
                        $Mid = StringLeft($rLine, $i)
                        If StringIsDigit($Mid) = 0 Then
                            $r = $i - 1
                            ExitLoop
                        EndIf
                Next
                $rLine = StringRight($rLine, StringLen($rLine) - $r)

            $nLines &= $rLine & @CRLF
        EndIf
Next
FileClose($hOpen)
$hOpen = FileOpen($sFilePath, 2)
Local $Fwrite = FileWrite($hOpen, $nLines)
FileClose($hOpen)


如果文件名里有空格,这些代码就解决不了了,因为在用正则替换的过程中,把空格都搞掉了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2014-2-10 18:55:47 | 显示全部楼层
#include <Array.au3>
Local $Str = FileRead('demo-1.txt')
Local $aSR = StringRegExp($str, '(?mi)^\h+\d+\h+(.+?\H)\h+YES\h+\v', 3)
_ArrayDisplay($aSR, UBound($aSR))
发表于 2014-2-10 19:22:03 | 显示全部楼层
afan又炫技了,佩服
 楼主| 发表于 2014-2-10 22:03:26 | 显示全部楼层
回复 4# afan

afan厉害,短短几句代码,能完成我几十句代码都没有彻底解决的问题。
 楼主| 发表于 2014-2-11 18:12:24 | 显示全部楼层
本帖最后由 smooth 于 2014-2-11 18:13 编辑

回复 4# afan
今天在使用的时候,突然发现这样取出来的是不完整的,少了一个TEMP文件名。完成的文件名是:
SYSTEM
SYSAUX
UNDOTBS1
USERS
TEMP
EXAMPLE
NNC_DATA01
NNC_INDEX01
NNC_DATA02
NNC_INDEX0
而用你的代码取出来是这样的:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2014-2-11 22:08:38 | 显示全部楼层
回复  afan
今天在使用的时候,突然发现这样取出来的是不完整的,少了一个TEMP文件名。完成的文件名是:
...
smooth 发表于 2014-2-11 18:12



    那个是我特意删掉的。本来取出来的包含之,但查看你的代码“If StringRegExp($rLine, "\d") And StringInStr($rLine, "YES") Then”意思不就是只要含“YES”的吗?而那个是“NO”的,故做了修改。
 楼主| 发表于 2014-2-11 23:25:19 | 显示全部楼层
回复 8# afan

那是因为我的代码写的有问题,我漏掉了NO的那一行,呵呵。我今天突然才发现的。
 楼主| 发表于 2014-2-11 23:26:28 | 显示全部楼层
回复 8# afan

那是因为我的代码写的有问题,我漏掉了NO的那一行,呵呵。我今天突然才发现的,呵呵,不好意思。
发表于 2014-2-11 23:28:52 | 显示全部楼层
Local $aSR = StringRegExp($str, '(?mi)^\h+\d+\h+(.+?\H)\h+\H+\h+\v', 3)
发表于 2014-2-13 05:21:11 | 显示全部楼层
什么时候才能把正则学明白啊..头疼
发表于 2014-2-17 09:37:14 | 显示全部楼层
什么时候才能把正则学明白啊..头疼
58fly 发表于 2014-2-13 05:21



    同上,头疼这个东西的很。学的时候觉得自己懂了,一丢开书本就不知道咋用了。而且好久不用就要忘记,比五笔字根还难。
发表于 2014-2-17 11:05:48 | 显示全部楼层
抬头仰望各位大大。。。。。。
发表于 2014-2-17 22:25:30 | 显示全部楼层
正则表达式的强大力量。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-29 16:42 , Processed in 0.093220 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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