如何根据文件名的部分对目录中的文件进行排序?
文件格式:
prod_orders_XXX_<TimeStamp>.datXXX = symbol of the product and the length may varies.
<TimeStamp> = date and time
同一XXX的多个文件可能具有不同的时间戳。
下面是一些示例:
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 我需要根据文件名中提到的时间戳对文件进行排序。
发布于 2012-01-27 20:35:42
这应该能达到你想要的效果。您需要确保日期格式是正确的(我猜到了)。并添加一些额外的验证。
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编辑,很抱歉刚刚注意到你想把它们全部排序...
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结束模块
发布于 2012-01-27 20:32:50
很抱歉没有提供VB的答案,但将其转换为VB.NET并不难。下面的代码将按时间戳对数组进行排序。
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版本。
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()https://stackoverflow.com/questions/9033092
复制相似问题