# !# !

" description="


" log_file="" destination_routing_file="" explicit_bookmark_order="false" view_position="221.877 428.129" fme_document_guid="1ce220c6-60cd-486d-a449-e4bc1197bf25" multi_writer_dataset_order="BY_ID" use_markdown="" begin_python="" last_save_build="FME(R) 2017.0.1.1 (20170512 - Build 17291 - WIN32)" warn_invalid_xform_param="Yes" fme_implicit_csmap_reprojection_mode="Auto" last_save_date="2018-01-08T17:18:58" redirect_terminators="NONE" begin_tcl="" end_tcl="" fme_server_services=""> # ! # !# ! # !# ! # !# ! # !# ! # !# ! # !# ! # !

New Attribute

Attribute Value

keyName

value

" POSITION="1566.11 -486.128" TOP_LEFT="1566.11 -486.128" BOTTOM_RIGHT="2316.11 -536.128" BOUNDING_RECT="1566.11 -486.128 750 50" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.192157" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="11">
# !

XML Document:
    XML Input: Text or Attribute
    XML Text: @Value(_xml)
Updates:

    

Update Type

XML Path

Value Type

Value

Delete

//tag[@k="ProductionPointCategory"]

<Unused>

<Unused>

Insert as last child

//node

XML/XQuery

<tag k="keyName" v="{fme:get-attribute("keyName")}"/>

