none
查找关键字问题 RRS feed

  • 问题

  •    Dim fName As String = "c:\EJ111031_111101.txt"            

            Dim testTxt As New StreamReader(fName)
            Dim allRead As String = testTxt.ReadToEnd()     

            testTxt.Close()                

            Dim regMatch As String = "ACCUMULATED DEPOSIT TOTAL"

            If Regex.IsMatch(allRead, regMatch) Then     
                Dim a As String
                MessageBox.Show("Found")

            Else
                MessageBox.Show("Not Found")
            End If

    我导入了一个txt文件,然后显示在richtextbox.我想查找ACCUMULATED DEPOSIT TOTAL在richtextbox里,并把那一行显示在richtextbox2(不包括ACCUMULATED DEPOSIT TOTAL,只要获取ACCUMULATED DEPOSIT TOTAL后面的全部字符).该怎样写??

    例子

    ACCUMULATED DEPOSIT TOTAL=100

    我想把全部符合ACCUMULATED DEPOSIT TOTAL在richtextbox里,把100字符显示在richtextbox2。。


    • 已编辑 ckjason 2012年2月16日 4:05
    2012年2月16日 3:56

答案

  • Private Sub Button3_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button3.Click

            Dim regMatch As String = "ACCUMULATED DEPOSIT TOTAL=RM(\d+)"
            For Each ms As Match In Regex.Matches(TextBox2.TextregMatch)
                Dim s As String = ms.Value
                TextBox1.Text &= (s & vbCrLf)
                TextBox1.Text &= (s.Substring(s.IndexOf("RM") + 2))
            Next
        End Sub


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    2012年2月16日 7:02
    版主

