0

在我工作的公司,我有一个正在 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
4

2 回答 2

2

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

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()

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

于 2013-10-25T15:38:59.757 回答
1

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

使用这两个事实,您可以很容易地找到公司的第一个和最后一个字符的索引,使用此信息“提取”公司名称。

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

于 2013-10-25T15:36:54.043 回答