2016-07-21 2 views
0

.sqlファイルから多くのテキストコンテンツを--Start--Endのコメントの間で取得したいと考えています。部分文字列のデータ量が少なくなっています

text.sql

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

この:私は何とか私は--start内のテキストや--ENDコメントをつかむために正しくsubstringメソッドを取得し `tをくださいどのような

私が試したものです:

$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) 

誰かが

:-)私の誤りを見つける私を助けることができればそれはいいだろう

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

変数$content1は、このようにサブ・コールがゴチャゴチャになり、まだ初期化されていません。

+0

問題は何ですか。 – vonPryz

+0

問題はそれがあまりにも少ないテキストを取得していると私はなぜ理解していないです。 – HelloWorld

+0

投稿を編集して実際の結果を追加するといいですね。サンプルを実行すると、部分文字列インデックスに関するエラーが発生しました。 – vonPryz

答えて

0

は、コード内で初期化されていない変数を使用しようとします。コードをもう一度実行すると、変数が設定され、結果はより奇妙になります。

PowershellのSet-StrictModeを使用して、初期化されていない変数に関する警告を有効にします。

0

あなたが探している部分文字列のアプローチではありませんが、私はRegExソリューションを捨てると思っていました。これにより、テキストファイルの--Startと - Endの間のテキストが検索されます。この場合、一致するテキストをLineYouWantという名前のキャプチャでグループ化し、見つかった一致を表示します。これは、複数の--Start - Endブロックのインスタンスが1つのファイルにある場合にも機能します。

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