在打印图像或 PDF 文件中定义非对齐域

下面的过程概述了在打印图像或 PDF 文件中定义非对齐域的技术。这些技术要求您只是在数据定义向导中近似地定义非对齐域。在数据进入 Analytics 后,您可以创建一个或多个计算域,使用 Analytics 函数来精确地塑造域中的数据,包括对齐所有值。

有关创建计算域的信息,请参见定义一个条件计算域

在打印图像或 PDF 文件中定义非对齐域:

  1. 按正常方式定义任何对齐域。

    作为定义记录集工作的一部分,您必须至少定义一个域。尝试创建一个记录集以捕捉该文件中的所有记录数据,即使很多数据未对齐。

    有关定义记录集的更多信息,请参见快速入门:如何定义打印图像或 PDF 文件

  2. 使用下列一个或多个技术来定义未对齐域:

    创建一个域定义,并使其长度足够捕捉非对齐域中的最左侧和最右侧字符。

    在 Analytics 中,您将使用 ALLTRIM( ) 函数来对齐域。

    如有必要,创建重叠的域定义。

    在某些情况下,数据未对齐会导致两个不同域中的值相互重叠。分别定义各个域,以便属于各个域的所有值都被其各自的域定义捕捉。

    相同的字节位置将被一个域定义的末尾和另一个域定义的开头包含。在共享字节位置,尝试捕捉结构一致的数据–例如,单个未中断的字符串,而不是在某些记录中捕捉单个字符串,而在其他记录中捕捉两个单独的字符串或者不捕捉任何字符。

    在 Analytics 中,您将使用 ALLTRIM( )、REGEXREPLACE( ) 和 SPLIT( ) 函数来对齐域和除去不需要的字符。

    创建单个且较长的、包含多个未对齐域的域定义。

    如果一个记录集的整个部分未对齐,您可以使用较长的域定义来捕捉记录数据的问题部分。该域必须足够长,以捕捉未对齐数据块中的最左侧和最右侧字符。

    如果未对齐数据出现在记录集的不同部分,则创建附加且较长的域定义以捕捉各个未对齐的部分。

    说明

    如果域中的值所包含的单词数量不同,则尝试为这些值创建单独的域定义,或者确保这些值表示包含多个未对齐域的长域定义末尾的最后一个域。样例 “Inventory.pdf” 中的 “Product Description” 域就是其中的值所包含的单词数量各不相同的域的例子。

    在 Analytics 中,您将使用 ALLTRIM( )、REGEXREPLACE( ) 和 SPLIT( ) 函数将单个域拆分为单独且对齐的数据元素。

  3. 检查整个文件以确保未对齐域中没有值位于其域定义的水蓝色突出显示范围的外部。如果需要,调整域定义的长度。
  4. 确保为域定义对话框中的各个域定义指定字符数据类型。
  5. 按正常方式完成导入过程。

    编辑域属性页面中,确保为每个域指定ASCII 或 Unicode 数据类型。

    要了解更多信息,请参考定义和导入打印图像文件定义和导入 PDF 文件

  6. 对于不包含来自重叠域的数据的未对齐域,在 Analytics 中创建一个使用以下表达式的计算域:
    ALLTRIM(未对齐域名称)

    前导和后继空格被从该域中删除,从而使该域中的所有值对齐。

  7. 对于包含来自重叠域的数据的未对齐域,在 Analytics 中执行以下操作:
    1. 创建一个初始计算域,该域使用以下表达式将域值和不需要的字符之间的一个或多个空格替换为单个空格:
      ALLTRIM(REGEXREPLACE(未对齐域名称, "\s+", " "))

      该表达式还会从未对齐域中删除前导和后继空格。

    2. 创建第二个计算域,该域使用下列表达式之一来提取域值并丢弃不需要的字符。
      • 如果不需要的字符位于该域的末尾,请使用以下表达式:

        SPLIT(初始计算域名称," ", 1)
      • 如果不需要的字符位于该域的开头,请使用以下表达式:

        SPLIT(初始计算域名称," ", 2)

      提示

      如果不需要的字符有时位于该域的末尾,有时位于该域的开头,或者如果它们只存在于某些记录中,则您需要创建一个条件性计算域,以将不同版本的 SPLIT( ) 表达式应用于未对齐域的不同部分。例如,条件 RECNO( ) > 100 使您可以将该表达式的一个版本仅应用于前 100 条记录以后的记录。

      有关详细信息,请参见定义一个条件计算域

  8. 对于较长且包含多个未对齐域的域定义,请在 Analytics 中执行以下操作:
    1. 创建一个初始计算域,该域使用以下表达式将数据元素之间的一个或多个空格替换为单个空格:
      ALLTRIM(REGEXREPLACE(长域名称, "\s+", " "))

      该表达式还会从长域中删除前导和后继空格。

      提示

      您可能发现,在该表达式中包括 OMIT( ) 函数对于删除看起来不一致且使后续处理变得复杂的数据片段是有用的。例如,OMIT(ALLTRIM(REGEXREPLACE(长域名称, "\s+", " ")), "-") 执行与上面的表达式相同的操作,而且还会删除连字符。

    2. 创建第二个计算域,使用以下表达式提取第一个数据元素:
      SPLIT(初始计算域名称," ", 1)
    3. 根据需要创建任意数量的附加计算域,并且使用同一个表达式的变体来提取所有数据元素。

      例如:

      SPLIT(初始计算域名称," ", 2)
      SPLIT(初始计算域名称," ", 3)

      要指定连续数据元素,请持续增加 SPLIT( ) 函数的片段参数中的数字。

    说明

    对于包含一个以上的单词的域值,如样例“Inventory.pdf”中的“Product Description”域中的值,此技术可分隔单独域中的各个单词。如果需要,您可以通过连接不同的域来重新结合这些值。有关详细信息,请参见连接域

  9. 在完成将所有数据元素提取到不同域的工作之后,请执行以下操作,将数值和日期时间数据转换为适当的数据类型:
    1. 对于数值域,创建一个使用此表达式的计算域:
      VALUE(域名称, 小数位数)

      有关详细信息,请参见VALUE( ) 函数

    2. 对于日期域,创建一个使用以下表达式的计算域:
      CTOD(域名称, "日期格式")

      有关详细信息,请参见CTOD( ) 函数

      要转换日期时间或时间值,请使用 CTODT( ) 或 CTOT( ) 函数。

    提示

    通过在应用函数以纠正未对齐数据的同时转换数据类型,可以省时省力,并可创建较少的计算域。例如:

    VALUE(ALLTRIM(未对齐域名称), 2)

  10. 在创建所有必需的计算域后,将其添加到表视图。

    您不需要将初始计算域添加到视图中,并且您可以从该视图中删除任何未对齐域或较长的域。

    要了解更多信息,请参考向视图中添加列从视图中移除列