我在一个带有命名约定的文件夹中有多个文件
Name_MoreName_DDMMYYYY_SomeNumber_HHMMSS.txt
如何在foreach循环中只使用一个具有最早日期和时间的文件(即最早的DDMMYYYY和HHMMSS)。我被限制使用foreach循环。
前:
所以最旧的文件将是
Name_MoreName_22012012_SomeNumber_072134.txt
我怎样才能获取最旧的文件?
答案 0 :(得分:3)
日期表达:
SUBSTRING(@ [User :: Filename],FINDSTRING(@ [User :: Filename],“_”,2)+1,8)
OldestDate Expression:
(DT_I4)(右(@ [User :: Date],4)+ SUBSTRING(@ [User :: Date],3,2)+ SUBSTRING(@ [User :: Date],1, 2))强>
脚本任务 - 我
Public Sub Main()
Dim OldestDate As Integer
Dim CurrentDate As Integer
OldestDate = CType(Dts.Variables("OldestDate").Value, Integer)
CurrentDate = CType(Dts.Variables("CurrentDate").Value, Integer)
If OldestDate > CurrentDate Then
Dts.Variables("OldestFile").Value = Dts.Variables("Filename").Value.ToString()
Dts.Variables("CurrentDate").Value = CType(Dts.Variables("OldestDate").Value, Integer)
End If
Dts.TaskResult = Dts.Results.Success
End Sub
脚本任务 - II
Public Sub Main()
MsgBox(Dts.Variables("OldestFile").Value.ToString())
Dts.TaskResult = Dts.Results.Success
End Sub
<强>解释强>
这里的基本思路是获取日期部分,即DDMMYYYY并将其转换为YYYYMMDD。 现在,只要日期是YYYYMMDD格式,我们就可以通过简单的整数比较来比较哪个日期更大。我们首先将第一个文件的日期与 19000101 (过去的日期)进行比较,然后在脚本任务中看到 - 我,我们将 OldestFile 与有效的文件名。 脚本任务 - II 打印出具有最早日期的文件名。
答案 1 :(得分:2)
现有的Foreach(文件)枚举器在这种情况下是不够的,因为它仅限于文件名掩码。根据您的需要,您正在查看脚本任务以填充某些内容。这些内容是否只是一个变量,然后用于配置平面文件连接管理器的ConnectionString属性,或者是否需要生成所有旧文件的列表(如果您需要识别Name_MoreName_OldestDate和Name_OtherName_OldestDate),将其分配给变量然后使用Foreach枚举器(变量)将取决于您的确切业务需求。
如果你可以使用修改后的日期/时间,那么这个答案将是这个答案中逻辑的反转 Import most recent csv file to sql server in ssis否则,没有LINQ乐趣的类似逻辑。使用DirectoryInfo调用浏览文件夹中的所有文件,然后比较文件名。
如果您需要更详细的解释,请与我们联系。