0

基本上,我正在创建一个工具,该工具在查看“file.txt”行时,如果该行包含该单词,则用该行替换文本框内容中的单词。

基本上,如果该行是:pizza-cheese-potatoes,所有包含“pizza”或“cheese”或“potatoes”的单词都将替换为“pizza-cheese-potatoes”

这是我到目前为止所拥有的。但是它冻结了,我真的不知道为什么。请帮我。:)

    Dim PATH As String = "C:\test.txt"

Sub Repl(x As String)
    For Each line As String In File.ReadLines(PATH)
        Dim myList = New List(Of String)(line.Split("|"c))
        For Each item As String In myList
            If x Is item Then
                TextBox1.Text.Replace(x, line)
            End If
        Next
    Next
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For Each word As String In TextBox1.Text.Split(" "c)
        Repl(word)
    Next
End Sub

先感谢您!

4

1 回答 1

0

尝试这样做。

Public Sub DoWork()
    Dim lines = IO.File.ReadAllLines(PATH)
    For Each line In lines
        Dim myList = New List(Of String)(line.Split("-"c))
        For Each item In myList
            If TextBox1.Text.Contains(item) Then
                TextBox1.Text = TextBox1.Text.Replace(item, line)
            End If
        Next
    Next
End Sub

您的阅读器会多次读取文件,这非常低效。该代码读取一次,然后我们只需遍历每一行,无需担心退出条件等。

但是,它并没有真正做任何有用的事情,因为您不会在每一行之后暂停,因此您只能查看最后一行。

也无需测试文本框是否包含文本,只需简单地进行替换,然后您只需搜索一次文本。

        For Each item In myList
            TextBox1.Text = TextBox1.Text.Replace(item, line)
        Next

- - - - 编辑 - - - -

要解决替换已替换单词的问题,您可以尝试使用替换占位符。

        For Each item In myList
            TextBox1.Text = TextBox1.Text.Replace(item, "#")
        Next
        TextBox1.Text = TextBox1.Text.Replace("#", line)

---------- 编辑 2 ------------------

您想尝试逐字构建一个新字符串,而不是替换文本框中的文本。这样您已经替换的单词不会被转换。

Function ReplaceWord(word As String, lines As String())
    For Each line As String In File.ReadLines(PATH)
        Dim myList = New List(Of String)(line.Split("|"c))
        For Each item As String In myList
            If word = item Then
                Return line
            End If
        Next
    Next
    Return word
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim result As New System.Text.StringBuilder
    Dim lines = File.ReadLines(PATH)
    For Each word As String In TextBox1.Text
        result.Append(ReplaceWord(word, lines)).Append(" ")
    Next
    Textbox1.Text = result.ToString()
End Sub
于 2016-09-09T16:55:09.307 回答