2016-07-21 118 views
0

我想從--Start--End評論之間的.sql文件中獲取大量文本內容。子串數據越來越少

無論我做什麼不知何故,我不`噸正確地得到子方法搶只有 - 啓動中的文本和--End評論:

text.sql

This text I want not 
--Start 
this text I want here 
--End 
This text I want not 

這是我的嘗試:

$insertStartComment = "--Start" 
$insertEndComment = "--End" 

$content = [IO.File]::ReadAllText("C:\temp\test.sql") 
$insertStartPosition = $content.IndexOf($insertStartComment) + $insertStartComment.Length 

$insertEndPosition = $content.IndexOf($insertEndComment) 
$content1 = $content.Substring($insertStartPosition, $content1.Length - $insertEndPosition) 
$content = $content1.Substring(0,$content1.Length - $insertEndPosition) 

這將是很好,如果有人可以幫助我找到我的錯誤:-)

+0

那麼,什麼問題? – vonPryz

+0

問題是文本太少,我不明白爲什麼。 – HelloWorld

+0

如果您想編輯帖子並添加實際結果,那就太好了。當我運行示例時,有關子字符串索引的錯誤。 – vonPryz

回答

0

有使用未初始化的變量在代碼中嘗試:

$content1 = $content.Substring($insertStartPosition, $content1.Length - $insertEndPosition) 

變量$content1是尚未初始化,因此子呼叫進入瘋狂。當你再次運行代碼時,變量被設置 - 結果更奇怪。

使用Powershell的Set-StrictMode來啓用有關未初始化變量的警告。

0

這不是您尋找的子字符串方法,但我想我會拋出RegEx解決方案。這將在文本文件中找到--Start和--End之間的文本。在這種情況下,我將匹配的文本與名爲LineYouWant的命名捕捉進行分組,並顯示它找到的匹配。如果在一個文件中有多個--Start - End塊,這也適用。

$Text = [IO.File]::ReadAllText("C:\users\proxb\desktop\SQL.txt") 
[regex]::Matches($Text,'.*--Start\s+(?<LineYouWant>.*)\s+--End.*') | ForEach { 
    $_.Groups['LineYouWant'].Value 
}