" POSITION="375.858 313.127" TOP_LEFT="375.858 313.127" BOTTOM_RIGHT="1125.86 263.127" BOUNDING_RECT="375.858 313.127 750 50" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.192157" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="5">
# !
# ! # !# ! # !# ! # ! # !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !nodelat=56.07686365lon=12.11483240id=800000002changeset=1timestamp=2017-09-10T20:50:35.826Zversion=1tagk=ActiveFromv=1900-01-01T02:00:00.000000000Ztagk=ActiveTov=3000-01-01T01:59:59.000000000Ztagk=ProductionPointCategoryv=4node"># !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# ! # !# ! # !# ! # !# ! # !# !
FME_PYTHON_VERSION 27 # !START_HEADER # !NULL WRITER_TYPE NULL writer_key NULL_DEST_DATASET NULL #!END_WB_HEADER # !START_WB_HEADER # !END_WB_HEADER # !END_HEADER LOG_FILENAME”(FME_MF_DIR) xmlupdater-example美元。日志“LOG_APPEND LOG_MAX_FEATURES 200 LOG_MAX_RECORDED_FEATURES 200 FME_REPROJECTION_ENGINE FME FME_IMPLICIT_CSMAP_REPROJECTION_MODE汽车FME_GEOMETRY_HANDLING增强FME_STROKE_MAX_DEVIATION 0 LOG_FILTER_MASK 1 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MULTI_READER_CONTINUE_ON_READER_FAILURE没有# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -宏WORKSPACE_NAME xmlupdater-example宏观FME_VIEWER_APP fmedatainspector #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -包括(如果{[信息存在env (FME_TEMP) & &(文件isdirectory $ env (FME_TEMP)]}{设置gVisualizerTemp $ env (FME_TEMP)} elseif{[信息存在env(临时)& &(文件isdirectory $ env(临时)]}{设置gVisualizerTemp $ env(临时)}elseif {$ tcl_platform(平台)= =“unix”}{设置gVisualizerTemp“/ tmp”}其他{设置gVisualizerTemp c:};regsub - {[,]} {$ (WORKSPACE_NAME)} {_} wsname; set gVisualizerTemp $gVisualizerTemp/${wsname}_[clock format [clock seconds] -format %H%M%S]; puts "MACRO WORKSPACE_TEMP_DIR $gVisualizerTemp"; MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/inspector.ffs MACRO VISUALIZER_SCHEMA_FILE $(WORKSPACE_TEMP_DIR)/inspector.fsc MACRO VISUALIZER_CREATE_SPATIAL_INDEX YES DEFAULT_MACRO WB_CURRENT_CONTEXT # ------------------------------------------------------------------------- Tcl2 proc Creator_CoordSysRemover {} { global FME_CoordSys; set FME_CoordSys {}; } MACRO Creator_XML NOT_ACTIVATED MACRO Creator_CLASSIC NOT_ACTIVATED MACRO Creator_2D3D 2D_GEOMETRY MACRO Creator_COORDS if {{Geometry Object} == {2D坐标列表}}{put {MACRO Creator_2D3D 2D_GEOMETRY};如果{{Geometry Object} == {3D坐标列表}}{放置{宏Creator_2D3D 3D_GEOMETRY};{set comment{我们需要将minX minY maxX maxY的COORDS转换为一个完整的多边形坐标列表};设置splitcods [split]字符串修剪{ }]];if {[llength $splitCoords] > 4} {set trimmedCoords {};如果{$item != {}} {lappend trimmedCoords $item}};设置splitCoords trimmedCoords美元;};如果{[llength $splitCoords] != 4} {error {Creator: Coordinate list被期望为一个由四个数字组成的空格分隔的列表,如'minx miny maxx maxy' - ' 的是无效的};};设置minX [lindex $splitCoords 0];set minY [lindex $splitCoords 1];设置maxX [lindex $splitCoords 2];设置maxY [lindex $splitCoords 3];放置“宏创建器_coords $minX $minY $minX $maxY $maxX $maxY $maxX $maxX $minY $minX $minY”;放置{宏Creator_2D3D 2D_GEOMETRY};Creator_XML_Creator CREATE_AT_END无输出功能 ?XML version = 1.0 编码= US_ASCII 独立的= 没有 吗? 几何 尺寸= 2 几何 )FACTORY_DEF $ (Creator_CLASSIC) CreationFactory FACTORY_NAME Creator_CLASSIC_Creator (Creator_2D3D) (Creator_COORDS) CREATE_AT_END没有美元输出FEATURE_TYPE _____CREATED______ FACTORY_DEF * TeeFactory FACTORY_NAME Creator_Cloner输入FEATURE_TYPE _____CREATED______ NUMBER_OF_COPIES 1输出FEATURE_TYPE Creator_CREATED @Tcl2 (Creator_CoordSysRemover) @CoordSys () fme_feature_type创造者FACTORY_DEF * BranchingFactory FACTORY_NAME“Creator_CREATED布兰凯尔1 4”输入FEATURE_TYPE Creator_CREATEDTARGET_FACTORY "$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET" OUTPUT PASSED FEATURE_TYPE * @RemoveAttributes("Creator_CREATED Brancher -1 4".BranchingFactory.Count) # ------------------------------------------------------------------------- Tcl2 proc Creator_2_CoordSysRemover {} { global FME_CoordSys; set FME_CoordSys {}; } MACRO Creator_2_XML NOT_ACTIVATED MACRO Creator_2_CLASSIC NOT_ACTIVATED MACRO Creator_2_2D3D 2D_GEOMETRY MACRO Creator_2_COORDS if {{Geometry Object} == {2D坐标列表}}{put {MACRO Creator_2_2D3D 2D_GEOMETRY};{MACRO creator_2_2_classic *}}包括[if {{Geometry Object} == {3D坐标列表}}{put {MACRO Creator_2_2D3D 3D_GEOMETRY};{set comment{我们需要将minX minY maxX maxY的COORDS转换为一个完整的多边形坐标列表};设置splitcods [split]字符串修剪{ }]];if {[llength $splitCoords] > 4} {set trimmedCoords {};如果{$item != {}} {lappend trimmedCoords $item}};设置splitCoords trimmedCoords美元;};如果{[llength $splitCoords] != 4} {error {Creator_2: Coordinate list is expected to be a space delimited list of four numbers as 'minx miny maxx maxy' - ' 的是无效的};};设置minX [lindex $splitCoords 0];set minY [lindex $splitCoords 1];设置maxX [lindex $splitCoords 2];设置maxY [lindex $splitCoords 3];放置“宏创建器_2_coords $minX $minY $minX $maxY $maxX $maxY $maxX $maxX $minY $minX $minY”;放置{宏Creator_2_2D3D 2D_GEOMETRY};Creator_2_XML_Creator CREATE_AT_END无输出功能 ?XML version = 1.0 编码= US_ASCII 独立的= 没有 吗? 几何 尺寸= 2 几何 )FACTORY_DEF $ (Creator_2_CLASSIC) CreationFactory FACTORY_NAME Creator_2_CLASSIC_Creator (Creator_2_2D3D) (Creator_2_COORDS) CREATE_AT_END没有美元输出FEATURE_TYPE _____CREATED______ FACTORY_DEF * TeeFactory FACTORY_NAME Creator_2_Cloner输入FEATURE_TYPE _____CREATED______ NUMBER_OF_COPIES 1输出FEATURE_TYPE Creator_2_CREATED @Tcl2 (Creator_2_CoordSysRemover) @CoordSys () fme_feature_type Creator_2 FACTORY_DEF * BranchingFactory FACTORY_NAME“Creator_2_CREATED布兰凯尔1 12”输入FEATURE_TYPE Creator_2_CREATED TARGET_FACTORY " $ (WB_CURRENT_CONTEXT) _CREATOR_BRANCH_TARGET“输出通过FEATURE_TYPE * @RemoveAttributes (“Creator_2_CREATED布兰凯尔1 12”.BranchingFactory.Count) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FACTORY_DEF * TeeFactory FACTORY_NAME " $ (WB_CURRENT_CONTEXT) _CREATOR_BRANCH_TARGET“输入输出FEATURE_TYPE FEATURE_TYPE * * # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FACTORY_DEF *AttrSetFactory FACTORY_NAME AttributeCreator_2输入FEATURE_TYPE Creator_2_CREATED MULTI_FEATURE_MODE没有NULL_ATTR_MODE NO_OP ATTRSET_CREATE_DIRECTIVES _PROPAGATE_MISSING_FDIV ATTR_ACTION”““keyName”“SET_TO”“价值”输出输出FEATURE_TYPE AttributeCreator_2_OUTPUT # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FACTORY_DEF * AttrSetFactory FACTORY_NAME AttributeCreator输入FEATURE_TYPE Creator_CREATED MULTI_FEATURE_MODE没有NULL_ATTR_MODE NO_OPattrset_create_directive _PROPAGATE_MISSING_FDIV ATTR_ACTION "" "" _xml" "SET_TO" " 节点 lat = 56.07686365 朗= 12.11483240 id = 800000002 变更集= 1 时间戳= 2017-09-10T20:50:35.826Z version = 1 标签 k = ActiveFrom v = 1900 - 01 - 01 - t02:00:00.000000000z 标签 k = ActiveTo v = 3000 - 01 - 01 - t01:59:59.000000000z 标签 k = ProductionPointCategory v = 4 节点 “输出端输出FEATURE_TYPE AttributeCreator_OUTPUT#------------------------------------------------------------------------- FACTORY_DEF * XQueryFactory2 FACTORY_NAME XMLUpdater INPUT DOCUMENT_FEATURE FEATURE_TYPE AttributeCreator_OUTPUT INPUT QUERY_FEATURE FEATURE_TYPE AttributeCreator_2_OUTPUT XML_TEXT“@EvaluateExpression(FDIV,STRING_ENCODED, 价值 _xml xmlupdate)”COLLECT_CONTEXT_ITEM_NAMESPACES YES SEPARATE_DOCUMENT_FEATURES YES GENERATE_QUERY DELETE @EvaluateExpression(FDIV,STRING_ENCODED, 标签 k = ProductionPointCategory ,XMLUpdater)GENERATE_QUERY INSERT_LAST 节点的XML 标签 k = 的keyName v = fme: get-attribute 的keyName 种CONTEXT_ITEM_ATTR”_xml”WRITE_XML_HEADER是的输出输出FEATURE_TYPE XMLUpdater_DOCUMENT # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #假设是工作区临时dir已经设置和创建。ControlDefs::writeVisualizerTempDir DEFAULT_MACRO WORKSPACE_TEMP_DIR INCLUDE [set grpByAttrs {};if {[string first "@EvaluateExpression" $grpByAttrs] == 0} {put "MACRO CATMAC _$grpByAttrs";} else {set catter "";设置逗号“”;$catter$comma@Value(\"$attr\"); set comma ",_," ; } ; puts "MACRO CATMAC _@Concatenate($catter)" ; } } else { puts "MACRO CATMAC " ; }; set safeName "[regsub -all {[^a-zA-Z0-9]} {Inspector} _]_[expr round(rand() * 1000000)]_[clock clicks -milliseconds]"; puts "MACRO SAFE_FFS_NAME $safeName"; ] # Make the temporary directory that the FFS files will live in. FACTORY_DEF * CreationFactory FACTORY_NAME Inspector_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") FACTORY_DEF * TeeFactory FACTORY_NAME Inspector_DirCreatorCleanerUpper INPUT FEATURE_TYPE __nukeme__ # Send raster, point cloud and vector features down different paths to prepare # them for viewing FACTORY_DEF * TestFactory FACTORY_NAME Inspector_FeatureDirector INPUT FEATURE_TYPE XMLUpdater_DOCUMENT TEST &fme_type == "fme_raster" OUTPUT FAILED FEATURE_TYPE Inspector___NotRasterFeatures___ OUTPUT PASSED FEATURE_TYPE Inspector___RasterFeatures___ FACTORY_DEF * TestFactory FACTORY_NAME Inspector___FeatureDirector1 INPUT FEATURE_TYPE Inspector___NotRasterFeatures___ TEST &fme_type == "fme_point_cloud" OUTPUT FAILED FEATURE_TYPE Inspector___VectorFeatures___ OUTPUT PASSED FEATURE_TYPE Inspector___PointCloudFeatures___ # Vector features simply may get their colors overridden FACTORY_DEF * TeeFactory FACTORY_NAME Inspector_VectorSetterUpper INPUT FEATURE_TYPE Inspector___VectorFeatures___ OUTPUT FEATURE_TYPE __viewme__ # Point Cloud Features Might Need to be thinned # Note that we don't call the ThinPointCloud function directly, but rather # do it through TCL. This should allow this transformer to be used with a # Desktop license, even though ThinPointCloud requires Professional. Tcl2 proc Inspector_308e660f_1398_4866_89ff_03bc802933cb0_thinPointCloud {} { if {[string equal {NO_THINNING} {KEEPNPOINT}]} { FME_Execute ThinPointCloud NO_THINNING "\" \ ";{FME_Execute ThinPointCloud no_细化“\” \ ";{FME_Execute ThinPointCloud no_细化“\” \ ";} elseif的{[串等于{NO_THINNING} {LASTNPOINTS}]} {FME_Execute ThinPointCloud NO_THINNING “\” \ ";};} FACTORY_DEF * TeeFactory FACTORY_NAME Inspector___PointCloudThinner INPUT FEATURE_TYPE Inspector___PointCloudFeatures___ OUTPUT FEATURE_TYPE __viewme__ @ TCL2( “Inspector_308e660f_1398_4866_89ff_03bc802933cb0_thinPointCloud”)TCL2 PROC Inspector_308e660f_1398_4866_89ff_03bc802933cb0_prepareRaster {subsetStartRow subsetNumRows subsetStartCol subsetNumCols} {集useDI [字符串等于-nocase {$(FME_VIEWER_APP)} {fmedatainspector}];如果{$ useDI!} {FME_Execute ApplyRasterRotation双线性;};集doResample [字符串等于{NoReduction} {重新取样}];集doSubset [字符串等于{NoReduction} {子集}];集doBounds [字符串等于{NoReduction} {BoundingBoxOnly}];如果{$ doBounds} {FME_Execute GeometryType fme_polygon;} {ELSEIF $ doResample || $doSubset} { set comment { First, we need to prefix all the attributes. This is done because we are going to call @RasterProperties, and we want to make sure it doesn't overwrite any existing attributes. }; set kAttrPrefix "."; set allNames [FME_AttributeNames]; foreach oldName $allNames { set newName $kAttrPrefix; append newName $oldName; FME_RenameAttribute $newName $oldName; }; FME_Execute RasterProperties RASTER; if {$doResample} { set oldNumCols [FME_GetAttribute _num_columns]; set oldNumRows [FME_GetAttribute _num_rows]; set oldSpacingX [FME_GetAttribute _spacing_x]; set oldSpacingY [FME_GetAttribute _spacing_y]; set kMinNumCells 32; set kMaxNumCells 512; set comment { We will only resample if both dimensions are greater than the minimum num cells, and at least one is greater than the maximum. }; if {$oldNumRows > $kMinNumCells && $oldNumCols > $kMinNumCells && ($oldNumRows > $kMaxNumCells || $oldNumCols > $kMaxNumCells)} { set newSpacingX 1.0; set newSpacingY 1.0; if {$oldNumRows > $oldNumCols} { set comment { If we have more rows than columns, we need to choose a spacing that reduces the number of rows to the maximum we've chosen. }; set newSpacingY [expr 1.0 * $oldNumRows * $oldSpacingY / $kMaxNumCells]; set newSpacingX [expr 1.0 * $newSpacingY / $oldSpacingY * $oldSpacingX]; set comment { Now we need to check if doing this will result in the columns going below the minimum. If so, choose the spacing such that we only go down to the minimum (and not past). }; set newNumCols [expr $oldNumCols * $oldSpacingX / $newSpacingX]; if {$newNumCols < $kMinNumCells} { set newSpacingX [expr 1.0 * $oldNumCols * $oldSpacingX / $kMinNumCells]; set newSpacingY [expr 1.0 * $newSpacingX / $oldSpacingX * $oldSpacingY]; }; } else { set comment { This is identical to the above case, except the roles of rows and cols are reversed. }; set newSpacingX [expr 1.0 * $oldNumCols * $oldSpacingX / $kMaxNumCells]; set newSpacingY [expr 1.0 * $newSpacingX / $oldSpacingX * $oldSpacingY]; set newNumRows [expr $oldNumRows * $oldSpacingY / $newSpacingY]; if {$newNumRows < $kMinNumCells} { set newSpacingY [expr 1.0 * $oldNumRows * $oldSpacingY / $kMinNumCells]; set newSpacingX [expr 1.0 * $newSpacingY / $oldSpacingY * $oldSpacingX]; }; }; FME_Execute ResampleRaster CELL_SIZE $newSpacingX $newSpacingY NearestNeighbor; }; } elseif {$doSubset} { set comment { Get the value of some strings that may be attributes or constants. Note that we pass in the attribute prefix we're using, because if one does turn out to be an attribute, it won't actually be the exact name in the string (since we renamed all our attributes above). }; set rasterNumRows [FME_GetAttribute _num_rows]; set rasterNumCols [FME_GetAttribute _num_columns]; set comment { Only do subsetting if the specified start position is actually within the raster. }; if {$subsetStartRow < $rasterNumRows && $subsetStartCol < $rasterNumCols} { set comment { Now bound the subset to the size of the raster, so that we don't create padding. }; if {[expr $subsetStartRow + $subsetNumRows] > $rasterNumRows} { set subsetNumRows [expr $rasterNumRows - $subsetStartRow]; }; if {[expr $subsetStartCol + $subsetNumCols] > $rasterNumCols} { set subsetNumCols [expr $rasterNumCols - $subsetStartCol]; }; FME_Execute SubsetRaster $subsetStartRow $subsetNumRows $subsetStartCol $subsetNumCols; }; }; set comment { Remove all the attributes added by @RasterProperties and remove the prefix from the real attributes. We assume they all start with an underscore. }; FME_Execute RemoveAttributes fme_regexp_match {^_}; foreach oldName $allNames { set newName $kAttrPrefix; append newName $oldName; FME_RenameAttribute $oldName $newName; }; }; } FACTORY_DEF * TeeFactory FACTORY_NAME Inspector_RasterSetterUpper INPUT FEATURE_TYPE Inspector___RasterFeatures___ OUTPUT FEATURE_TYPE __viewme__ @Tcl2("Inspector_308e660f_1398_4866_89ff_03bc802933cb0_prepareRaster { }{ }{ }{ 现在将所有特性路由到记录器中,将它们的# feature type更改为transformer名称,这样它们就可以很好地查看# inspector_308e660f_1398_4866_89ff_03bc8033cb0_vis_feat_type更改正在显示的特性的特性类型#。DEFAULT_MACRO inspector_308e660f_1398_48ff_89ff_03bc802933cb0_vis_feat_type Inspector$(CATMAC) DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(亚搏在线SAFE_FFS_NAME)。数据检查器将限制它在WIN32上读取的特性的最大数量,因此我们将相应地限制这里使用MAX_FEATURES_TO_RECORD指令记录的特性的数量。($(inspector_308e660f_1398_4866_89ff_03bc8033cb0_vis_feat_type)输入FEATURE_FILE "$(VISUALIZER_FEATURE_FILE)"CREATE_SPATIAL_INDEX "$(VISUALIZER_CREATE_SPATIAL_INDEX)" INSPECTOR "$(VISUALIZER_CREATE_SPATIAL_INDEX)" FSC_SCHEMA _xml,varchar 255 模式记录STORE_SCANNED_METADATA RECORD_DIRECTLY_TO_DISK是的MAX_FEATURES_TO_RECORD WIN32 2000000 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FACTORY_DEF * RoutingFactory FACTORY_NAME“目的地功能类型路由相关器”COMMAND_PARM_EVALUATION SINGLE_PASS输入FEATURE_TYPE * FEATURE_TYPE_ATTRIBUTE __wb_out_feat_type__输出路由FEATURE_TYPE *输出NOT_ROUTED FEATURE_TYPE __nuke_me__ @Tcl2 (“FME_StatMessage 818059 [FME_GetAttributefme_template_feature_type] 818060 818061 fme_warn”) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FACTORY_DEF * TeeFactory FACTORY_NAME”最终输出核武器”输入FEATURE_TYPE __nuke_me__ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FACTORY_DEF * CreationFactory CREATE_AT_END输出FEATURE_TYPE __NUKEME__ @TCL(“如果[文件存在{$ (WORKSPACE_TEMP_DIR)}]{设置文件[水珠-nocomplain目录{$ (WORKSPACE_TEMP_DIR)}反面* .ffs];如果{[llength $files] == 1}{设置文件{$(WORKSPACE_TEMP_DIR)/};追加文件[lindex $files 0];eval FME_Execute System \173\042$(FME_HOME_UNIX)/fmedatainspector\042—visualizer—单一应用程序—delete-on-close—no-source-prompt—f FFS $theFile & \175;} elseif {[llength $files] == 0} {catch {file delete -force {$(WORKSPACE_TEMP_DIR)}};} else {set filesNoExt {};设置lastfile {};设置文件名ext [string trimright $fileName {.ffs}];if [regexp {(.*)_[0-9]*$} $fileNoExt wholething fileNoExtBase] {if {$fileNoExtBase == $lastfile} {continue}}; set lastfile $fileNoExt; lappend filesNoExt $fileNoExt }; eval FME_Execute System \173\042$(FME_HOME_UNIX)/fmedatainspector\042 --visualizer --single-application --delete-on-close --no-source-prompt -d {$(WORKSPACE_TEMP_DIR)} -a ffs -f FFS $filesNoExt & \175; }; }; ") FACTORY_DEF * TeeFactory INPUT FEATURE_TYPE __NUKEME__