2016-07-21 26 views
3

私はテキストファイルの最初のn行を削除する単純なスクリプトを持っています。 行番号に基づいてテキストファイルの特定の行を削除(削除)するにはどうすればよいですか?

Const FOR_READING = 1 
Const FOR_WRITING = 2 
strFileName = "C:\scripts\test.txt" 
iNumberOfLinesToDelete = 5 

Set objFS = CreateObject("Scripting.FileSystemObject") 
Set objTS = objFS.OpenTextFile(strFileName, FOR_READING) 
strContents = objTS.ReadAll 
objTS.Close 

arrLines = Split(strContents, vbNewLine) 
Set objTS = objFS.OpenTextFile(strFileName, FOR_WRITING) 

For i=0 To UBound(arrLines) 
    If i > (iNumberOfLinesToDelete - 1) Then 
     objTS.WriteLine arrLines(i) 
    End If 
Next 

私はあなただけあなただけ削除したいテキストファイル内の特定の行を持っている場合の方法があるかどうかお尋ねしたいの?意味は、テキストファイルの行番号に基づいています。

例えば、

1 
2 
This is line 3 
4 
5 

そして、あなたは具体的に行番号3

結果の行番号3を削除する:

1 
2 
4 
5 

をありどのようにそれを行うには?

回答とヘルプに大きな感謝。

答えて

2

私のエラーを見つけるためにEkkehard.Hornerに感謝します。

更新:

Const FOR_READING = 1 
Const FOR_WRITING = 2 
strFileName = "C:\scripts\test.txt" 

Set objFS = CreateObject("Scripting.FileSystemObject") 
Set objTS = objFS.OpenTextFile(strFileName, FOR_READING) 
strContents = objTS.ReadAll 
objTS.Close 

arrLines = Split(strContents, vbNewLine) 
Set objTS = objFS.OpenTextFile(strFileName, FOR_WRITING) 

For i= 0 To UBound(arrLines) 
    If ShouldSkip(i) Then 
     objTS.WriteLine arrLines(i) 
    End If 
Next 

Function ShouldSkip(i) 
    Dim arrSkipLines, x 
    arrSkipLines = Array(1, 22, 32, 42, 169) 
    For Each x In arrSkipLines 
     If x = i Then 
      ShouldSkip = True 
      Exit Function 
     End If 
    Next 

    ShouldSkip = False 
End Function 
+0

はあなたにトーマスをありがとう、私は代わりに、私の期待される出力を得るためにいくつかの変更をしたでなければならないこと@Thomas(およびその他)を表示します配列の場合、私は配列を次のように設定します: 'arrSkipLines = Array(Filter(arrSkipLines、i)= 0 Then' 'Ubound(Filter(arrSkipLines、i) 2) '行番号3は削除されます。あなたの答えは私にそれを行う方法についてのアイデアを与えました、ありがとう!:) – Djamille

+0

UBound()は配列の最後のインデックスを返します。カウント - 1);空の配列の場合は-1、要素が1つの配列の場合は0です。 –

+0

@ Ekkehard.Hornerあなたの権利を奪う。 Filterはiを含むすべての要素を返すので、私は自分の答えを修正する必要があります。 –

1

ただ、条件が

If UBound(Filter(arrSkipLines, i) = -1 Then ' i not found in array/Filter returns empty array 


>> WScript.Echo UBound(Filter(Array(1,2,3),2)) 
>> 
0 
>> WScript.Echo UBound(Filter(Array(1,2,3),4)) 
>> 
-1 
関連する問題