2016-09-09 5 views
0

基本的に私は、テキストボックスの内容の単語を、その行にその単語が含まれている場合、その行に置き換えるために "file.txt"の行を探しているツールを作成しています。基本的にはアドバンストフリーズフリーズ

ラインがある場合:ピザチーズポテト、

を「ピザ」や「チーズ」や「ピザ・チーズポテト」に置き換えるべき「ジャガイモ」を含むすべての単語ここで、私があります今まで持っていた。しかし、それは凍結し、私は本当に理由を知らない。私を助けてください。 :)

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 

ありがとうございます!

答えて

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 
+0

ありがとうございます。それは動作しますが、私が期待した通りではありません。 For EachとFor someの間にはある種の矛盾があり、何らかの理由で同じ世界を何度も置き換えます。置き換えられた単語もファイルの行にあるからです。 設定入力とモーションの例:http://prntscr.com/cg3m7h – Nana

+0

代替品への別のアプローチで編集を投稿しました – FloatingKiwi

+0

今は天才です。私はこのような箱から考えることができればと願っています。非常にFloatingKiwiありがとうございます。あなたは素晴らしいです! – Nana