繁体   English   中英

VB.NET 中的剪贴板数据排序

[英]Clipboard data sort in VB.NET

我有一个表单,我需要在其中将剪贴板中的文本分类到适当的字段中。 本质上,我复制了一封客户电子邮件,单击表单上的按钮,它将读取数据并将信息放入字段中。 有几个字段,例如客户姓名、公司名称、电话号码、他们是否有支持计划。

所有电子邮件的格式都相同(除了我无法控制的随机空格),并被几名员工使用:

公司:TEST LTD

客户姓名:乔·约翰逊

部门:IT运营经理

客户电话:012345678910

客户邮箱:JOE.JOHNSON@TEST.COM

仪器:SUP

序列号:EM2PC2938C

覆盖范围:计划无保修

所以,我的问题是:

我需要能够直接从电子邮件中复制此文本,单击一个按钮来查看剪贴板中的文本,然后将不同的信息放入与电子邮件中标记相同的不同文本框中,但没有标识符(例如“电子邮件:”或“覆盖范围”),因此基本上是冒号进入文本框之后的任何内容。

我有一些代码来获取数据并放入我计划用来对数据进行排序的富文本框中(我知道我可以直接从代码中完成,但不知道如何进行)

rtbx_ClipboardData.text = Clipboard.GetText

还有一些代码来删除冒号前的任何文本:

tbx_Data_Company.Text = rtbx_ClipboardData.Text.Substring(rtbx_ClipboardData.Text.IndexOf(":") + 1)

此代码有效,但我需要多次执行并将数据放入适当的字段中,这正是我苦苦挣扎的地方。

如果有人可以提出任何建议/提供一些示例代码,我将不胜感激。

而不是.Substring.IndexOf ,我会使用String.Split

从剪贴板上获取字符串并将其拆分为行,删除任何空行。 获取结果数组的每个元素(一行)并用冒号分割。 我们希望此数组 (1) 的第二个元素去除任何前导或尾随空格并分配给适当的文本框。 然后对每一行重复。

Private Sub GetFieldsFromEmail()
    Dim eText As String = Clipboard.GetText()
    Dim lines = eText.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
    txtCompany.Text = lines(0).Split(":"c)(1).Trim
    txtName.Text = lines(1).Split(":"c)(1).Trim
    txtDepartment.Text = lines(2).Split(":"c)(1).Trim
    txtPhone.Text = lines(3).Split(":"c)(1).Trim
    txtEmail.Text = lines(4).Split(":"c)(1).Trim
    txtInstrument.Text = lines(5).Split(":"c)(1).Trim
    txtSerNum.Text = lines(6).Split(":"c)(1).Trim
    txtCoverage.Text = lines(7).Split(":"c)(1).Trim
End Sub

编辑

如果前后有随机文本...

Private Sub GetFieldsFromEmail()
    Dim eText As String = Clipboard.GetText()
    Dim lines = eText.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
    Dim StartLine As Integer
    For i = 0 To lines.Count - 1
        If lines(i).StartsWith("Company") Then
            StartLine = i
            Exit For
        End If
    Next
    TextBox18.Text = lines(StartLine).Split(":"c)(1).Trim
    TextBox19.Text = lines(StartLine + 1).Split(":"c)(1).Trim
    TextBox20.Text = lines(StartLine + 2).Split(":"c)(1).Trim
    TextBox21.Text = lines(StartLine + 3).Split(":"c)(1).Trim
    TextBox22.Text = lines(StartLine + 4).Split(":"c)(1).Trim
    TextBox23.Text = lines(StartLine + 5).Split(":"c)(1).Trim
    TextBox24.Text = lines(StartLine + 6).Split(":"c)(1).Trim
    TextBox25.Text = lines(StartLine + 7).Split(":"c)(1).Trim
End Sub

我刚刚添加了一个 For 循环来查找从哪里开始读取数据。 通过直接从您的问题中复制数据前后的几个段落进行测试。 我更改了文本框的名称以匹配我可用的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM