1

Visual Basic 2010で、XAMPPローカルでホストされているサイトの.devWebアドレスを簡単に作成できるアプリケーションを作成しています。

これまでのところ、必要なファイルを追加することはできましたが、削除することはできませんでした。

txtファイル内の2つのマーカー間のすべてのテキストを削除する方法が必要です。例えば:

120.0.0.1    localhost
120.0.0.1    alsolocalhost

##testsite.dev#start#
127.0.0.1    testsite.dev
##testsite.dev#stop#

##indevsite.dev#start#
127.0.0.1    indevsite.dev
##indevsite.dev#stop#

## testsite.dev#start#マーカーと## testsite.dev#stop#マーカーの間のすべてのテキストを削除し、マーカー自体も削除したいと思います。

私の視覚的な基本コードでは、これは私がこれまでに持っているものです:

Sub removeText(ByVal siteName)
    Dim fileName As String = "hosts.txt"
    Dim startMark As String = "##" + siteName + "#start#"
    Dim stopMark As String = "##" + siteName + "#stop#"

    'Code for removing text...

End Sub

今必要なのは、他のテキストに触れることなく、必要なテキストを削除できるようにすることです(これには、フォーマットをいじらないことも含まれます)。

4

3 に答える 3

2

すべてを読み取り、バックアップコピーを作成してから、現在のブロックステータス(内部/外部)を1行ずつ確認して書き込みます。

Sub removeText(ByVal siteName)
    Dim fileName As String = "hosts.txt"
    Dim startMark As String = "##" + siteName + "#start#"
    Dim stopMark As String = "##" + siteName + "#stop#"

    ' A backup first    
    Dim backup As String = fileName + ".bak"
    File.Copy(fileName, backup, True)

    ' Load lines from the source file in memory
    Dim lines() As String = File.ReadAllLines(backup)

    ' Now re-create the source file and start writing lines not inside a block
    Dim insideBlock as Boolean = False
    Using sw as StreamWriter = File.CreateText(fileName)
        For Each line As String in lines
            if line = startMark
               ' Stop writing
               insideBlock = true 

            else if line = stopMark
               ' restart writing at the next line
               insideBlock = false 

            else if insideBlock = false
               ' Write the current line outside the block
               sw.WriteLine(line) 
            End if
        Next         
    End Using
End Sub
于 2012-11-17T00:26:09.963 に答える
1

ファイルが巨大でない場合は、すべてを文字列に読み込んで、次のように削除できます。

    Dim siteName As String = "testsite.dev"
    Dim fileName As String = "hosts.txt"
    Dim startMark As String = "##" + siteName + "#start#"
    Dim stopMark As String = "##" + siteName + "#stop#"
    Dim allText As String = IO.File.ReadAllText(fileName)
    Dim textToRemove = Split(Split(allText, startMark)(1), stopMark)(0)
    textToRemove = startMark & textToRemove & stopMark

    Dim cleanedText = allText.Replace(textToRemove, "")

    IO.File.WriteAllText(fileName, cleanedText)
于 2012-11-17T00:22:17.477 に答える
0

通常の方法を使用すると、次のような方法で目標を達成できます。

    Dim startmark, stopmark As String
    Dim exclude As Boolean = False

    Using f As New IO.StreamWriter("outputpath")
        For Each line In IO.File.ReadLines("inputpath")
            Select Case line
                Case startmark
                    exclude = True
                Case stopmark
                    exclude = False
                Case Else
                    If Not exclude Then f.WriteLine()
            End Select
        Next
    End Using

完了したら、「古い」ファイルを削除し、新しいファイルの名前を変更します。

于 2012-11-17T00:22:47.650 に答える