0

textbox行ごとに文字列を抽出するループと、反復ごとに複数の条件があります。条件が真の場合、文字列から行を削除したいのですtextboxが、文字列から行全体を削除する方法はありますか? これが私のコードです..

Dim fileContents As String
    fileContents = txtOCR.Text
    Dim strSet(1000) As String
    Dim a As Integer = 1
    Dim words As String

    MsgBox(fileContents)

    For i = 1 To fileContents.Length
        Dim xx As String = Mid(fileContents, i, 1)

        'parse text line by line
        If xx = Chr(10) Then
            If Mid(fileContents, i - 1, 1) = Chr(13) Then
                strSet(i) = Mid(fileContents, a, (i - a) - 1)

    'count words
                Dim intCount As Integer
                intCount = 1
                For b = 1 To Len(strSet(i))
                    If Mid(strSet(i), b, 1) = " " Then
                        intCount = intCount + 1
                    End If
                Next

        If txtTitle.Text = "" And intCount = 1 Then
                txtTitle.Text = " " & strSet(i)

    ElseIf intCount = 1 Then
                    If strSet(i).Contains("BY") = True Then
                        GoTo lastline

                    ElseIf strSet(i).Contains("by") = True Then
                        GoTo lastline

                    ElseIf strSet(i).Contains("By") = True Then
                        GoTo lastline


                    Else
                        txtTitle.Text = txtTitle.Text + " " & strSet(i)

                    End If

            End If

            a = i

        End If
    Next

また、キーワード「BY」が見つかった場合、文字列の次の行をコピーすることはできますか? これは私の論文プロジェクトのための助けが必要です..

4

3 に答える 3

1

これを試してみてtくださいTextBox

    Dim linesResult As New List(Of String)()
    Dim iNumWords As Integer
    Dim bFound As Boolean

    For iLine As Integer = 0 To t.Lines.Length - 1
        Dim words() As String = t.Lines(iLine).Split(" "c)

        If bFound Then TextBox2.Text &= t.Lines(iLine) & Environment.NewLine()

        iNumWords += words.Length
        bFound = False

        For Each elem As String In words
            If elem.Equals("by", StringComparison.CurrentCultureIgnoreCase) Then
                bFound = True
                Exit For
            End If
        Next

        If Not bFound Then linesResult.Add(t.Lines(iLine))
    Next
    t.Lines = linesResult.ToArray()
于 2013-02-25T15:10:25.040 に答える
1

多くの古い VB6 関数を使用していますが、これらは下位互換性のために VB.NET でサポートされていますが、新しい開発にはあまりお勧めできません。この種のタスクをはるかに簡単にする .NET フレームワークの機能を使用する方がよいでしょう。例えば:

  • List(Of String)またはStringBuilderの代わりに使用するDim strSet(1000) As String
  • MessageBox.Showの代わりに使用MsgBox
  • String.SubStringの代わりに使用Mid
  • String.Lengthの代わりに使用Len
  • andの代わりにContrlCharsorを使用するEnvironment.NewLineChr(10)Chr(13)
  • そしてなにより、使わないでくださいGoTo

ただし、不足している最も重要なツールは、String.Split文字列を 1 つ以上の区切り文字で文字列の配列に分割するメソッドです。この場合、改行文字列で文字列を分割できます。例えば:

Dim builder As New StringBuilder()
For Each line As String In fileContents.Split(New String() {Environment.NewLine}, StringSplitOptions.None)
    If Not line.ToLower().Contains("by") Then
        builder.AppendLine(line)
    End If
Next
txtOCR.Text = builder.ToString()

または、StringReader好みやスタイルによっては、次のクラスを使用することもできます。

Dim builder As New StringBuilder()
Dim reader As New StringReader(txtOCR.Text)
While True
    Dim line As String = reader.ReadLine()
    If line Is Nothing Then Exit While
    If Not line.ToLower().Contains("by") Then
        builder.AppendLine(line)
    End If
End While
txtOCR.Text = builder.ToString()

または、自分がどれほど賢いかを証明したい場合は、LINQ 拡張メソッドを使用してすべてを 1 行で実行できます。

txtOCR.Text = String.Join(Environment.NewLine, fileContents.Split(New String() {Environment.NewLine}, StringSplitOptions.None).Where(Function(x) Not x.ToLower().Contains("by")))

ただし、そのようにすべてを詰め込むよりも、ロジックを詳しく説明した方がコードが読みやすい場合があります:)

アップデート

これは、すべての「by」行とその直後の行を取得する方法の 1 つです。

Dim builder As New StringBuilder()
Dim reader As New StringReader(txtOCR.Text)
While True
    Dim line As String = reader.ReadLine()
    If line Is Nothing Then Exit While
    If line.ToLower().Contains("by") Then
        builder.AppendLine(line)
        builder.AppendLine(reader.ReadLine())
    End If
End While
txtOCR.Text = builder.ToString()
于 2013-02-25T15:26:47.030 に答える
0

詳しくは割愛しますが、「\n」を検出することで、この作業ができるようになると思います。試してみましたか?

于 2013-02-25T14:50:36.577 に答える