找回密码
 加入
搜索
查看: 4824|回复: 9

[AU3基础] [已解决]麻烦懂正则的朋友帮忙从文件中取出符合条件的表空间名字

  [复制链接]
发表于 2014-3-11 09:32:08 | 显示全部楼层 |阅读模式
本帖最后由 smooth 于 2014-3-25 11:37 编辑

麻烦懂正则的朋友帮忙从这个文件中取出表空间的名字。其中:SYSTEM、SYSAUX、USERS、TEMP、UNDOTBS1这五个表空间是系统默认的,遇到他们就丢失不管。表空间名前面的NC是用户名,它的长短是不固定的,也就是说,NC有可能是ABCDEFG,但只有一个,也就是说,每一行从开头到每个表空间的名字为止,长度都是统一的。

自己不懂正则,只要前来麻烦大家了,谢谢!

'N DEFAULT_TABLESPACE                                                           
-- ------------------------------                                               
NC SYSTEM                                                                       
NC SYSTEM                                                                       
NC SYSTEM                                                                       
NC SYSAUX                                                                       
NC SYSAUX                                                                       
NC NNC_DATA01                                                                  
NC SYSTEM                                                                       
NC SYSAUX                                                                       
NC SYSAUX                                                                       
NC SYSAUX                                                                       
NC SYSAUX                                                                       

'N DEFAULT_TABLESPACE                                                           
-- ------------------------------                                               
NC SYSAUX                                                                       
NC SYSAUX                                                                       
NC SYSAUX                                                                       
NC SYSAUX                                                                       
NC SYSAUX                                                                       
NC SYSAUX                                                                       
NC SYSAUX                                                                       
NC SYSAUX                                                                       
NC SYSAUX                                                                       
NC SYSAUX                                                                       
NC SYSAUX                                                                       

'N DEFAULT_TABLESPACE                                                           
-- ------------------------------                                               
NC SYSAUX                                                                       
NC USERS                                                                        
NC USERS                                                                        
NC USERS                                                                        
NC USERS                                                                        
NC USERS                                                                        
NC USERS                                                                        
NC USERS                                                                        
NC USERS                                                                        

已选择31行。

上面是文件的内容,按要求取出后,应该是得到NNC_DATA01这个字符串。放在帖子上位置等可能会发生变化,以附件的文件为准,谢谢大家了。

附件:

本帖子中包含更多资源

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

×
发表于 2014-3-11 09:41:40 | 显示全部楼层
看不懂,你要取什么?NC NNC_DATA01    NC  你是说表名前面不固定,表名不固定,表明后面不固定?那无规则怎么取,等大大吧。
发表于 2014-3-11 09:54:43 | 显示全部楼层
你这个只能正则匹配到所有NC后面的那个单词,然后程序在排除!
 楼主| 发表于 2014-3-11 10:09:23 | 显示全部楼层
回复 2# 半翅鸟

表空间名前面的NC是用户名,它的长短是不固定的,也就是说,NC有可能是ABCDEFG,但只有一个,也就是说,每一行从开头到每个表空间的名字为止,长度都是统一的。
 楼主| 发表于 2014-3-11 13:29:30 | 显示全部楼层
我用笨的办法来弄的

Local $CoLS = _FileReadLinesToArray("ChkSpace.txt")

Local $str
For $i = 1 To $CoLS[0] - 1
        If $CoLS[$i] <> "" And Not StringInStr($CoLS[$i], "-") And Not StringInStr($CoLS[$i], "'") Then

                Local $TbSp = StringMid($CoLS[$i], StringInStr($CoLS[$i], " ", "", 1) + 1, StringInStr($CoLS[$i], " ", "", 2) - StringInStr($CoLS[$i], " ", "", 1) - 1)
                
                If $TbSp <> "SYSTEM" And $TbSp <> "SYSAUX" And $TbSp <> "USERS" And $TbSp <> "TEMP" And $TbSp <> "UNDOTBS1" Then

                        $str &= $TbSp & @CRLF
                EndIf
        EndIf
Next

MsgBox(0, 0, $str)

Func _FileReadLinesToArray($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
EndFunc   ;==>_FileReadLinesToArray
发表于 2014-3-11 14:09:24 | 显示全部楼层
“NC”这个用户名是“脑残”吗?真谦虚啊~
Local $str = FileRead('ChkSpace.txt')
Local $aSR = StringRegExp($str, '(?mi)^\w+\h+((?:(?!SYSTEM|SYSAUX|USERS|TEMP|UNDOTBS1).)+\S)\s+$', 3)
If Not @error Then MsgBox(0, '', $aSR[0])
 楼主| 发表于 2014-3-11 16:17:31 | 显示全部楼层
本帖最后由 smooth 于 2014-3-11 16:21 编辑

回复 6# afan

"NC"是用友ERP软件,New Century,即:新世纪

用正则2行代码,用普通方法要几十行代码,这就是差别啊。A大收正则徒弟吗?
发表于 2014-3-11 20:12:16 | 显示全部楼层
好像是oracle的表?
直接在SQL语句把系统用户的相关过滤不是更好吗?
 楼主| 发表于 2014-3-12 09:57:45 | 显示全部楼层
回复 8# auto

是的,你说的很对,但是一开始我不知道,我查到的命令导出来就是那样的结果。
发表于 2014-3-12 20:40:32 | 显示全部楼层
回复 9# smooth


    想要做什么呢?一般表空间是创建数据库就建立的。后期除扩建,很少用到吧?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-28 11:21 , Processed in 0.079525 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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