【问题标题】:VB.net String ExtractionVB.net 字符串提取
【发布时间】:2013-10-26 00:03:27
【问题描述】:

在我工作的公司,我有一个正在 vb.net 中开发的软件。该软件使用网络浏览器控件加载员工可以修改的 Excel 文件。如果然后将 excel 文件的副本保存为 excel 文件以供将来修改,则将其保存为 pdf 文件发送给客户,然后将第一页打印两次。我正在尝试创建报价单。报价文件名的结构如下...

12345 My Company Name Here 10-25-2013.pdf

有什么方法可以“提取”上面示例中的“我的公司名称”。我尝试删除所有数字,然后从字符串中删除 - 和 .pdf,但实际上它使得列表视图控件中出现的结果更少。有任何想法吗?

Dim di As New IO.DirectoryInfo("Z:\Quotes\" & Today.Year & "\" & Today.Month _
        & " " & MonthName(Today.Month))
    Dim diar1 As IO.FileInfo() = di.GetFiles("*.pdf")
    Dim dra As IO.FileInfo
    ListView1.View = View.Details
    ListView1.Columns.Clear()
    ListView1.Columns.Add("Quote Number")
    ListView1.Columns.Add("Customer Name")
    ListView1.Columns(0).Width = -2
    ListView1.Columns(1).Width = -2

    For Each dra In diar1
        If dra.ToString.Contains("Product") = False Or dra.ToString.Contains("Thumbs.db") Then
            Dim newIrm() = dra.ToString.Split(" ")
            Dim NumericCharacters As New System.Text.RegularExpressions.Regex("\d")
            Dim nonNumericOnlyString As String = NumericCharacters.Replace(newIrm(2), String.Empty)
            ListView1.Items.Add(New ListViewItem({newIrm(0), newIrm(1) & newIrm(2)}))
        End If
    Next

文件名格式:

 Z:\Quotes\2013\10 October\12345-RR My Company Name Here 10-25-2013.pdf

【问题讨论】:

  • 你可以控制文件名吗?
  • 完整的字符串是如何生成的?
  • 前缀数字的长度是固定的吗?后缀字符串的长度看起来是恒定的 (14)。
  • @Karl Anderson 我愿意,但这样做会改变过去 6 年存在的格式,即超过 300,000 条报价。
  • @nhgrif,不,长度不是恒定的......对于报价修订, -R 附加到字符串的末尾。每个版本都附加一个 R。

标签: vb.net string


【解决方案1】:

假设公司名称总是被空格包围并且所有周围的文本都不包含任何内容,您可以使用IndexOfLastIndexOf。示例代码:

Dim input As String = "Z:\Quotes\2013\10 October\12345-RR My Company Name Here 10-25-2013.pdf"
Dim companyName As String = System.IO.Path.GetFileNameWithoutExtension(input)

companyName = companyName.Substring(companyName.IndexOf(" "), companyName.LastIndexOf(" ") - companyName.IndexOf(" ")).Trim()

如果这些条件不完全适用,您必须清楚地描述约束才能更新此代码。如果没有系统地应用约束,就没有任何方法可以为这个问题提供准确的解决方案。

【讨论】:

  • 您的代码只是返回字母:“M”,我做错了什么吗?
  • @JustinE 我猜是使用错误的输入。如果您复制这三行,它将返回“My Company Name Here”。请告诉我您的确切输入。
  • @JustinE 好的。但是,请不要盲目使用它,并了解它的确切作用:第一行,删除所有目录和 .pdf 部分;第二行查找从第一个“”开始到最后一个“”结束的子字符串。
  • 太好了,我对数组和工作了解不多,但我知道一点。这绝对有帮助,我也很欣赏你的解释。
【解决方案2】:

假设您的日期格式使用前导零,后缀 (date.pdf) 是一个固定大小。 前缀大小可变,但完整文件名的第一个空格始终位于公司名称的第一个字符之前。

利用这两个事实,你可以很容易地找到公司首尾字符的索引,使用这些信息“提取”公司名称。

或者,您可以使用空格作为分隔符将文件名拆分为一个数组。然后,您可以获取数组的每个索引,不包括第一个和最后一个索引,并将这些元素组合在一起,用空格分隔。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    相关资源
    最近更新 更多