2016-08-05 22 views
0

... databox.text(以下のサンプルコードから)は、以前にプログラムに入力された結合語(ドメイン名)の大きなリストを含んでいます。各行に1つずつあります。文字列の視覚的な基本検索テキスト、適切な場合の結果を表示

thepeople.com 
truehistory.com 
workhorse.com 
whatever.com 
neverchange.com 
... 

は、次のコードは、以下のtlistfiltered.txtするdatabox内のテキストを保存した後、「リスト内の項目のいずれかを含むすべての行を取得するtlistfiltered.txt検索編曲:のように、この例では、最初に見えます() "を実行し、結果をlistview(lv)に取り込みます。これはうまく動作しますが、結果は次のようになります。

thepeople.com 
truehistory.com 
neverchange.com 
... 

しかし、私は必要なの結果は次のようになりますので、「見つかった文字列」(ARRから()リストが適切な場合になることです。

thePeople.com 
trueHistory.com 
neverChange.com 
ここで

コードです....

Dim s As String = databox.Text 
     File.WriteAllText(dloc & "tlistfiltered.txt", s) 
     databox.Clear() 

     Dim text2() As String = System.IO.File.ReadAllLines(dloc & "tlistfiltered.txt") 

     Dim arr() As String = {"people", "history", "change"} 
     For index1 = 0 To arr.GetUpperBound(0) 

      Dim YesLines() As String = Array.FindAll(text2, Function(str As String) 

                   Return str.Contains(arr(index1)) 

                  End Function).ToArray 

      databox.Visible = True 
      For index2 = 0 To YesLines.GetUpperBound(0) 
       Dim match As String = (YesLines(index2)) & vbCrLf 

            databox.AppendText(match) 
      Next 
     Next 
     s = databox.Text 
     File.WriteAllText(dloc & "tlistfilteredfinal.txt", s) 
     databox.Clear() 
     domains = (From line In File.ReadAllLines(dloc & "tlistfilteredfinal.txt") Select New ListViewItem(line.Split)).ToArray 
     lv.Items.Clear() 
     My.Computer.FileSystem.DeleteFile(dloc & "tlistfiltered.txt") 
     My.Computer.FileSystem.DeleteFile(dloc & "tlistfilteredfinal.txt") 
     BackgroundWorker1.RunWorkerAsync() 
    End Sub 

がその場でこれを行う方法はありますか?私はは、StrConvなどを試してみましたが、それだけで適切な場合に行全体を変換します。私は唯一の "欲しいです発見された "単語が含まれているverted ....

編集:

databox.Visible = True 
      For index2 = 0 To YesLines.GetUpperBound(0) 
       Dim match As String = (YesLines(index2)) & vbCrLf 
       Dim myTI As System.Globalization.TextInfo = New System.Globalization.CultureInfo("en-US", False).TextInfo 
       If match.Contains(arr(index1)) Then 
        match = match.Replace(arr(index1), myTI.ToTitleCase(arr(index1))) 
        'StrConv(match, vbProperCase) 
        databox.AppendText(match) 
       End If 
      Next 

および所望の結果を得た:

をの答えを@soohoonigan見た後、私はこれに

 databox.Visible = True 
     For index2 = 0 To YesLines.GetUpperBound(0) 
      Dim match As String = (YesLines(index2)) & vbCrLf 

           databox.AppendText(match) 
     Next 
    Next 

を編集しました!

答えて

0

パブリック・クラスのForm1

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Dim test As String = "thepeople.com" 
    Dim search As String = "people" 
    Dim myTI As System.Globalization.TextInfo = New System.Globalization.CultureInfo("en-US", False).TextInfo 
    If test.Contains(search) Then 
     test = test.Replace(search, myTI.ToTitleCase(search)) 
     MsgBox(test) 
    End If 
    Me.Close() 
End Sub 

エンドクラス

+0

ありがとう!私はコードを編集しました: – t4nk

0

私は中間ステップのためのファイルを使用し、例えばエンドでそれらを削除するための必要性を理解することはよく分かりません。

  • まずステップ:私はあることを疑うdataboxのLinesプロパティを(使用して行うことができ、入力
    のラインを得ることがTextBoxまたはRichTextBox;それはケースはない場合、我々はまだ使用することができますTextプロパティに分割)

    Dim lines = databox.Lines ' or databox.Text.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries) 
    
  • 第二ステップ:我々はいくつかの方法がありますが、単純なものは、LINQクエリを使用することです。このため、検索テキスト
    を含むものだけを保つためにこれらの行をフィルタリングします取得するjob done
  • 第3ステップ:検索したテキストを大文字で置き換えるフィルタの結果を変換する
    開始クエリを続行し、変換を行うために投影(またはマッピング)を追加します。
    これにはTextInfo.ToTitleCaseを使用する必要があります。

    ' See soohoonigan answer if you need a different culture than the current one 
    Dim textInfo = System.Globalization.CultureInfo.CurrentCulture.TextInfo 
    
    Dim query = From word in arr 
          From line in lines 
          Where line.Contains(word) 
          Let transformed = line.Replace(word, textInfo.ToTitleCase(word)) 
          select transformed 
    ' We could omit the Let and do the Replace directly in the Select Clause 
    
+0

私のコードは非常に非効率です...あなたの反応を取って、その方法を実装しようとしています... – t4nk

関連する問題