查找文件然后在显示结果之前解析结果

时间:2017-07-12 10:11:00

标签: vb.net linq getfiles

我正在为我们的客户服务部门开发应用程序。用户将输入打印编号和制造日期。然后,应用程序将执行get文件,返回使用该图号(多个修订版)找到的所有文件的结果。文件以此格式drawingnumber_rev_pages_6-digit date.pdf命名。 一旦我有了该图号的列表,然后我取一个10个字符的正确(字符串)来删除6位数的日期,然后进行Date.ParseExact以与用户输入的mfg日期进行比较。我在那个日期之前抓住了任何东西,然后在列表框中显示它们。标准现在已经改变,他们希望我只显示与该构建日期相关的文件。问题是,我需要在该日期之前的第一次转速。而且我不完全理解我的getfiles语句的(函数)部分。所以我不知道要搜索甚至查找谷歌搜索结果的内容。当我搜索getfiles时,函数没有被提及,如果我查找orderby ...函数没有提到,是不是我需要搜索linq?你怎么建议我接近这个? original version example 新版本,我可以过滤结果并在日期之前找到所有内容......但我想要的是制造商之前的最高版本。日期。返回一个结果。 current version

谢谢大家 - 这是我的示例代码。

Try
    Dim results = Directory.GetFiles(fp, f).
        OrderByDescending(Function(x) New FileInfo(x).FullName)

    For Each result In results
        Dim dp As String = ""
        Dim d As Date
        dp = Strings.Right(result, 10)
        dp = Strings.Left(dp, 6)
        d = Date.ParseExact(dp, "MMddyy", New Globalization.CultureInfo("en-us"))
        Debug.Print(dp)
        Debug.Print(d)
        Dim udt As String = ""
        Dim ud As Date 'user date
        udt = Trim(Replace(txtMfgDate.Text, "/", ""))
        If udt.ToString.Length = 0 Then lstFound.Items.Add(result)

        ud = Date.ParseExact(udt, "MMddyy", New Globalization.CultureInfo("en-us"))
        If d.Date <= ud.Date Then
            lstFound.Items.Add(result)
        End If

        Debug.Print(d)
        Debug.Print(ud)
        If result <> Nothing Then

        End If
    Next
Catch x As Exception
    MessageBox.Show("Error finding file: " & f)
End Try

1 个答案:

答案 0 :(得分:0)

LINQ可以在合适的条件下完成您所需的一切。我还试图以其他方式清理一些代码。我将LINQ表达式切换为查询理解,因此我可以使用Let

Try
    Dim enusCulture = New Globalization.CultureInfo("en-us") ' consider CultureInfo.CurrentCulture instead?
    Dim udt As String = Trim(Replace(txtMfgDate.Text, "/", ""))
    Dim ud As Date

    If udt.Length > 0 Then ud = Date.ParseExact(udt, "MMddyy", enusCulture) ' user mfg date
    ' 0071911_a_1_072115.pdf

    Dim results = From filename In Directory.GetFiles(fp, f)
        Let filedate = Date.ParseExact(filename.Substring(filename.Length - 10, 6), "MMddyy", enusCulture)
        Where udt.Length = 0 OrElse filedate.Date < ud.Date
        Order By filedate Descending

    If udt.Length> 0 Then
        results = results.Take(1)
    End If

    lstFound.Items.AddRange(results)
Catch x As Exception
    MessageBox.Show("Error finding file: " & f)
End Try

Function(x)语法是一个lambda表达式,如果你想研究它,它是OrderByDescending函数的LINQ方法语法的一部分。