0

...databox.text (以下のコード例から) には、プログラムで以前に入力された結合された単語 (ドメイン名) の大きなリストが含まれています。各行に 1 つずつあります。この例では、最初は次のようになります。

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

次のコードは、databox 内のテキストを tlistfiltered.txt に保存し、tlistfiltered.txt を検索して、リスト "arr()" 内の項目のいずれかを含むすべての行を取得し、結果を listview(lv) に入力します。これは問題なく動作しますが、結果は次のようになります。

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

しかし、必要なのは「見つかった文字列」です( arr()list から適切なケースになるため、結果は次のようになります。

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 などを試しましたが、行全体を適切な大文字に変換するだけです。行内に含まれる「見つかった」単語のみを変換したい....

編集:

@soohooniganの答えを見た後、編集しました

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

                               databox.AppendText(match)
        Next
    Next

これに:

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

そして望ましい結果を得ました!

4

2 に答える 2

0

たとえば、中間ステップにファイルを使用し、最後にそれらを削除する必要性を理解していません。

  • 最初のステップ: 入力の行を取得するdatabox
    のプロパティを使用して実行できます(これはorLinesであると思われます。そうでない場合は、Text プロパティで Split を使用できます)。TextBoxRichTextBox

    Dim lines = databox.Lines ' or databox.Text.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
    
  • 2 番目のステップ: これらの行をフィルタリングして、検索されたテキストを含む行のみを保持します
    。これにはいくつかの方法があります。簡単な方法は、Linq クエリを使用してジョブを完了することです。
  • 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
    
于 2016-08-05T15:49:05.927 に答える
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

クラス終了

于 2016-08-05T15:31:55.173 に答える