2016-11-30 4 views
1

正規表現を使ってテキストファイルから行全体(ブレーク行を含む)を削除しようとしています。予想通り大丈夫ですVBSで正規表現を使って行全体を削除する際のトラブル

Do Until objFileToRead1.AtEndOfStream 
    nline = objFileToRead1.ReadLine() 
    regEx.Pattern = ".*to " 
    nline = regEx.Replace(nline, "") 
    objFileToRead2.WriteLine nline 
Loop 

と仕事:

は、これは私のコードです。 だから、私のテキストファイルが含まれている場合:

 
hahahaha to 
hehehehe to hihihihi 
hohohoho to 

それは次のようになります。

 
(blank line) 
hehehehe to hihihihi 
(blank line)` 

は、しかし、私は空白のような必要はありません。私はすでにregEx.Pattern = ".*to \r\n"を使ってみましたが、正規表現の\r\nが動作していないようです。何かを削除しないようなスクリプトを実行しようとするたびに(何も見つからないので)また、かっこと大括弧で式をカプセル化しようとしましたが、運はありませんでした。

これについてのヒントはありますか?

+0

「nline」が一致すると空白になることはありますか?ファイルに書き込む前にチェックしてください。 'If Len(nline)> 0 Then objFileToRead2.WriteLine nline' –

+0

@WiktorStribiżew実際には、' to 'で終わるすべての行を置き換えようとしていますが、この' nothing 'は行は空白のままではなく削除する必要があります。 – Adami

+0

以下の解決策をお読みください。問題はあなたがまだ '.WriteLine'で空行を書くことです。 –

答えて

3

ReadLineは、ストリーム内の次の行を読み取ります。結果には改行が含まれていないため、一致する正規表現には\r\nはありません。

nlineが空の場合は、出力の空白行を防ぐには、WriteLineを呼び出しないでください。あるいは、あなたの場合、あなたの正規表現のパターンと一致しないときだけ、出力に行を書いてください。ここで

は、私がどうなるのかです:

Set regEx = New RegExp 
regEx.Pattern = "to \S+" 

Do Until objFileToRead1.AtEndOfStream 
    line = objFileToRead1.ReadLine 
    If Not regEx.Test(line) Then objFileToRead2.WriteLine line 
Loop 

さらに注記:

  • ループで正規表現パターンを再定義しておく必要はありません。
  • 固定文字列を探しているようだから、正規表現は必要ないかもしれません。それを行うにはInStr() functionを使うことができます。大きな入力ファイルの場合、パフォーマンス上の利点があります。
+0

あなたの模様は "heihhehe to hihihihi"と一致します(したがってスキップします)。 –

+0

あなたはそうです。OPの元の正規表現に従って修正されました。 – Tomalak

+0

ねえ、私はすでに@ Ekkehard.Hornerの答えに基づいてコーディングしていました。結局、コードはあなたの答えとほぼ同じになりました。とにかくありがとう!! – Adami

3

nline = objFileToRead1.ReadLine() 

nlineは、末尾のvbCrLfのRESPが含まれていません。 \ r \ nので、新しい正規表現は一致しません。

「S + $を\にする」出力ファイルに「へ」の後に何か面白いもの、ちょうど.WriteLine持つ行だけをしたい場合にのみnline試合は、(1以上の非whilespaces前に、空白の1に終了します)。 I.E:交換については忘れてください。

+0

ありがとう、それは私を啓発しました。私は正規表現を "to \ S +"に調整しなければなりません。なぜなら、行の終わりより前にそれ以上のテキストがあったからです。 – Adami

関連する問題