全部回复

  • 使用String.IndexOf和SubString函数:

    Module A

        Public Sub main()
            Dim allRead As String 
    "ACCUMULATED DEPOSIT TOTAL=100;abcdeACCUMULATED DEPOSIT TOTAL=200;kdhfjdACCUMULATED DEPOSIT TOTAL=500"

            Dim regMatch As String = "ACCUMULATED DEPOSIT TOTAL=\d+"

            For Each ms As Match In Regex.Matches(allReadregMatch)
                Console.WriteLine("查找到的字符串:")
                Dim s As String = ms.Value
                Console.WriteLine(s & vbCrLf & "后边的字符")
                Console.WriteLine(s.Substring(s.IndexOf("=") + 1))
            Next
        End Sub

    End Module


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年2月16日 5:22
    版主
  • 使用String.IndexOf和SubString函数:

    Module A

        Public Sub main()
            Dim allRead As String 
    "ACCUMULATED DEPOSIT TOTAL=100;abcdeACCUMULATED DEPOSIT TOTAL=200;kdhfjdACCUMULATED DEPOSIT TOTAL=500"

            Dim regMatch As String = "ACCUMULATED DEPOSIT TOTAL=\d+"

            For Each ms As Match In Regex.Matches(allReadregMatch)
                Console.WriteLine("查找到的字符串:")
                Dim s As String = ms.Value
                Console.WriteLine(s & vbCrLf & "后边的字符")
                Console.WriteLine(s.Substring(s.IndexOf("=") + 1))
            Next
        End Sub

    End Module


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    1。 DimallReadAsString
    = "ACCUMULATED DEPOSIT TOTAL=100;abcdeACCUMULATED DEPOSIT TOTAL=200;kdhfjdACCUMULATED DEPOSIT TOTAL=500" '这是什么意思?

    2。 我要修改哪个代码才可以在richtextbox查找那个关键词?

         
    • 已标记为答案 ckjason 2012年2月16日 6:45
    • 取消答案标记 ckjason 2012年2月16日 6:49
    2012年2月16日 5:37
  • 1)第一句话是我自己随便写的,实际上是指代你从txt中读取的真实内容,我方便测试而已。

    2)你运行我的代码呗,自己看看啊;注意ForEach这里,Console.WriteLine可能是你需要替换成richTextBox的内容。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年2月16日 5:40
    版主
  • 1)第一句话是我自己随便写的,实际上是指代你从txt中读取的真实内容,我方便测试而已。

    2)你运行我的代码呗,自己看看啊;注意ForEach这里,Console.WriteLine可能是你需要替换成richTextBox的内容。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


            Dim allRead As String = "ACCUMULATED DEPOSIT TOTAL=100;abcdeACCUMULATED DEPOSIT TOTAL=200;kdhfjdACCUMULATED DEPOSIT TOTAL=500"
            Dim regMatch As String = "ACCUMULATED DEPOSIT TOTAL=\d+"
            For Each ms As Match In Regex.Matches(RichTextBox1.Text, regMatch)

                Dim s As String = ms.Value
                RichTextBox2.Text = (s & vbCrLf )
                RichTextBox2.Text = (s.Substring(s.IndexOf("=") + 1))
            Next

    我稍微修改了,但是没有反应(按下按键钮时)。有什么错误

    ??

    2012年2月16日 5:53
  • 你richTextBox1.Text是什么?你确定有东西吗?

    另外,这样改:

    RichTextBox2.Text &=(s & vbCrLf )
    RichTextBox2.Text &=(s.Substring(s.IndexOf("=") + 1))


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年2月16日 6:00
    版主
  • 你richTextBox1.Text是什么?你确定有东西吗?

    另外,这样改:

    RichTextBox2.Text &=(s & vbCrLf )
    RichTextBox2.Text &=(s.Substring(s.IndexOf("=") + 1))


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    我确定richtextbox1是有内容的,我首先导入txt文件到richtextbox1,然后再执行我修改后的代码,可是也不可以。
    2012年2月16日 6:11
  • 你是如何导入txt到RichTextBox的?请这样导入:

    RichTextBox2.LoadFile(路径, RichTextBoxStreamType.PlainText);

    否则你导入的默认是RTF格式的,编码完全不一样,肯定找不到的!

    如果依旧不行,请改用TextBox看看。使用System.IO.ReadAllText读取全部文本文件内容,然后赋值给TextBox!


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年2月16日 6:14
    版主
  • 你是如何导入txt到RichTextBox的?请这样导入:

    RichTextBox2.LoadFile(路径, RichTextBoxStreamType.PlainText);

    否则你导入的默认是RTF格式的,编码完全不一样,肯定找不到的!

    如果依旧不行,请改用TextBox看看。使用System.IO.ReadAllText读取全部文本文件内容,然后赋值给TextBox!


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            OpenFileDialog1.CheckFileExists = True
            OpenFileDialog1.CheckPathExists = True
            OpenFileDialog1.DefaultExt = "txt"
            OpenFileDialog1.FileName = ""
            OpenFileDialog1.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*"
            OpenFileDialog1.Multiselect = False
            If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
                 TextBox2.Text = File.ReadAllText(OpenFileDialog1.FileName)

            End If
        End Sub

        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
         
            Dim allRead As String = "ACCUMULATED DEPOSIT TOTAL=100;abcdeACCUMULATED DEPOSIT TOTAL=200;kdhfjdACCUMULATED DEPOSIT TOTAL=500"
            Dim regMatch As String = "ACCUMULATED DEPOSIT TOTAL=\d+"
            For Each ms As Match In Regex.Matches(TextBox2.Text, regMatch)

                Dim s As String = ms.Value
                TextBox1.Text &= (s & vbCrLf)
                TextBox1.Text &= (s.Substring(s.IndexOf("A") + 1))
            Next

        End Sub

    没有内容在textbox1。。。

    2012年2月16日 6:30
  • 点击我签名处,直接发送你的项目!包含你的txt文件!

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年2月16日 6:34
    版主
  • 点击我签名处,直接发送你的项目!包含你的txt文件!

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    不好意思,突然间又不行了。我已经发给你了。
    • 已编辑 ckjason 2012年2月16日 6:53
    2012年2月16日 6:45
  • Private Sub Button3_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button3.Click

            Dim regMatch As String = "ACCUMULATED DEPOSIT TOTAL=RM(\d+)"
            For Each ms As Match In Regex.Matches(TextBox2.TextregMatch)
                Dim s As String = ms.Value
                TextBox1.Text &= (s & vbCrLf)
                TextBox1.Text &= (s.Substring(s.IndexOf("RM") + 2))
            Next
        End Sub


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    2012年2月16日 7:02
    版主
  • 多谢了。。

    2012年2月16日 7:11
  • 多谢了。。

    其实如果你读一行根本用不着正则表达式,直接StreamReader中ReadLine,循环到第二句暂停退出循环,然后用SubString即可。

    另外,希望多来MSDN,帮助别人或者讨论技术问题!


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年2月16日 7:12
    版主