-1

Web サイトにテキスト ファイルがあり、webclient.downloadstring を介して文字列全体をダウンロードします。

テキスト ファイルには次のものが含まれます。

cookies,dishes,candy,(改行) back,forward,refresh,(改行) mail,media,mute,

これは単なる例であり、実際の string ではありませんが、補助目的で使用します。

私が欲しいのは、文字列全体をダウンロードし、ユーザーが入力した単語を含む行を見つけ、その行textboxを文字列に取得し、string.split を区切り文字として使用したいことです。 "そして、文字列内の各単語を に出力しますrichtextbox

これが私が使用したコードです (プライバシー上の理由から一部のフィールドは削除されています)。

If TextBox1.TextLength > 0 Then
        words = web.DownloadString("webadress here")
        If words.Contains(TextBox1.Text) Then
            'retrieval code here
            Dim length As Integer = TextBox1.TextLength
            Dim word As String
            word = words.Substring(length + 1) // the plus 1 is for the ","
            Dim cred() As String
            cred = word.Split(",")
            RichTextBox1.Text = "Your word: " + cred(0) + vbCr + "Your other word: " + cred(1)
        Else
            MsgBox("Sorry, but we could not find the word you have entered", MsgBoxStyle.Critical)
        End If
    Else
        MsgBox("Please fill in an word", MsgBoxStyle.Critical)
    End If

今では動作し、エラーはありませんが、1行目でのみ機能し、2行目または3行目では機能しません

私は何を間違っていますか?

4

2 に答える 2

0

Smi の答えは正しいですが、VB を使用しているため、vbNewLine で分割する必要があります。\n と \r は C# で使用するためのものです。私はそれにたくさんつまずきます。

これを行う別の方法は、正規表現を使用することです。正規表現の一致では、必要な単語を見つけて、それを含む行を 1 つのステップで返すことができます。

以下のほとんどテストされていないサンプル。あなたのコードがあなたが言ったことを実行しているかどうかを完全に理解できなかったので、あなたの説明に基づいて即興で作成しました。

Imports System.Text.RegularExpressions

Public Class Form1

    Private Sub ButtonFind_Click(sender As System.Object, e As System.EventArgs) Handles ButtonFind.Click

        Dim downloadedString As String
        downloadedString = "cookies,dishes,candy," _
             & vbNewLine & "back,forward,refresh," _
             & vbNewLine & "mail,media,mute,"

        'Use the regular expression anchor characters (^$) to match a line that contains the given text.
        Dim wordToFind As String = TextBox1.Text & ","  'Include the comma that comes after each word to avoid partial matches.
        Dim pattern As String = "^.*" & wordToFind & ".*$"
        Dim rx As Regex = New Regex(pattern, RegexOptions.Multiline + RegexOptions.IgnoreCase)

        Dim M As Match = rx.Match(downloadedString)
        'M will either be Match.Empty (no matching word was found), 
        'or it will be the matching line.

        If M IsNot Match.Empty Then
            Dim words() As String = M.Value.Split(","c)
            RichTextBox1.Clear()
            For Each word As String In words
                If Not String.IsNullOrEmpty(word) Then
                    RichTextBox1.AppendText(word & vbNewLine)
                End If
            Next
        Else
            RichTextBox1.Text = "No match found."
        End If

    End Sub

End Class
于 2012-06-05T20:44:32.543 に答える
0

これwordsは、コードで省略しているように見える改行文字も文字列に含まれているためです。words次のように、最初に区切り文字\n(\r\nプラットフォームによっては ) で分割する必要があります。

Dim lines() As String = words.Split("\n")

その後、各要素が 1 行を表す文字列の配列が得られます。次のようにループします。

For Each line As String In lines
    If line.Contains(TextBox1.Text) Then
        'retrieval code here
    End If
Next
于 2012-06-03T15:42:31.610 に答える