TclCaller
运行工具命令语言命令并将其返回值赋给属性。
Tcl命令可以对特性的几何图形和/或属性进行操作,使用Tcl语言提供的任何内置Tcl函数,以及fme提供的任何Tcl功能。
参阅Tcl语言参考手册(www.tcl.tk)和FME Tcl变量和函数下面一节详细介绍这些功能。
常见的Tcl例子包括:
- 属性的修剪空间:
FME_SetAttribute trimmedAttribute [string trim [FME_GetAttribute originalAttribute]]
- 将属性中的所有非数字字符替换为空格:
FME_SetAttribute anAttribute [regsub -all {[^0-9]} [FME_GetAttribute anAttribute] {}]
注意,在本例中,返回值是实际执行的替换数量。
- 根据属性匹配正则表达式:
$} [FME_GetAttribute]
此正则表达式测试属性的整个值是否仅由字母字符组成。
注意,在匹配正则表达式时,如果表达式匹配,则返回值为1,否则返回值为0。
- 将自定义消息记录到日志窗口:
FME_LogMessage fme_inform{这是我的消息}
操作特征属性的推荐方法是通过以下功能:
FME_GetAttribute attrName
FME_SetAttribute attrName newVal
FME_CopyAttribute destAttrName srcAttrName
FME_RenameAttribute destAttrName srcAttrName
4 . attrName1 [attrName2 attrName3 ..]
参数
输出特性参数
将为每个特性计算的Tcl表达式。表达式的值将存储在目的地属性。
笔记您可以通过全局变量访问发布的参数$fme_宏值数组中。如果FME返回错误无法读取“fme_macrovalues(text_param)”:没有这样的变量、替换$fme_宏值与$::fme_宏值。
其他代码也可以在源代码编辑器。此代码将在翻译开始时编译一次,因此提供了比在Tcl表达式参数。
可以选择提供Tcl源文件。在执行Tcl命令之前,将读取该文件。这可以用来引用保存在公共外部文件中的Tcl函数。
属性的结果Tcl表达式参数后,它被求值。如果Tcl表达式不返回值,则可以将destination属性留空。
复制控制
属性创建功能部件的多个副本是可能的复制Tcl表达式的数量参数。此表达式在输入特性的上下文中求值。它返回一个数字,以指示使用转换器要处理多少个特性实例Tcl表达式。
如果指定的,拷贝数属性将保存每个输出特性的拷贝号。例如,如果创建了一个输入特性的3个副本,那么输出副本将分别被赋值为0、1和2。Tcl表达式可以检查这个属性,以确定它正在处理哪个输出特性号。
先进的
属性创建的任何属性Tcl表达式正在执行,所以他们可以被其他变形金刚使用。
属性可以删除的任何属性Tcl表达式被执行。其他变形金刚将不能使用这些属性。
属性可以删除的任何列表Tcl表达式被执行。其他变形金刚将不能使用这些列表。
请注意,如果您选择隐藏列表,您的选择将包括任何属性列表或嵌套列表。例如,如果你选择隐藏一个叫做名单列表{}然后列表{}.attr要么列表{}。子列表{}也将被隐藏。
FME Tcl变量和函数
四个Tcl的全局变量提供FME功能和Tcl脚本的之间的网关:FME_FeatureType,FME_CoordSys,FME_AttrEncoding和FME_AttrNameEncoding变量。为了在Tcl过程使用这些,他们必须声明为全局的;否则,变量将被认为是本地的,并不会影响或在其运行该功能的FME功能进行交互。要在函数中使用它们,使用模式,如:
PROC DoSomething的{
全球FME_FeatureType
全球FME_CoordSys
功能#其余部分放在这里...
}
这个全局变量定义的字符编码,其中Tcl的假定与FME_GetAttribute和FME_SetAttribute功能工作时指定一个要素的属性的名称。像TCL与UTF-8内部的工作,这意味着它将属性值转换从给定的编码设置为UTF-8掌握FME_GetAttribute功能属性的值时,并且将值设置当转换从UTF-8给定的编码 attribute value using FME_SetAttribute function.
当字符编码是已知的这个变量的值不影响属性的设置或检索,或者在检索到的属性或由参数FME_GetAttribute或FME_SetAttribute定向。
默认的属性编码是一样的上FME正在执行系统的默认字符编码,并且可能通过Tcl的内置的“编码系统”命令覆盖。支持的编码的完整列表可以通过执行命令“编码名称”来获得。
变量可以被设置,读取,或取消设置:
设置FME_AttrEncoding ISO8859-2
把$ FME_AttrEncoding
未设置FME_AttrEncoding
如果FME_AttrEncoding未设置或设置为空字符串,它恢复为默认的系统编码。
该功能用于确定是否一个属性是存在于一个特征。
对于FME_AttributeExists的语法是:
FME_AttributeExists
如果属性是存在于特征,值1被返回;否则,返回0。
该功能用于确定是否一个属性的值为空。
对于FME_IsAttributeNull的语法是:
FME_IsAttributeNull
如果该属性具有空值,则该值返回1;否则,返回0。
此功能用于检索所有要素属性的名称,并返回它们作为一个Tcl列表。
对于FME_AttributeNames的语法是:
FME_AttributeNames
这个全局变量定义的字符编码,其中Tcl的假定与FME_GetAttribute和FME_SetAttribute功能工作时指定一个要素的属性的名称的名称。像TCL与UTF-8内部的工作,这意味着它将属性名称转换从UTF-8给定的编码系统,并参考实际要素的属性时,使用转换名。
默认的属性编码是一样的上FME正在执行系统的默认字符编码,并且可能通过Tcl的内置的“编码系统”命令覆盖。支持的编码的完整列表可以通过执行命令“编码名称”来获得。
变量可以被设置,读取,或取消设置:
设置FME_AttrNameEncoding ISO8859-2
把$ FME_AttrNameEncoding
未设置FME_AttrNameEncoding
如果FME_AttrNameEncoding未设置或设置为空字符串,它恢复为默认的系统编码。
这个全局变量设置为特征的坐标系统镜像。如同FME_FeatureType变量,它可以设置,读取和取消设置:
设置FME_CoordSys UTM10-83
把$ FME_CoordSys
未设置FME_CoordSys
在通过TclCaller调用的任何Tcl过程中,FME_Coordinates函数可用于读取和写入的功能的坐标。它提供了几个选项,如下所示:
维(2 | 3)
设置特征的尺度 - 2或3。
numCoords
返回要素坐标的数量。
resetCoords
将删除功能的所有当前坐标。
注意:调用resetCoords对fme_geometry或fme_type属性没有影响。因此该功能没有在不一致的状态,这些必须重置或通过脚本显式调整。
getCoord(X | Y | Z)
返回在指定的指定轴的坐标值
addCoord
添加坐标指定到要素的几何结束。
geomType
返回几何类型的功能 - 这将是允许的值之一fme几何模型属性:
fme_point
fme_line
fme_polygon
fme_donut
fme_aggregate
fme_undefined
geomType
将特征的几何图形类型设置为传入值。没有进行健全性检查。这一点很重要,因为设置不正确的几何类型可能会妨碍FME。
此函数用于复制特征属性。使用此函数可以保留属性的原始内部数据存储类型。这在使用高精度浮点值时非常重要。
fme_copyattribute的语法是:
复制属性
如果功能不包含名为oldname的属性,则函数不执行任何操作。它不会创建新的空值属性。
此函数用于解码已按本节所述编码的字符串替换映射文件中的字符串。函数的结果是输入参数的副本,替换的字符串序列转换回它们所表示的字符。
fme_decodetext的语法为:
fme_解码文本
此函数用于生成已按本节所述编码的字符串替换映射文件中的字符串。函数的结果是输入参数的一个副本,特殊字符被转换成经过fme的文件解析器干净地传递的替换字符串序列,并且可以在任何ansi字符集中表示。
fme_encodeText的语法为:
fme_编码文本
此函数用于从tcl过程中调用任何fme函数。这允许在同一个特性上迭代调用标准fme函数。
fme_execute的语法是:
FME U执行
任何剩余的参数都将传递给函数。例如,@generalize函数的调用方式如下:
执行通用道格拉斯10
这将实现与在映射文件的其他地方调用@generalize(douglas,10)相同的效果。
如果调用的函数导致功能被删除,则转换将中止。如果特征的总长度小于传入的公差值,@generalize函数可以执行此操作。
此全局变量设置为镜像特征的特征类型。与其他变量一样,可以设置、读取和取消设置:
设置FME U功能类型“Roadster”
放入$fme_featuretype
此函数可用于从tcl过程中获取特性的属性值。
fme_getattribute的语法是:
口蹄疫
如果特性上不存在该属性,则返回空字符串作为值。
fme_logmessage函数用于将消息写入fme日志文件。它可以通过以下两种方式之一调用:
fme_日志消息
要么
fme_日志消息
当使用第一个表单时,消息编号必须出现在FME安装文件夹下的消息子文件夹中的文件中。其余参数用于填充任何%0、%1、…%消息中的n个参数持有者。例如,如果消息是:
3011,正在打开模式%1的文件%0
然后,可以这样调用fme_logmessage:
fme_日志信息fme_inform 3011/tmp/cacher.txt read
在第二种形式中,消息直接输出到日志文件。
此函数用于重命名要素属性。使用此函数可以保留属性的原始内部数据存储类型。这在使用高精度浮点值时非常重要。
fme_renameattribute的语法为:
fme_重命名属性
如果功能不包含名为oldname的属性,则函数不执行任何操作。它不会创建新的空值属性。
此函数用于设置特征的属性值。
fme_setattribute的语法是:
fme_setattribute[-notranscode]
如果指定了-notranscode选项,则会将tcl变量的字节逐字复制到结果属性,以代替从tcl的内部utf-8编码到目标字符编码的字符编码转换。当已知tcl变量在特定字符编码中包含字节数组而不是通常的utf-8字符序列时,这非常有用。
结果属性通常会附加字符编码信息。如果
此函数用于将特性上的属性值设置为null。如果属性不存在,将创建它。
FME_SetAttributeNull的语法是:
FME_SetAttributeNull
如果属性不存在,就会创建它,其类型为string。
此函数在FME临时文件夹中生成临时文件名。
保证文件名是唯一的新文件。
注意:FME将创建一个指定名称的空文件;完成后必须删除它。
FME_TempFilename的语法是:
FME_TempFilename [
如果没有提供前缀和后缀,则在FME临时文件夹中以任意唯一命名的文件的形式返回文件名。(有关此文件夹位置的信息,请参阅临时文件夹确定)。
如果提供了前缀,则该前缀用作临时文件夹中文件名的开头部分,后缀用作结尾部分。通常,后缀用于附加扩展名,在本例中,它必须附加一个句点“。
例如,这个调用:
FME_TempFilename光栅. png
会返回如下内容:
c:/Documents and Settings/username/Local Settings/Temp/rastera05921.png
此函数用于从特性中删除一个或多个属性。
FME_UnsetAttributes的语法是:
FME_UnsetAttributes
如果特性不包含列出的任何属性,则不会生成错误。FME_UnsetAttributes简单地忽略任何没有在特性上指定属性的参数。
使用笔记
%字符
由于FME解析器的限制,Tcl表达式不能包含百分比(%)字符。如果需要一个%字符,那么应该将表达式编码为一个Tcl过程,并将其放入一个外部文件中以供“导入”。请注意,可以使用a来避免%字符问题StringFormattertransformer,它提供了一种方便的方式来访问Tcl 'format'命令。
编辑变压器参数
使用一组菜单选项,可以通过引用工作空间中的其他元素来分配transformer参数。更高级的功能,如高级编辑器和算术编辑器,也可以在一些转换器中使用。要访问这些选项的菜单,请单击在可适用的参数旁边。有关更多信息,请参见变压器参数菜单选项。
变压器的分类
搜索FME知识中心
有关此变压器的示例和信息,请参阅FME知识中心。