65.9K
CodeProject 正在变化。 阅读更多。
Home

批量数据验证(带平面文件检查器)

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2010年2月8日

CPOL

2分钟阅读

viewsIcon

14289

有时需要验证许多类似的数据文件,而这无法通过平面文件检查器的GUI完成。但是,使用控制台版本 (FlaFi.exe) 可以轻松解决。

引言

在之前的文章中,我提到可以使用命令行进行使用平面文件检查器进行数据验证。

Chris Ellison编写了一个基于VBScript的优秀解决方案 (下载),它允许使用不同的平面文件检查器模式验证多个数据文件,具体取决于文件名的前缀。
如果您想自动化数据验证过程,此脚本可以用作灵感来源。

背景

有时,需要验证许多类似的数据文件,而这无法通过平面文件检查器的GUI完成。但是,使用控制台版本 (FlaFi.exe) 可以轻松解决。

主控制台令牌是您可以传递给控制台应用程序的参数

  • -silent - 在不回显到控制台窗口的情况下执行模式,并在验证完成后关闭控制台。
  • -errors - 将数据错误回显到控制台窗口。

自定义令牌是用户指定的令牌,可用于将值传递给控制模式的属性。自定义令牌允许参数化模式并将其重复用于类似的数据文件。您可以从命令行传递值并更改验证参数,例如文件名后缀、产品代码、日期等。

创建自定义令牌所需的全部就是

  1. 全局变量添加到您的模式中。
  2. 使用以下格式的命令调用 FlaFi
    C:\Program Files\Flat File Checker\FlaFi {Schema Path} 
    	-{Variable Name} {Variable Value}
  3. 将名为“campaign”的全局变量添加到模式中。
  4. 在模式中的任何属性中使用VB表达式中的“Constant”函数
    FileName=[Constant('campaign')]-import.csv
  5. 运行验证
    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会很有用,因为它提供了更好的调试和日志记录环境。

有关平面文件检查器命令行执行的更多信息,请参见论坛

© . All rights reserved.