[已解决]麻烦懂正则的朋友帮忙从文件中取出符合条件的表空间名字
本帖最后由 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这个字符串。放在帖子上位置等可能会发生变化,以附件的文件为准,谢谢大家了。
附件:
看不懂,你要取什么?NC NNC_DATA01 NC你是说表名前面不固定,表名不固定,表明后面不固定?那无规则怎么取,等大大吧。 你这个只能正则匹配到所有NC后面的那个单词,然后程序在排除! 回复 2# 半翅鸟
表空间名前面的NC是用户名,它的长短是不固定的,也就是说,NC有可能是ABCDEFG,但只有一个,也就是说,每一行从开头到每个表空间的名字为止,长度都是统一的。 我用笨的办法来弄的
Local $CoLS = _FileReadLinesToArray("ChkSpace.txt")
Local $str
For $i = 1 To $CoLS - 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
“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) 本帖最后由 smooth 于 2014-3-11 16:21 编辑
回复 6# afan
"NC"是用友ERP软件,New Century,即:新世纪
用正则2行代码,用普通方法要几十行代码,这就是差别啊。A大收正则徒弟吗? 好像是oracle的表?
直接在SQL语句把系统用户的相关过滤不是更好吗? 回复 8# auto
是的,你说的很对,但是一开始我不知道,我查到的命令导出来就是那样的结果。 回复 9# smooth
想要做什么呢?一般表空间是创建数据库就建立的。后期除扩建,很少用到吧?
页:
[1]