在数据处理和分析领域,经常需要验证大量相似的数据文件。虽然通过Flat File Checker的图形用户界面(GUI)可以进行一些验证工作,但面对大量文件时,GUI就显得力不从心。幸运的是,可以通过命令行版本(FlaFi.exe)来解决这个问题。
Chris Ellison编写了一个基于VBScript的解决方案,该方案允许使用不同的Flat File Checker模式来验证多个数据文件,文件名前缀决定了使用哪个模式。这个脚本可以作为自动化数据验证过程的灵感来源。
有时需要验证许多相似的数据文件,这在Flat File Checker的GUI中是无法实现的。然而,通过控制台版本(FlaFi.exe),可以轻松解决这个问题。
控制台应用程序可以接受以下参数:
自定义令牌是用户指定的令牌,可以用来传递值以控制模式的属性。自定义令牌允许参数化模式,并将其用于相似的数据文件。可以通过命令行传递值,并改变验证的参数,例如文件名后缀、产品代码、日期等。
要创建自定义令牌,需要:
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。
下载解决方案,并查看说明文件以获取更多关于如何尝试代码的详细信息。
ValidateFile函数有以下参数:
以下是VB.NET中的ValidateFile函数实现:
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 returnCode
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
returnCode = sh.Run(strCommand, 0, True)
If returnCode = 0 Then
WriteLogEntry objLogFile, "File Successfully Validated Return Code = " & returnCode
ValidateFile = "VALID"
ElseIf returnCode = 1 Then
WriteLogEntry objLogFile, "Data File Validation Failed, Return Code " & returnCode
ValidateFile = "DATA"
ElseIf returnCode = 2 Then
WriteLogEntry objLogFile, "Execution error, Return Code " & returnCode
ValidateFile = "EXEC"
Else
WriteLogEntry objLogFile, "Serious, Return Code " & returnCode
ValidateFile = "SEVR"
End If
End If
Set sh = Nothing
If Not SchemaFileExists(strSchemaFolder, strSchema) Then
ValidateFile = "NO_SCHEMA"
End If
End Function