批量数据验证(带平面文件检查器)
有时需要验证许多类似的数据文件,而这无法通过平面文件检查器的GUI完成。但是,使用控制台版本 (FlaFi.exe) 可以轻松解决。
引言
在之前的文章中,我提到可以使用命令行进行使用平面文件检查器进行数据验证。
Chris Ellison编写了一个基于VBScript的优秀解决方案 (下载),它允许使用不同的平面文件检查器模式验证多个数据文件,具体取决于文件名的前缀。
如果您想自动化数据验证过程,此脚本可以用作灵感来源。
背景
有时,需要验证许多类似的数据文件,而这无法通过平面文件检查器的GUI完成。但是,使用控制台版本 (FlaFi.exe) 可以轻松解决。
主控制台令牌是您可以传递给控制台应用程序的参数
-silent
- 在不回显到控制台窗口的情况下执行模式,并在验证完成后关闭控制台。-errors
- 将数据错误回显到控制台窗口。
自定义令牌是用户指定的令牌,可用于将值传递给控制模式的属性。自定义令牌允许参数化模式并将其重复用于类似的数据文件。您可以从命令行传递值并更改验证参数,例如文件名后缀、产品代码、日期等。
创建自定义令牌所需的全部就是
- 将全局变量添加到您的模式中。
- 使用以下格式的命令调用
FlaFi
C:\Program Files\Flat File Checker\FlaFi {Schema Path} -{Variable Name} {Variable Value}
- 将名为“
campaign
”的全局变量添加到模式中。 - 在模式中的任何属性中使用VB表达式中的“
Constant
”函数FileName=[Constant('campaign')]-import.csv
- 运行验证
C:\Program Files\Flat File Checker\FlaFi {Schema Path} -campaign SRP54A
让我们看一下脚本的最重要函数 - ValidateFile
。
Using the Code
下载该解决方案,并查看说明文件以获取有关如何尝试该代码的更多详细信息。
ValidateFile
函数具有以下参数
strFolder
- 包含模式文件的文件夹strSchema
- 模式文件名strFileDir
- 包含文件的目录strFile
- 文件名strLogFileDir
- 包含日志的文件夹
Private Function ValidateFile (strFolder, strSchema, strFileDir, _
strFile, strLogFileDir)
'Execute FFC and return 1 of 4 return values
'FFC ERRORLEVEL 0 = "VALID" File Valid
'FFC ERRORLEVEL 1 = "DATA" Data Exception
'FFC ERRORLEVEL 2 = "EXEC" Execution Exception
'FFC ERRORLEVEL > 2 = "SEVR" Severe Error
dim sh
dim strCommand
dim return
ValidateFile = "NO_SCHEMA"
if SchemaFileExists(strSchemaFolder, strSchema) then
Set sh = CreateObject("WScript.Shell")
WriteLogEntry objLogFile, "Validating File " & strFile & _
" against FFC Schema " & strSchema
strCommand = Chr(34) & strFlatFileExe & Chr(34) & " -silent " & _
strFolder & strSchema & " -InFileName " & strFile & " -InFileDir " & _
strFileDir & " -InLogDir " & strLogFileDir
WriteLogEntry objLogFile, "Running Command " & strCommand
'wscript.echo "Running Command " & strCommand
return = sh.Run(strCommand, 0, True)
if return = 0 then
WriteLogEntry objLogFile, _
"File Successfully Validated Return Code = " & return
ValidateFile = "VALID"
else
if return = 1 then
WriteLogEntry objLogFile,"Data File Validation Failed, Return Code " _
& return
ValidateFile = "DATA"
else
if return = 2 then
WriteLogEntry objLogFile,"Execution error, Return Code " & return
ValidateFile = "EXEC"
else
WriteLogEntry objLogFile,"Serious, Return Code " & return
ValidateFile = "SEVR"
end if
end if
end if
set sh = nothing
else
ValidateFile = "NO_SCHEMA"
end if
end function
关注点
将此解决方案转移到VBA会很有用,因为它提供了更好的调试和日志记录环境。
有关平面文件检查器命令行执行的更多信息,请参见论坛