2012-04-12 22 views
5

こんにちは、Visual Basic 2008 Express Editionを使用して、私の目標は、テンプレートとして機能する.txtファイル全体を読み込み、単語のすべての単語を新しいものに置き換えます。コマンドボタンを押すと、この新しい変更されたテキストを新しい.txtに保存します。誰か私にいくつかのヒントを与えることができますかVisual Basicを使用してtxtドキュメント内のテキストを検索し置換する

答えて

7
Dim fileReader As String = My.Computer.FileSystem.ReadAllText("C:\test.txt").Replace("foo", "bar") 
My.Computer.FileSystem.WriteAllText("C:\test2.txt", fileReader, False) 

に役立ちます願っています次の例を試してみてください。 replaceのより高度な使用法については、正規表現を使用することができます。そのことについてはhereを読むことができます。

短いバージョン:

My.Computer.FileSystem.WriteAllText("C:\test2.txt", My.Computer.FileSystem.ReadAllText("C:\test.txt").Replace("foo", "bar"), False) 
+0

これは役に立ちます –

+0

ありがとうございます。コマンドボタンのクリックイベントにコードを貼り付けてコピーし、プログラムをビルドするときにボタンをクリックするとテキストファイルに置き換えられませんfooと一緒に。 –

+0

を参照してください。 String fileReaderに正しいテキストが正しく格納されていますか?あなたの問題は、ファイルが更新されないということです。私のコードは、テキストを読むためだけに作成されましたが、まだ書かれていませんでしたが、すぐにコードを更新します。 –

0

は、私はそれはあなたが、ファイルシステムのReadAllTextメソッドを使用し、パラメータとしてパスを渡すと交換したいものを置き換えるためにReplaceメソッドを使用する必要があります

Dim lOpenFile As Long 
Dim sFileText As String 
Dim sFileName As String 

sFileName = "C:\test.txt" 

'open the file and read it into a variable 
lOpenFile = FreeFile 
Open sFileName For Input As lOpenFile 
sFileText = Input(LOF(lOpenFile), lOpenFile) 
Close lOpenFile 

'change 'John Doe' to 'Mary Brown' 
sFileText = Replace(sFileText, " John Doe ", " Mary Brown ") 

'write it back to the file 
lOpenFile = FreeFile 
Open sFileName For Output As lOpenFile 
Print #lOpenFile, sFileText 
Close lOpenFile 
+0

おかげで病気にこの –

+0

エラー '開く' と宣言されていないを試してみてください。ファイルI/O機能は、 'Microsoft.VisualBasic'名前空間で使用できます。 \t C:¥Users¥EMACFEL¥AppData¥Local¥Temporary Projects¥WindowsApplication1¥Form1.vb WindowsApplication1 –

+0

何か問題がありますか? –

1

私はちょうどあなたが必要としないがらくたをカット、作ったプログラムのうち、これを引っ張りました。

Private Sub UPDATECODES_Click(sender As Object, e As EventArgs) Handles UPDATECODES.Click 
    Dim NEWCODE As String = NEWCODEBOX.Text 
    Dim CC As String = CURRENTCODE.Text 
    Dim oldcode As String 
    Dim codelines(0 To 1) As String 
    Dim olddate As String 

    Using r1 As New System.IO.StreamReader(CODEDIR & "d.dat") 
     olddate = r1.ReadToEnd 
    End Using 

    Using r2 As New System.IO.StreamReader(CODEDIR & "oc.dat") 
     oldcode = r2.ReadToEnd 
    End Using 

    If System.IO.File.Exists(CODEDIR & "new code.txt") Then 
     System.IO.File.Delete(CODEDIR & "new code.txt") 
    End If 

    If System.IO.File.Exists(CODEDIR & "CC.DAT") Then 
     If IO.File.Exists(CODEDIR & "oc.dat") Then 
      IO.File.Delete(CODEDIR & "OC.DAT") 
     End If 

     My.Computer.FileSystem.RenameFile(CODEDIR & "CC.DAT", "OC.DAT") 
     Dim FILESTREAM As System.IO.FileStream 
     FILESTREAM = New System.IO.FileStream(CODEDIR & "CC.DAT", System.IO.FileMode.Create) 
     FILESTREAM.Close() 
    End If 

    Using WRITER As New System.IO.StreamWriter(CODEDIR & "CC.DAT") 
     WRITER.WriteLine(NEWCODE) 
    End Using 

    Dim currentlines(0 To 1) As String 
    Dim a As Integer 
    Dim TextLine(0 To 1) As String 
    a = 0 

    Using sr As New System.IO.StreamReader(CODEDIR & "internet code.txt") 
     While Not sr.EndOfStream 
      ReDim codelines(0 To a) 
      codelines(a) = sr.ReadLine() 
      codelines(a) = codelines(a).Replace(CURRENTCODE.Text, NEWCODE) 
      codelines(a) = codelines(a).Replace(olddate, DATEBOX1.Text & " - " & DATEBOX2.Text) 
      Dim newfile As String = (CODEDIR & "new code.txt") 
      Using sw As New System.IO.StreamWriter(newfile, True) 
       sw.WriteLine(codelines(a)) 
      End Using 
      a = a + 1 
     End While 
    End Using 

    Using sw2 As New System.IO.StreamWriter(CODEDIR & "d.dat") 
     sw2.WriteLine(date1 & " - " & date2) 
    End Using 

    System.IO.File.Delete(CODEDIR & "internet code.txt") 
    My.Computer.FileSystem.RenameFile(CODEDIR & "new code.txt", "internet code.txt") 
    CURRENTCODE.Text = NEWCODE 
End Sub 
1

私はコードを再利用するために書いた小さなプログラムがあります。既存のものとほとんど同じクラスまたはコードファイルを作成する必要があるときに使用します。 4つのテキストボックスと、文字列がハードコードされていないことを除いて、受け入れられた回答と同じコマンドを使用するボタンを持つ基本的なフォームプログラムです。

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 

    Dim source As String = txtSource.Text 
    Dim destination As String = txtDestination.Text 
    Dim oldText As String = txtOldText.Text 
    Dim newText As String = txtNewText.Text 

    My.Computer.FileSystem.WriteAllText(destination, My.Computer.FileSystem.ReadAllText(source).Replace(oldText, newText), False) 

End Sub 
関連する問題