#! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! a2 a3 a4 val SET_TO 1 2 3 4"/>#! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! FME_PYTHON_VERSION 27#!START_HEADER#!START_WB_HEADERREADER_TYPE MULTI_READERWRITER_TYPE NULLWRITER_KEYWORD NULL_DESTNULL_DEST_DATASET null#!END_WB_HEADER#!START_WB_HEADER#!END_WB_HEADER#!END_HEADERLOG_FILENAME "$(FME_MF_DIR)ListKeyPair.log"LOG_APPEND NOLOG_MAX_FEATURES 200LOG_MAX_RECORDED_FEATURES 200FME_REPROJECTION_ENGINE FMEFME_IMPLICIT_CSMAP_REPROJECTION_MODE AutoFME_GEOMETRY_HANDLING EnhancedFME_STROKE_MAX_DEVIATION 0LOG_FILTER_MASK -1# -------------------------------------------------------------------------MULTI_READER_CONTINUE_ON_READER_FAILURE No# -------------------------------------------------------------------------MACRO WORKSPACE_NAME ListKeyPairMACRO FME_VIEWER_APP fmedatainspector# -------------------------------------------------------------------------INCLUDE [ if {[info exists env(FME_TEMP)] && [file isdirectory $env(FME_TEMP)]} {set gVisualizerTemp $env(FME_TEMP)} elseif {[info exists env(TEMP)] && [file isdirectory $env(TEMP)]} {set gVisualizerTemp $env(TEMP)} elseif { $tcl_platform(platform) == "unix" } {set gVisualizerTemp "/tmp"} else {set gVisualizerTemp c:};regsub -all {[ ,&]} {$(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.ffsMACRO VISUALIZER_SCHEMA_FILE $(WORKSPACE_TEMP_DIR)/inspector.fscMACRO VISUALIZER_CREATE_SPATIAL_INDEX YESDEFAULT_MACRO WB_CURRENT_CONTEXT# -------------------------------------------------------------------------Tcl2 proc Creator_CoordSysRemover {} { global FME_CoordSys;set FME_CoordSys {};}MACRO Creator_XML NOT_ACTIVATEDMACRO Creator_CLASSIC NOT_ACTIVATEDMACRO Creator_2D3D 2D_GEOMETRYMACRO Creator_COORDS INCLUDE [ if { {Geometry Object} == {Geometry Object} } { puts {MACRO Creator_XML *} } ]INCLUDE [ if { {Geometry Object} == {2D Coordinate List} } { puts {MACRO Creator_2D3D 2D_GEOMETRY};puts {MACRO Creator_CLASSIC *} } ]INCLUDE [ if { {Geometry Object} == {3D Coordinate List} } { puts {MACRO Creator_2D3D 3D_GEOMETRY};puts {MACRO Creator_CLASSIC *} } ]INCLUDE [ if { {Geometry Object} == {2D Min/Max Box} } { set comment { We need to turn the COORDS which are minX minY maxX maxY into a full polygon list of coordinates };set splitCoords [split [string trim { }]];if { [llength $splitCoords] > 4} { set trimmedCoords {};foreach item $splitCoords { if { $item != {} } {lappend trimmedCoords $item} };set splitCoords $trimmedCoords;};if { [llength $splitCoords] != 4 } { error {Creator: Coordinate list is expected to be a space delimited list of four numbers as 'minx miny maxx maxy' - ` ' is invalid};};set minX [lindex $splitCoords 0];set minY [lindex $splitCoords 1];set maxX [lindex $splitCoords 2];set maxY [lindex $splitCoords 3];puts "MACRO Creator_COORDS $minX $minY $minX $maxY $maxX $maxY $maxX $minY $minX $minY";puts {MACRO Creator_2D3D 2D_GEOMETRY};puts {MACRO Creator_CLASSIC *} } ]FACTORY_DEF $(Creator_XML) CreationFactory FACTORY_NAME Creator_XML_Creator CREATE_AT_END no OUTPUT FEATURE_TYPE _____CREATED______ @Geometry(FROM_ENCODED_STRING, ?xml version= 1.0 encoding= US_ASCII standalone= no ? geometry dimension= 2 null geometry )FACTORY_DEF $(Creator_CLASSIC) CreationFactory FACTORY_NAME Creator_CLASSIC_Creator $(Creator_2D3D) $(Creator_COORDS) CREATE_AT_END no OUTPUT FEATURE_TYPE _____CREATED______FACTORY_DEF * TeeFactory FACTORY_NAME Creator_Cloner INPUT FEATURE_TYPE _____CREATED______ @Tcl2(Creator_CoordSysRemover) @CoordSys() NUMBER_OF_COPIES 1 COPY_NUMBER_ATTRIBUTE "_creation_instance" OUTPUT FEATURE_TYPE Creator_CREATED fme_feature_type CreatorFACTORY_DEF * BranchingFactory FACTORY_NAME "Creator_CREATED Brancher -1 4" INPUT FEATURE_TYPE Creator_CREATED TARGET_FACTORY "$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET" MAXIMUM_COUNT None OUTPUT PASSED FEATURE_TYPE *# -------------------------------------------------------------------------FACTORY_DEF * TeeFactory FACTORY_NAME "$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET" INPUT FEATURE_TYPE * OUTPUT FEATURE_TYPE *# -------------------------------------------------------------------------FACTORY_DEF {*} AttrSetFactory FACTORY_NAME AttributeCreator INPUT FEATURE_TYPE Creator_CREATED MULTI_FEATURE_MODE NO NULL_ATTR_MODE NO_OP ATTRSET_CREATE_DIRECTIVES _PROPAGATE_MISSING_FDIV ATTR_ACTION { "" "key" "SET_TO" "a1 a2 a3 a4" } ATTR_ACTION { "" "val" "SET_TO" "1 2 3 4" } OUTPUT OUTPUT FEATURE_TYPE AttributeCreator_OUTPUT# -------------------------------------------------------------------------Tcl2 set AttributeSplitter_ef437059_36c1_4528_824a_bee14ba9299b8_splitDelim [FME_DecodeText { }];if { [regexp {^([1-9][0-9]*s)+$} [set AttributeSplitter_ef437059_36c1_4528_824a_bee14ba9299b8_splitDelim]] } { set AttributeSplitter_ef437059_36c1_4528_824a_bee14ba9299b8_splitWidths [split [regsub -all {s$} { } {}] s];proc AttributeSplitter_doSplit {} { global AttributeSplitter_ef437059_36c1_4528_824a_bee14ba9299b8_splitWidths;set source [FME_GetAttribute [FME_DecodeText {key}]];set attrNum 0;set listName [FME_DecodeText {list 0 .key}];set attrPos 0;set keepEmptyParts [string equal {No} {No}];foreach width [set AttributeSplitter_ef437059_36c1_4528_824a_bee14ba9299b8_splitWidths] { set endPos [expr $attrPos + $width - 1];set bit [string range $source $attrPos $endPos];set part [string trim $bit];if { $keepEmptyParts || $part != \"\" } { FME_SetAttribute "$listName{$attrNum}" $part;incr attrNum;};incr attrPos $width;};};} else { proc AttributeSplitter_doSplit {} { global AttributeSplitter_ef437059_36c1_4528_824a_bee14ba9299b8_splitDelim;set delim [set AttributeSplitter_ef437059_36c1_4528_824a_bee14ba9299b8_splitDelim];set delimLength [string length $delim];set source [FME_GetAttribute [FME_DecodeText {key}]];set keepEmptyParts [string equal {No} {No}];set bits {};set startIndex 0;set nextIndex [string first $delim $source $startIndex];while {$nextIndex >= 0} { lappend bits [string range $source $startIndex [expr $nextIndex-1]];set startIndex [expr $nextIndex + $delimLength];set nextIndex [string first $delim $source $startIndex];};lappend bits [string range $source $startIndex end];set listName [FME_DecodeText {list 0 .key}];set attrNum 0;foreach bit $bits { set trimmedPart [string trim $bit];if { $keepEmptyParts || $trimmedPart != \"\" } { FME_SetAttribute "$listName{$attrNum}" $trimmedPart;incr attrNum;};} } }FACTORY_DEF * TeeFactory FACTORY_NAME AttributeSplitter INPUT FEATURE_TYPE AttributeCreator_OUTPUT OUTPUT FEATURE_TYPE AttributeSplitter_OUTPUT @Tcl2(AttributeSplitter_doSplit)# -------------------------------------------------------------------------Tcl2 set AttributeSplitter_2_c2441bf9_e86c_4057_b3ae_670fba9863af8_splitDelim [FME_DecodeText { }];if { [regexp {^([1-9][0-9]*s)+$} [set AttributeSplitter_2_c2441bf9_e86c_4057_b3ae_670fba9863af8_splitDelim]] } { set AttributeSplitter_2_c2441bf9_e86c_4057_b3ae_670fba9863af8_splitWidths [split [regsub -all {s$} { } {}] s];proc AttributeSplitter_2_doSplit {} { global AttributeSplitter_2_c2441bf9_e86c_4057_b3ae_670fba9863af8_splitWidths;set source [FME_GetAttribute [FME_DecodeText {val}]];set attrNum 0;set listName [FME_DecodeText {list 0 .val}];set attrPos 0;set keepEmptyParts [string equal {No} {No}];foreach width [set AttributeSplitter_2_c2441bf9_e86c_4057_b3ae_670fba9863af8_splitWidths] { set endPos [expr $attrPos + $width - 1];set bit [string range $source $attrPos $endPos];set part [string trim $bit];if { $keepEmptyParts || $part != \"\" } { FME_SetAttribute "$listName{$attrNum}" $part;incr attrNum;};incr attrPos $width;};};} else { proc AttributeSplitter_2_doSplit {} { global AttributeSplitter_2_c2441bf9_e86c_4057_b3ae_670fba9863af8_splitDelim;set delim [set AttributeSplitter_2_c2441bf9_e86c_4057_b3ae_670fba9863af8_splitDelim];set delimLength [string length $delim];set source [FME_GetAttribute [FME_DecodeText {val}]];set keepEmptyParts [string equal {No} {No}];set bits {};set startIndex 0;set nextIndex [string first $delim $source $startIndex];while {$nextIndex >= 0} { lappend bits [string range $source $startIndex [expr $nextIndex-1]];set startIndex [expr $nextIndex + $delimLength];set nextIndex [string first $delim $source $startIndex];};lappend bits [string range $source $startIndex end];set listName [FME_DecodeText {list 0 .val}];set attrNum 0;foreach bit $bits { set trimmedPart [string trim $bit];if { $keepEmptyParts || $trimmedPart != \"\" } { FME_SetAttribute "$listName{$attrNum}" $trimmedPart;incr attrNum;};} } }FACTORY_DEF * TeeFactory FACTORY_NAME AttributeSplitter_2 INPUT FEATURE_TYPE AttributeSplitter_OUTPUT OUTPUT FEATURE_TYPE AttributeSplitter_2_OUTPUT @Tcl2(AttributeSplitter_2_doSplit)# -------------------------------------------------------------------------FACTORY_DEF * TeeFactory FACTORY_NAME "ListKeyValuePairExtractor Input Input Collector" INPUT FEATURE_TYPE AttributeSplitter_2_OUTPUT OUTPUT FEATURE_TYPE ListKeyValuePairExtractor_InputMACRO ListKeyValuePairExtractor_WORKSPACE_NAME ListKeyValuePairExtractorMACRO $(ListKeyValuePairExtractor_WORKSPACE_NAME)_XFORMER_NAME ListKeyValuePairExtractorMACRO $(ListKeyValuePairExtractor_WORKSPACE_NAME)_TRANSFORMER_GROUP MACRO $(ListKeyValuePairExtractor_WORKSPACE_NAME)___COMPOUND_PARAMETERS MACRO $(ListKeyValuePairExtractor_WORKSPACE_NAME)___KEY_ATTR list{0}.key{0}MACRO $(ListKeyValuePairExtractor_WORKSPACE_NAME)___VAL_ATTR list{0}.val{0}MACRO $(ListKeyValuePairExtractor_WORKSPACE_NAME)___ATTR_CONFLICT_RES 1INCLUDE_CUSTOM_TRANSFORMER_VER ListKeyValuePairExtractor:1FACTORY_DEF * TeeFactory FACTORY_NAME "ListKeyValuePairExtractor Output Output Renamer/Nuker" INPUT FEATURE_TYPE ListKeyValuePairExtractor_Output OUTPUT FEATURE_TYPE ListKeyValuePairExtractor_OutputFACTORY_DEF * TeeFactory FACTORY_NAME "ListKeyValuePairExtractor Output Renamer/Nuker" INPUT FEATURE_TYPE ListKeyValuePairExtractor_ OUTPUT FEATURE_TYPE ListKeyValuePairExtractor_ DEFAULT_MACRO _WB_BYPASS_TERMINATION NoFACTORY_DEF * TeeFactory FACTORY_NAME ListKeyValuePairExtractor_ INPUT FEATURE_TYPE ListKeyValuePairExtractor_ OUTPUT FAILED FEATURE_TYPE * @Abort(ENCODED,ListKeyValuePairExtractor output a Rejected feature. To continue translation when features are rejected change Workspace Parameters Translation Rejected Feature Handling to Continue Translation )# -------------------------------------------------------------------------# Assumption is that the workspace temp dir has been already set and created.See controldefs.cpp - ControlDefs::writeVisualizerTempDirDEFAULT_MACRO WORKSPACE_TEMP_DIRFACTORY_DEF {*} InspectorFactory FACTORY_NAME ListKeyValuePairExtractor_Output_Prepper COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE ListKeyValuePairExtractor_Output GROUP_ATTRIBUTE __inspector_feature_type_attr__ GROUP_BY { } GROUP_ATTRIBUTE_PREFIX { ListKeyValuePairExtractor_Output } RASTER_REDUCTION NoReduction POINT_CLOUD_REDUCTION NO_THINNING OUTPUT RESULT FEATURE_TYPE __viewme__# Now route all the features into the recorder,changing their# feature type to the transformer name so that they view nicelyDEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(亚搏在线SAFE_FFS_NAME).ffsDEFAULT_MACRO VISUALIZER_CREATE_SPATIAL_INDEX NO# [PR#45549] The Data Inspector will limit the maximum number of features# it reads on WIN32,so we will correspondingly limit the number of# features we record here using the MAX_FEATURES_TO_RECORD directive.FACTORY_DEF * RecorderFactory FACTORY_NAME ListKeyValuePairExtractor_Output_Recorder COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE __viewme__ _wb_termination_feature Yes @FeatureType(TERMINATOR_@Value(_wb_termination_xformer)) INPUT FEATURE_TYPE __viewme__ @FeatureType(@Value(__inspector_feature_type_attr__)) @RemoveAttributes(__inspector_feature_type_attr__) FEATURE_FILE "$(VISUALIZER_FEATURE_FILE)" STORE_SCANNED_SCHEMA YES CREATE_SPATIAL_INDEX "$(VISUALIZER_CREATE_SPATIAL_INDEX)" INSPECTOR "$(VISUALIZER_CREATE_SPATIAL_INDEX)" FSC_SCHEMA key,varchar 255 ,val,varchar 255 ,_creation_instance,varchar 255 MODE RECORD STORE_SCANNED_METADATA RECORD_DIRECTLY_TO_DISK YES MAX_FEATURES_TO_RECORD WIN32 2000000# -------------------------------------------------------------------------FACTORY_DEF * RoutingFactory FACTORY_NAME "Destination Feature Type Routing Correlator" COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE * FEATURE_TYPE_ATTRIBUTE __wb_out_feat_type__ OUTPUT ROUTED FEATURE_TYPE * OUTPUT NOT_ROUTED FEATURE_TYPE __nuke_me__ @Tcl2("FME_StatMessage 818059 [FME_GetAttribute fme_template_feature_type] 818060 818061 fme_warn")# -------------------------------------------------------------------------FACTORY_DEF * TeeFactory FACTORY_NAME "Final Output Nuker" INPUT FEATURE_TYPE __nuke_me__# -------------------------------------------------------------------------FACTORY_DEF * CreationFactory CREATE_AT_END OUTPUT FEATURE_TYPE __NUKEME__ @TCL("if [file exists {$(WORKSPACE_TEMP_DIR)}] {set files [glob -nocomplain -directory {$(WORKSPACE_TEMP_DIR)} -tails *.ffs];if {[llength $files] == 1} { set theFile {$(WORKSPACE_TEMP_DIR)/};append theFile [lindex $files 0];eval FME_Execute System \173\042$(FME_HOME_UNIX)/fmedatainspector\042 --visualizer --single-application --delete-on-close --no-source-prompt -f FFS \042$theFile\042 & \175;} elseif { [llength $files] == 0 } { catch { file delete -force {$(WORKSPACE_TEMP_DIR)} };} else { set filesNoExt {};set lastfile {};foreach {fileName} [lsort $files] { set fileNoExt [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__