首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件名中提到的基于TimeStamp的visual basic中的FileSort

文件名中提到的基于TimeStamp的visual basic中的FileSort
EN

Stack Overflow用户
提问于 2012-01-27 20:11:48
回答 2查看 691关注 0票数 0

如何根据文件名的部分对目录中的文件进行排序?

文件格式:

prod_orders_XXX_<TimeStamp>.datXXX = symbol of the product and the length may varies.

<TimeStamp> = date and time

同一XXX的多个文件可能具有不同的时间戳。

下面是一些示例:

代码语言:javascript
复制
prod_orders_abc_20122001083000.dat
prod_orders_abc_20122007083111.dat
prod_orders_xyz_20122003093157.dat
prod_orders_xyz_20122001083000.dat
prod_orders_abc_20122001163139.dat
prod_orders_abc_20122002093137.dat
prod_orders_xyz_20122001183000.dat
prod_orders_abc_20122001163139.dat
prod_orders_abc_20122001093137.dat 

我需要根据文件名中提到的时间戳对文件进行排序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-27 20:35:42

这应该能达到你想要的效果。您需要确保日期格式是正确的(我猜到了)。并添加一些额外的验证。

代码语言:javascript
复制
    Dim filename As String = "prod_orders_abc_20122001083000.dat"

    filename = IO.Path.GetFileNameWithoutExtension(filename.Split("_").Last)

    'yyyyddMMhhmmss
    '20122001083000
    Dim fileDate As Date

    If Date.TryParseExact(filename, "yyyyddMMhhmmss", Globalization.CultureInfo.CurrentCulture, Globalization.DateTimeStyles.None, fileDate) Then
        Debug.WriteLine(fileDate)
    Else
        Debug.WriteLine("unable to get date")
    End If

编辑,很抱歉刚刚注意到你想把它们全部排序...

代码语言:javascript
复制
    Sub main()

    Dim filenames() As String =
        {"prod_orders_abc_20122001083000.dat",
         "prod_orders_abc_20122007083111.dat",
         "prod_orders_xyz_20122003093157.dat",
         "prod_orders_xyz_20122001083000.dat",
         "prod_orders_abc_20122001163139.dat",
         "prod_orders_abc_20122002093137.dat",
         "prod_orders_xyz_20122001183000.dat",
         "prod_orders_abc_20122001163139.dat",
         "prod_orders_abc_20122001093137.dat"}


    Dim SortedFileNames As List(Of String) =
        filenames.OrderBy(Function(fileName) GetDateFromFileName(fileName)).ToList


End Sub

Private Function GetDateFromFileName(fileName As String) As Date

    fileName = IO.Path.GetFileNameWithoutExtension(fileName.Split("_").Last)

    'yyyyddMMhhmmss
    '20122001083000
    Dim fileDate As Date

    If Date.TryParseExact(fileName, "yyyyddMMhhmmss", Globalization.CultureInfo.CurrentCulture, Globalization.DateTimeStyles.None, fileDate) Then
        Return fileDate
    Else
        Return Date.MinValue
    End If

End Function

结束模块

票数 0
EN

Stack Overflow用户

发布于 2012-01-27 20:32:50

很抱歉没有提供VB的答案,但将其转换为VB.NET并不难。下面的代码将按时间戳对数组进行排序。

代码语言:javascript
复制
string[] fileNames = 
{ "prod_orders_abc_20122001083000.dat",
  "prod_orders_abc_20122007083111.dat",
  "prod_orders_xyz_20122003093157.dat",
  "prod_orders_xyz_20122001083000.dat",
  "prod_orders_abc_20122001163139.dat",
  "prod_orders_abc_20122002093137.dat",
  "prod_orders_xyz_20122001183000.dat",
  "prod_orders_abc_20122001163139.dat",
  "prod_orders_abc_20122001093137.dat" 
};

var result = fileNames.OrderBy(s => s.Substring(s.Length - 12,4)).ToArray();

更新:相同代码的VB版本。

代码语言:javascript
复制
Dim fileNames As String() = {"prod_orders_abc_20122001083000.dat", "prod_orders_abc_20122007083111.dat", "prod_orders_xyz_20122003093157.dat", "prod_orders_xyz_20122001083000.dat", "prod_orders_abc_20122001163139.dat", "prod_orders_abc_20122002093137.dat", _
    "prod_orders_xyz_20122001183000.dat", "prod_orders_abc_20122001163139.dat", "prod_orders_abc_20122001093137.dat"}

Dim result = fileNames.OrderBy(Function(s) s.Substring(s.Length - 12, 4)).ToArray()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9033092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档