#! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! GUI IGNORE SourceDataset_TEXTLINE_1,TEXTLINE_IN_ENCODING_TEXTLINE_1,SourceDataset_GEODATABASE_FILE_1,GEODATABASE_FILE_IN_WHERE_GEODATABASE_FILE_1,GEODATABASE_FILE_IN_TRANSLATE_SPATIAL_DATA_ONLY_GEODATABASE_FILE_1,GEODATABASE_FILE_IN_RESOLVE_DOMAINS_GEODATABASE_FILE_1,GEODATABASE_FILE_IN_RESOLVE_SUBTYPE_NAMES_GEODATABASE_FILE_1,GEODATABASE_FILE_IN_IGNORE_NETWORK_INFO_GEODATABASE_FILE_1,GEODATABASE_FILE_IN_IGNORE_RELATIONSHIP_INFO_GEODATABASE_FILE_1,GEODATABASE_FILE_IN_SPLIT_COMPLEX_EDGES_GEODATABASE_FILE_1,GEODATABASE_FILE_IN_SPLIT_MULTI_PART_ANNOS_GEODATABASE_FILE_1,GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MINX_GEODATABASE_FILE_1,GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MINY_GEODATABASE_FILE_1,GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MAXX_GEODATABASE_FILE_1,GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MAXY_GEODATABASE_FILE_1,GEODATABASE_FILE_IN_CLIP_TO_ENVELOPE_GEODATABASE_FILE_1,_GEODBSplitComplexAnnotations_GEODATABASE_FILE_1,_GEODBCacheMultipatchTextures_GEODATABASE_FILE_1,_GEODB_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_GEODATABASE_FILE_1,_GEODBInSearchFeature_GEODATABASE_FILE_1,_GEODBInSearchOrder_GEODATABASE_FILE_1,_GEODBInSearchMethod_GEODATABASE_FILE_1,_GEODBInFeatureReadMode_GEODATABASE_FILE_1,_GEODBInCheckSimpleGeom_GEODATABASE_FILE_1,_GEODBMergeFeatLinkedAnnos_GEODATABASE_FILE_1,_GEODBInBeginSql_GEODATABASE_FILE_1,_GEODBInEndSql_GEODATABASE_FILE_1,DestDataset_XLSXW_1,XLSXW_OUT_OVERWRITE_FILE_XLSXW_1,XLSXW_OUT_TEMPLATEFILE_XLSXW_1 DEFAULT_MACRO SRC_GDB GUI SOURCE_GEODATABASE SRC_GDB Source Esri File Geodatabase: DEFAULT_MACRO DestDataset_XLSXW GUI FILENAME DestDataset_XLSXW Excel_Files(*.xlsx;*.xlsm;*.xls)|*.xlsx;*.xlsm;*.xls|All_files(*.*)|*.* Destination Microsoft Excel File: INCLUDE TCL proc __FME_ExpandMacros {text {maxlevels 100}} { if { $maxlevels <= 0 } { return $text; } set pattern [join {{\$} {\([^()$]*\)}} {}] set indices [regexp -inline -all -indices $pattern $text] if [llength $indices] { foreach pair [lreverse $indices] { lassign $pair start end set replacement {} set replacement $::FME_MacroValues([string range $text [expr $start + 2] [expr $end - 1]]) set text [string replace $text $start $end $replacement] } return [__FME_ExpandMacros $text [expr $maxlevels - 1]] } return $text } proc __FME_ExpandEnvVars {text {maxlevels 100}} { if { $maxlevels <= 0 } { return $text; } set pattern [join {{\$} {\{[^\{\}$]*\}}} {}] set indices [regexp -inline -all -indices $pattern $text] if [llength $indices] { foreach pair [lreverse $indices] { lassign $pair start end set replacement {} set replacement $::env([string range $text [expr $start + 2] [expr $end - 1]]) set text [string replace $text $start $end $replacement] } return [__FME_ExpandEnvVars $text [expr $maxlevels - 1]] } return $text } proc __FME_EvalAndEncodeMacro {macroName} { set macroVal {} catch { set macroVal [__FME_ExpandMacros $::FME_MacroValues($macroName)] } catch { set macroVal [__FME_ExpandEnvVars $macroVal] } if {[string equal -length 15 {FME_CONDITIONAL} $macroVal ] == 0} { return [FME_EncodeText $macroVal]; } return $macroVal; } END_INCLUDE INCLUDE [ puts "MACRO SRC_GDB__FMEENCODED__ [__FME_EvalAndEncodeMacro SRC_GDB]" ; ] INCLUDE [ puts "MACRO DestDataset_XLSXW__FMEENCODED__ [__FME_EvalAndEncodeMacro DestDataset_XLSXW]" ; ] INCLUDE [ if {{$(SRC_GDB)} == {}} { puts_real {Parameter 'SRC_GDB' must be given a value.}; exit 1; }; ] INCLUDE [ if {{$(DestDataset_XLSXW)} == {}} { puts_real {Parameter 'DestDataset_XLSXW' must be given a value.}; exit 1; }; ] #! START_HEADER #! START_WB_HEADER READER_TYPE MULTI_READER MULTI_READER_TYPE{0} TEXTLINE MULTI_READER_KEYWORD{0} TEXTLINE_1 MULTI_READER_GEN_DIRECTIVES{0} MULTI_READER_TYPE{1} NULL MULTI_READER_KEYWORD{1} GEODATABASE_FILE_1 MULTI_READER_GEN_DIRECTIVES{1} SEARCH_ENVELOPE_MINX,0,SEARCH_ENVELOPE_MINY,0,GEODATABASE_FILE_EXPOSE_FORMAT_ATTRS,,_MERGE_SCHEMAS,YES,WHERE,,USE_SEARCH_ENVELOPE,NO,TRANSLATE_SPATIAL_DATA_ONLY,no,IGNORE_RELATIONSHIP_INFO,no,SPLIT_COMPLEX_EDGES,no,CLIP_TO_ENVELOPE,NO,SPLIT_MULTI_PART_ANNOS,no,RESOLVE_DOMAINS,yes,TABLELIST,,SEARCH_ENVELOPE_MAXX,0,IGNORE_NETWORK_INFO,no,SEARCH_ENVELOPE_MAXY,0,RESOLVE_SUBTYPE_NAMES,no WRITER_TYPE MULTI_WRITER MULTI_WRITER_DATASET_ORDER BY_ID MULTI_WRITER_FIRST_WRITER_ID 0 MULTI_WRITER_TYPE{0} XLSXW MULTI_WRITER_KEYWORD{0} XLSXW_1 #! END_WB_HEADER #! START_WB_HEADER MACRO WB_KEYWORD "TEXTLINE_1" #! END_WB_HEADER #! START_SOURCE_HEADER TEXTLINE TEXTLINE_1 # ===================================================================== # The following GUI line prompts for a file to be used as the source # TextLine file. The user input is stored in a macro, which is then # used to define the dataset to be read. # The dataset this mapping file was generated from was: GUI FILENAME SourceDataset_TEXTLINE_1 Text/Compressed_Text_Files(*.txt;*.txt.gz)|*.txt;*.txt.gz|Text_Files(*.txt)|*.txt|Compressed_Text_Files(*.txt.gz)|*.txt.gz|All_files(*.*)|*.* Source Text File: # ===================================================================== # Allows to force the encoding of source text file DEFAULT_MACRO TEXTLINE_IN_ENCODING_TEXTLINE_1 GUI OPTIONAL STRING_OR_CHOICE TEXTLINE_IN_ENCODING_TEXTLINE_1 UTF-8%UTF-16LE%UTF-16BE%ANSI%BIG5%SJIS%CP437%CP708%CP720%CP737%CP775%CP850%CP852%CP855%CP857%CP860%CP861%CP862%CP863%CP864%CP865%CP866%CP869%CP932%CP936%CP950%CP1250%CP1251%CP1252%CP1253%CP1254%CP1255%CP1256%CP1257%CP1258%ISO8859-1%ISO8859-2%ISO8859-3%ISO8859-4%ISO8859-5%ISO8859-6%ISO8859-7%ISO8859-8%ISO8859-9%ISO8859-13%ISO8859-15 Character Encoding: TEXTLINE_1_ENCODING $(TEXTLINE_IN_ENCODING_TEXTLINE_1) #! END_SOURCE_HEADER #! START_WB_HEADER DEFAULT_MACRO SourceDataset INCLUDE [ if {{$(SourceDataset)} != ""} { \ puts {DEFAULT_MACRO SourceDataset_TEXTLINE_1 $(SourceDataset)} \ } ] #! END_WB_HEADER #! START_SOURCE_HEADER TEXTLINE TEXTLINE_1 DEFAULT_MACRO SourceDataset_TEXTLINE_1 ${TEMP}\temp.fme TEXTLINE_1_DATASET "$(SourceDataset_TEXTLINE_1)" #! END_SOURCE_HEADER #! START_WB_HEADER MACRO WB_KEYWORD "GEODATABASE_FILE_1" #! END_WB_HEADER #! START_SOURCE_HEADER GEODATABASE_FILE GEODATABASE_FILE_1 # ============================================================================ # The following GUI line prompts for a file to be used as the source. # The user input is stored in a macro, which is then used to define # the dataset to be read. # The dataset this mapping file was generated from was: #! END_SOURCE_HEADER #! START_WB_HEADER DEFAULT_MACRO SourceDataset INCLUDE [ if {{$(SourceDataset)} != ""} { \ puts {DEFAULT_MACRO SourceDataset_GEODATABASE_FILE_1 $(SourceDataset)} \ } ] #! END_WB_HEADER #! START_SOURCE_HEADER GEODATABASE_FILE GEODATABASE_FILE_1 DEFAULT_MACRO SourceDataset_GEODATABASE_FILE_1 $(SRC_GDB) GUI SOURCE_GEODATABASE SourceDataset_GEODATABASE_FILE_1 Source Esri File Geodatabase: # Translation flags. # # ======================================================================== # The following defines the global where clause to be used when retrieving # features from the Geodatabase. DEFAULT_MACRO GEODATABASE_FILE_IN_WHERE_GEODATABASE_FILE_1 GEODATABASE_FILE_1_WHERE "$(GEODATABASE_FILE_IN_WHERE_GEODATABASE_FILE_1)" GUI OPTIONAL TEXT GEODATABASE_FILE_IN_WHERE_GEODATABASE_FILE_1 WHERE Clause: #============================================================================== # Determines whether non-spatial data, such as tables, subtypes, domains, # and relationship classes, get translated DEFAULT_MACRO GEODATABASE_FILE_IN_TRANSLATE_SPATIAL_DATA_ONLY_GEODATABASE_FILE_1 no GEODATABASE_FILE_1_TRANSLATE_SPATIAL_DATA_ONLY "$(GEODATABASE_FILE_IN_TRANSLATE_SPATIAL_DATA_ONLY_GEODATABASE_FILE_1)" GUI CHECKBOX GEODATABASE_FILE_IN_TRANSLATE_SPATIAL_DATA_ONLY_GEODATABASE_FILE_1 yes%no Spatial Data Only #============================================================================== # Determines whether to resolve domains DEFAULT_MACRO GEODATABASE_FILE_IN_RESOLVE_DOMAINS_GEODATABASE_FILE_1 yes GEODATABASE_FILE_1_RESOLVE_DOMAINS "$(GEODATABASE_FILE_IN_RESOLVE_DOMAINS_GEODATABASE_FILE_1)" GUI CHECKBOX GEODATABASE_FILE_IN_RESOLVE_DOMAINS_GEODATABASE_FILE_1 yes%no Resolve Domains #============================================================================== # Determines whether to resolve the subtype associated with a feature to the # text description linked to the subtype value. The text description will # be added as an attribute on the feature. DEFAULT_MACRO GEODATABASE_FILE_IN_RESOLVE_SUBTYPE_NAMES_GEODATABASE_FILE_1 no GEODATABASE_FILE_1_RESOLVE_SUBTYPE_NAMES "$(GEODATABASE_FILE_IN_RESOLVE_SUBTYPE_NAMES_GEODATABASE_FILE_1)" GUI CHECKBOX GEODATABASE_FILE_IN_RESOLVE_SUBTYPE_NAMES_GEODATABASE_FILE_1 yes%no Resolve Subtypes #============================================================================== # Determines whether to ignore the network info associated with a feature # coming from a network feature class. When set to 'yes', junctions will be # treated as point features, and edges will be treated as polyline features, # with the geodb_type being set to geodb_point and geodb_polyline, respectively. # Caution should be taken when changing the value for this keyword to a different # value than was specified when creating the mapping file/workspace. DEFAULT_MACRO GEODATABASE_FILE_IN_IGNORE_NETWORK_INFO_GEODATABASE_FILE_1 no GEODATABASE_FILE_1_IGNORE_NETWORK_INFO "$(GEODATABASE_FILE_IN_IGNORE_NETWORK_INFO_GEODATABASE_FILE_1)" GUI CHECKBOX GEODATABASE_FILE_IN_IGNORE_NETWORK_INFO_GEODATABASE_FILE_1 yes%no Ignore Network Info # ======================================================================== # Determines whether to ignore the relationship info associated with a feature # coming from a feature class containing relationships. When set to 'yes', simple # relationships will not be read, and attributed relationships will be read as # tables. Caution should be taken when changing the value for this keyword to a # different value than was specified when creating the mapping file/workspace. DEFAULT_MACRO GEODATABASE_FILE_IN_IGNORE_RELATIONSHIP_INFO_GEODATABASE_FILE_1 no GEODATABASE_FILE_1_IGNORE_RELATIONSHIP_INFO "$(GEODATABASE_FILE_IN_IGNORE_RELATIONSHIP_INFO_GEODATABASE_FILE_1)" GUI CHECKBOX GEODATABASE_FILE_IN_IGNORE_RELATIONSHIP_INFO_GEODATABASE_FILE_1 yes%no Ignore Relationship Info #============================================================================== # Determines whether complex edge features should be split up and each edge # element read as a separate feature. The default behaviour is to treat an # entire edge *feature* as an FME feature, rather than an edge *element* as an # FME feature. Returning edge elements ensures that all network connectivity # information on complex edges is read. DEFAULT_MACRO GEODATABASE_FILE_IN_SPLIT_COMPLEX_EDGES_GEODATABASE_FILE_1 no GEODATABASE_FILE_1_SPLIT_COMPLEX_EDGES "$(GEODATABASE_FILE_IN_SPLIT_COMPLEX_EDGES_GEODATABASE_FILE_1)" GUI CHECKBOX GEODATABASE_FILE_IN_SPLIT_COMPLEX_EDGES_GEODATABASE_FILE_1 yes%no Split Complex Edges #============================================================================== # Determines whether annotation features should be split up and each part # element read as a separate feature. The default behaviour is to treat an # entire annotation *feature* as an FME feature, rather than an annotation # *element* as an FME feature. Returning edge elements ensures that all # rotation and positional information for each element is preserved. DEFAULT_MACRO GEODATABASE_FILE_IN_SPLIT_MULTI_PART_ANNOS_GEODATABASE_FILE_1 no GEODATABASE_FILE_1_SPLIT_MULTI_PART_ANNOS "$(GEODATABASE_FILE_IN_SPLIT_MULTI_PART_ANNOS_GEODATABASE_FILE_1)" GUI CHECKBOX GEODATABASE_FILE_IN_SPLIT_MULTI_PART_ANNOS_GEODATABASE_FILE_1 yes%no Split Multi-Part Annotations # Include this file in source setting section to add native search envelope processing # Zero as a default means we don't do any search -- this makes workbench happier # =========================================================================== DEFAULT_MACRO GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MINX_GEODATABASE_FILE_1 0 GEODATABASE_FILE_1_SEARCH_ENVELOPE "$(GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MINX_GEODATABASE_FILE_1)" GUI OPTIONAL FLOAT GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MINX_GEODATABASE_FILE_1 Minimum X: # =========================================================================== DEFAULT_MACRO GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MINY_GEODATABASE_FILE_1 0 GEODATABASE_FILE_1_SEARCH_ENVELOPE "$(GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MINY_GEODATABASE_FILE_1)" GUI OPTIONAL FLOAT GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MINY_GEODATABASE_FILE_1 Minimum Y: # =========================================================================== DEFAULT_MACRO GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MAXX_GEODATABASE_FILE_1 0 GEODATABASE_FILE_1_SEARCH_ENVELOPE "$(GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MAXX_GEODATABASE_FILE_1)" GUI OPTIONAL FLOAT GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MAXX_GEODATABASE_FILE_1 Maximum X: # =========================================================================== DEFAULT_MACRO GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MAXY_GEODATABASE_FILE_1 0 GEODATABASE_FILE_1_SEARCH_ENVELOPE "$(GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MAXY_GEODATABASE_FILE_1)" GUI OPTIONAL FLOAT GEODATABASE_FILE_IN_SEARCH_ENVELOPE_MAXY_GEODATABASE_FILE_1 Maximum Y: # =========================================================================== DEFAULT_MACRO GEODATABASE_FILE_IN_CLIP_TO_ENVELOPE_GEODATABASE_FILE_1 NO GEODATABASE_FILE_1_CLIP_TO_ENVELOPE "$(GEODATABASE_FILE_IN_CLIP_TO_ENVELOPE_GEODATABASE_FILE_1)" GUI OPTIONAL CHECKBOX GEODATABASE_FILE_IN_CLIP_TO_ENVELOPE_GEODATABASE_FILE_1 YES%NO Clip to Search Envelope #============================================================================== # The following specifies that complex representations for annotation should # be split into simpler representations. DEFAULT_MACRO _GEODBSplitComplexAnnotations_GEODATABASE_FILE_1 no GUI CHOICE _GEODBSplitComplexAnnotations_GEODATABASE_FILE_1 yes%no Split Complex Annotations: GEODATABASE_FILE_1_SPLIT_COMPLEX_ANNOS $(_GEODBSplitComplexAnnotations_GEODATABASE_FILE_1) #============================================================================== # The following specifies whether to keep (YES) or clean up (NO) Esri's # multipatch texture caches. DEFAULT_MACRO _GEODBCacheMultipatchTextures_GEODATABASE_FILE_1 yes GUI CHOICE _GEODBCacheMultipatchTextures_GEODATABASE_FILE_1 yes%no Cache Multipatch Textures: GEODATABASE_FILE_1_CACHE_MULTIPATCH_TEXTURES $(_GEODBCacheMultipatchTextures_GEODATABASE_FILE_1) # ============================================================================ # Search Envelope Coordinate System DEFAULT_MACRO _GEODB_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_GEODATABASE_FILE_1 GUI OPTIONAL COORDSYS _GEODB_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_GEODATABASE_FILE_1 Search Envelope Coordinate System: GEODATABASE_FILE_1_SEARCH_ENVELOPE_COORDINATE_SYSTEM "$(_GEODB_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_GEODATABASE_FILE_1)" # ======================================================================== # The following determines whether to vectorize arcs. If SPLIT_AT_ARCS # is set to yes, then arcs do not get vectorized and lines/polygons # containing arcs get split up into line segments and arc segments. # # Update: This keyword is not applicable when using rich geometry. Since # all new mapping files/workspaces have FME_USE_RICH_GEOMETRY set to YES then # we do not need to expose this keyword. #DEFAULT_MACRO _GEODBInSplitAtArcs no #DEFAULT_MACRO _GEODBInSplitAtArcs NO #GUI OPTIONAL CHOICE _GEODBInSplitAtArcs yes%no Split at Arcs #GEODATABASE_FILE_SPLIT_AT_ARCS "$(_GEODBInSplitAtArcs_GEODATABASE_FILE_1)" # # ======================================================================== # The following defines the search feature for the query. It defines an # arbitrarily complex search feature as a spatial contraint. It is in the # form _SEARCH_FEATURE [ ]+. DEFAULT_MACRO _GEODBInSearchFeature_GEODATABASE_FILE_1 GUI OPTIONAL TEXT _GEODBInSearchFeature_GEODATABASE_FILE_1 Search Feature: GEODATABASE_FILE_1_SEARCH_FEATURE $(_GEODBInSearchFeature_GEODATABASE_FILE_1) # ======================================================================== # Determines whether the spatial component or the attribute component of a # query is performed first. This is only applicable when both spatial and # non-spatial searches are being performed. DEFAULT_MACRO _GEODBInSearchOrder_GEODATABASE_FILE_1 SPATIAL_FIRST GUI OPTIONAL CHOICE _GEODBInSearchOrder_GEODATABASE_FILE_1 SPATIAL_FIRST%ATTRIBUTE_FIRST Search Order: GEODATABASE_FILE_1_SEARCH_ORDER $(_GEODBInSearchOrder_GEODATABASE_FILE_1) # ======================================================================== # Determines which type of search method to use. This keyword is only applicable # when either the keyword SEARCH_ENVELOPE or the keyword SEARCH_FEATURE is specified. DEFAULT_MACRO _GEODBInSearchMethod_GEODATABASE_FILE_1 GEODB_INTERSECTS GUI OPTIONAL CHOICE _GEODBInSearchMethod_GEODATABASE_FILE_1 GEODB_INTERSECTS%GEODB_ENVELOPE_INTERSECTS%GEODB_TOUCHES%GEODB_OVERLAPS%GEODB_CROSSES%GEODB_WITHIN%GEODB_CONTAINS Search Method GEODATABASE_FILE_1_SEARCH_METHOD $(_GEODBInSearchMethod_GEODATABASE_FILE_1) # ======================================================================== # The following determines whether to read features from the geodatabase # tables/feature classes or to read metadata from those tables/feature # classes. DEFAULT_MACRO _GEODBInFeatureReadMode_GEODATABASE_FILE_1 Features GUI CHOICE _GEODBInFeatureReadMode_GEODATABASE_FILE_1 Features%Metadata Feature Read Mode: GEODATABASE_FILE_1_FEATURE_READ_MODE "$(_GEODBInFeatureReadMode_GEODATABASE_FILE_1)" # ======================================================================== # The following specifies that simple geometry should be checked for # when reading features. DEFAULT_MACRO _GEODBInCheckSimpleGeom_GEODATABASE_FILE_1 no GUI CHOICE _GEODBInCheckSimpleGeom_GEODATABASE_FILE_1 yes%no Check for Simple Geometry: GEODATABASE_FILE_1_CHECK_SIMPLE_GEOM $(_GEODBInCheckSimpleGeom_GEODATABASE_FILE_1) # ======================================================================== # The following specifies whether feature-linked annotations should # be merged onto the main feature as a text list attribute when reading. DEFAULT_MACRO _GEODBMergeFeatLinkedAnnos_GEODATABASE_FILE_1 no GUI CHOICE _GEODBMergeFeatLinkedAnnos_GEODATABASE_FILE_1 yes%no Merge Feature Linked Annotations: GEODATABASE_FILE_1_MERGE_FEAT_LINKED_ANNOS $(_GEODBMergeFeatLinkedAnnos_GEODATABASE_FILE_1) # ============================================================================== # The following specifies an SQL command to execute before opening the first # Geodatabase table. DEFAULT_MACRO _GEODBInBeginSql_GEODATABASE_FILE_1 GUI OPTIONAL TEXT_EDIT_SQL _GEODBInBeginSql_GEODATABASE_FILE_1 SQL Statement To Execute Before Translation: GEODATABASE_FILE_1_BEGIN_SQL{0} "$(_GEODBInBeginSql_GEODATABASE_FILE_1)" # ============================================================================== # The following specifies an SQL command to execute after closing all the # Geodatabase tables. DEFAULT_MACRO _GEODBInEndSql_GEODATABASE_FILE_1 GUI OPTIONAL TEXT_EDIT_SQL _GEODBInEndSql_GEODATABASE_FILE_1 SQL Statement To Execute After Translation: GEODATABASE_FILE_1_END_SQL{0} "$(_GEODBInEndSql_GEODATABASE_FILE_1)" GEODATABASE_FILE_1_DATASET "$(SourceDataset_GEODATABASE_FILE_1)" #! END_SOURCE_HEADER #! START_WB_HEADER MACRO WB_KEYWORD "XLSXW_1" #! END_WB_HEADER #! START_DEST_HEADER XLSXW XLSXW_1 # ============================================================================ # First get the dataset for the database. For Excel, it's the file name. # For now we'll use whatever they had when they generated this mapping file, # and not reprompt #! END_DEST_HEADER #! START_WB_HEADER DEFAULT_MACRO DestDataset INCLUDE [ if {"$(DestDataset)" != ""} { \ puts {DEFAULT_MACRO DestDataset_XLSXW_1 $(DestDataset)} \ } ] #! END_WB_HEADER #! START_DEST_HEADER XLSXW XLSXW_1 DEFAULT_MACRO DestDataset_XLSXW_1 $(DestDataset_XLSXW) GUI FILENAME DestDataset_XLSXW_1 Excel_Files(*.xlsx;*.xlsm;*.xls)|*.xlsx;*.xlsm;*.xls|All_files(*.*)|*.* Destination Microsoft Excel File: # ============================================================================ # Whether or not to overwrite the file DEFAULT_MACRO XLSXW_OUT_OVERWRITE_FILE_XLSXW_1 Yes XLSXW_1_OVERWRITE_FILE "$(XLSXW_OUT_OVERWRITE_FILE_XLSXW_1)" GUI CHOICE XLSXW_OUT_OVERWRITE_FILE_XLSXW_1 Yes%No Overwrite Existing File: # Template file option DEFAULT_MACRO XLSXW_OUT_TEMPLATEFILE_XLSXW_1 XLSXW_1_TEMPLATEFILE "$(XLSXW_OUT_TEMPLATEFILE_XLSXW_1)" GUI OPTIONAL FILENAME_MUSTEXIST XLSXW_OUT_TEMPLATEFILE_XLSXW_1 Excel_Files(*.xlsx;*.xlsm;*.xls)|*.xlsx;*.xlsm;*.xls|Excel_Workbook_2007(*.xlsx)|*.xlsx|Excel_Macro_Workbook(*.xlsm)|*.xlsm|Excel_Workbook_Pre_2007(*.xls)|*.xls|All_files(*.*)|*.* Template File: # ============================================================================ # Parameters whose values will be percolated to the feature types, but will not # remain as writer level settings # Drop feature type first DEFAULT_MACRO XLSXW_OUT_DROP_TABLE_XLSXW_1 No XLSXW_1_DROP_TABLE "$(XLSXW_OUT_DROP_TABLE_XLSXW_1)" # Truncate feature type first (removeallcelldata,retainformatting/headers,etc.) DEFAULT_MACRO XLSXW_OUT_TRUNCATE_TABLE_XLSXW_1 No XLSXW_1_TRUNCATE_TABLE "$(XLSXW_OUT_TRUNCATE_TABLE_XLSXW_1)" # Whether to write out the field names (orjustthedata) DEFAULT_MACRO XLSXW_OUT_FIELD_NAMES_OUT_XLSXW_1 Yes XLSXW_1_FIELD_NAMES_OUT "$(XLSXW_OUT_FIELD_NAMES_OUT_XLSXW_1)" # Default writer mode DEFAULT_MACRO XLSXW_OUT_WRITER_MODE_XLSXW_1 Insert_New_Rows XLSXW_1_WRITER_MODE "$(XLSXW_OUT_WRITER_MODE_XLSXW_1)" XLSXW_1_DATASET "$(DestDataset_XLSXW_1)" #! END_DEST_HEADER #! END_HEADER LOG_FILENAME "$(FME_MF_DIR)Extract_domains_from_geodatabase_gdb.log" LOG_APPEND NO LOG_MAX_FEATURES 200 LOG_MAX_RECORDED_FEATURES 200 FME_REPROJECTION_ENGINE FME FME_IMPLICIT_CSMAP_REPROJECTION_MODE Datum FME_GEOMETRY_HANDLING Classic FME_STROKE_MAX_DEVIATION 0 LOG_FILTER_MASK -1 DEFAULT_MACRO DATASET_KEYWORD_TEXTLINE_1 TEXTLINE_1 DEFAULT_MACRO DATASET_KEYWORD_GEODATABASE_FILE_1 GEODATABASE_FILE_1 DEFAULT_MACRO DATASET_KEYWORD_XLSXW_1 XLSXW_1 # ------------------------------------------------------------------------- TEXTLINE_1_READER_META_ATTRIBUTES fme_feature_type # ------------------------------------------------------------------------- GEODATABASE_FILE_1_READER_META_ATTRIBUTES fme_feature_type # ------------------------------------------------------------------------- MULTI_READER_CONTINUE_ON_READER_FAILURE No FME_BEGIN_TCL FME_Decode lappendsysStringFME_MacroValuesFME_HOME_UNIXfmelappendsysStringGeneratelappendsysStringGEODATABASE_FILElappendsysStringNULLlappendsysStringFME_MacroValuesSRC_GDBlappendsysStringenvTEMPtemp.fmelappendsysString--RESOLVE_DOMAINSlappendsysStringYESlappendsysString21evalexecsysString # ------------------------------------------------------------------------- MACRO WORKSPACE_NAME Extract_domains_from_geodatabase_gdb MACRO 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.ffs MACRO VISUALIZER_SCHEMA_FILE $(WORKSPACE_TEMP_DIR)/inspector.fsc MACRO VISUALIZER_CREATE_SPATIAL_INDEX YES # ------------------------------------------------------------------------- Lookup ___KnownFeatureTypes___ "$(DATASET_KEYWORD_TEXTLINE_1)_text_line" yes "" no # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME "Unexpected Input Remover" INPUT FEATURE_TYPE * TEST @Lookup(___KnownFeatureTypes___,@Concatenate(&multi_reader_keyword,"_",@FeatureType())) == yes OUTPUT PASSED FEATURE_TYPE * # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "Source -> Generic" INPUT FEATURE_TYPE * OUTPUT FEATURE_TYPE * @Transform(&multi_reader_type,FME_GENERIC,PRESERVE_GEOMETRY) DEFAULT_MACRO WB_CURRENT_CONTEXT # ------------------------------------------------------------------------- MACRO casemac INCLUDE [ if { {no} == {no} } { puts {MACRO casemac -nocase}} ] Tcl2 proc StringSearcher_3ccf5ce1_81c0_4aad_8fbf_0831824afd763_doGrep { regExp } { set results [regexp -inline $(casemac) [FME_DecodeText $regExp] [FME_GetAttribute {"text_line_data"}]]; set attrName {_matched_characters}; set index 0; foreach part $results { FME_SetAttribute $attrName $part; set attrName "_matched_parts{$index}"; incr index; }; if {$index > 0} { FME_UnsetAttributes $attrName; }; return $index; } FACTORY_DEF * TestFactory FACTORY_NAME StringSearcher INPUT FEATURE_TYPE text_line TEST @Tcl2("StringSearcher_3ccf5ce1_81c0_4aad_8fbf_0831824afd763_doGrep {coded_domain} ") > 0 OUTPUT PASSED FEATURE_TYPE StringSearcher_MATCHED # ------------------------------------------------------------------------- FME_PYTHON_PATH "$(FME_MF_DIR)" FACTORY_DEF * PythonFactory FACTORY_NAME PythonCaller INPUT FEATURE_TYPE StringSearcher_MATCHED SYMBOL_NAME parseDomains SOURCE_CODE defparseDomainsfeature:startIndex=0quotesOn=0codes=values=tempList=textLine=feature.getStringAttributetext_line_data#slicethelistbetweenparenthesesstart=textLine.index+1end=textLine.indextextLine=textLinestart:end#DecodetheWWJDencodingusingaTCLcall:tclFunc=Tcl2FME_DecodeText+textLine+textLine=feature.performFunctiontclFunc#BruteforceparsingintotempListforiinrangelentextLine:iftextLinei.count:!=0andquotesOn==0:tempList.appendtextLinestartIndex:istartIndex=i+1eliftextLinei.count!=0andquotesOn==0:quotesOn=1eliftextLinei.count!=0andquotesOn==1:quotesOn=0tempList.appendtextLinestartIndex:lentextLine#PlacetempListpartsintoproperattributesforiinrangelentempList:ifi==0:feature.setStringAttributedomain_nametempListielifi==1:feature.setStringAttributedomain_typetempListielifi%2==0:codes.appendtempListielse:values.appendtempListifeature.setListAttributecodecodesfeature.setListAttributevaluevalues OUTPUT PYOUTPUT FEATURE_TYPE PythonCaller_OUTPUT # ------------------------------------------------------------------------- # Expose all attributes. This ensures that if you expose fme_dataset, you will get it. READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename FACTORY_DEF * TeeFactory FACTORY_NAME AttributeExposer INPUT FEATURE_TYPE PythonCaller_OUTPUT OUTPUT FEATURE_TYPE AttributeExposer_OUTPUT # ------------------------------------------------------------------------- INCLUDE [ set macroLine "MACRO AttributeRemover_LIST_EXP "; foreach attr [split ""] { set attr [FME_DecodeText $attr]; set attr [regsub "{}$" $attr "{}.*"]; set attr [regsub -all "{}" $attr "{\[0-9\]+}"]; append macroLine ",^$attr$"; }; puts $macroLine; ] FACTORY_DEF * TeeFactory FACTORY_NAME AttributeRemover INPUT FEATURE_TYPE AttributeExposer_OUTPUT OUTPUT FEATURE_TYPE AttributeRemover_OUTPUT @RemoveAttributes(_matched_characters,text_line_data) @RemoveAttributes(fme_regexp_match"$(AttributeRemover_LIST_EXP)") # ------------------------------------------------------------------------- FACTORY_DEF * ElementFactory FACTORY_NAME ListExploder INPUT FEATURE_TYPE AttributeRemover_OUTPUT LIST_NAME code{} ELEMENT_NUMBER_FIELD _element_index CLONE_GEOMETRY MODE LEAN OUTPUT ELEMENT FEATURE_TYPE ListExploder_OUTPUT # ------------------------------------------------------------------------- Tcl2 proc ListIndexer_indexer {index numElements} { if {$index < 0 } { set index [expr $numElements + $index]; }; regsub \"{}\" {value{}} \"{$index}\" listWithIndex; regsub \"{}\" {value{}} {} listBase; set complexListExp "$listWithIndex\."; set prefixLength [expr [string length $complexListExp]-1]; foreach attr [FME_AttributeNames] { if {$attr == $listWithIndex} { lappend attrsToCopy $listBase $attr; } elseif {[string first $complexListExp $attr] == 0} { set newAttr [string replace $attr 0 $prefixLength]; lappend attrsToCopy $newAttr $attr; }; }; if {[info exists attrsToCopy] && [llength $attrsToCopy] > 0} { eval FME_Execute CopyAttributes $attrsToCopy; }; } FACTORY_DEF * TestFactory FACTORY_NAME ListIndexer INPUT FEATURE_TYPE ListExploder_OUTPUT TEST @Value(_element_index) >= 0 OUTPUT PASSED FEATURE_TYPE ListIndexer_OUTPUT @Tcl2("ListIndexer_indexer @Value(_element_index) 0") OUTPUT FAILED FEATURE_TYPE ListIndexer_OUTPUT @Tcl2("ListIndexer_indexer @Value(_element_index) @NumElements(value{})") # ------------------------------------------------------------------------- Tcl2 set {Concatenator_valList} [split &domain_name,&domain_type,&value,&code ,]; # We use Tcl here instead of @Concatenate because Tcl is more flexible. Tcl2 proc Concatenator_concatter {} { global {Concatenator_valList}; set val {}; foreach {valEnc} [set {Concatenator_valList}] { append val [FME_DecodeTextOrAttr $valEnc]; }; FME_SetAttribute {_concatenated} $val; } FACTORY_DEF * TeeFactory FACTORY_NAME Concatenator INPUT FEATURE_TYPE ListIndexer_OUTPUT OUTPUT FEATURE_TYPE Concatenator_OUTPUT @Tcl2(Concatenator_concatter) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME DuplicateRemover_Match_Value_Extractor INPUT FEATURE_TYPE Concatenator_OUTPUT OUTPUT FEATURE_TYPE ___TODUPTEST___ __DUPTOCHECK__ @Concatenate(___DuplicateRemover_,fme_attribute_name,"_concatenated") FACTORY_DEF * TestFactory FACTORY_NAME DuplicateRemover INPUT FEATURE_TYPE ___TODUPTEST___ TEST @Count(fme_attribute_name,__DUPTOCHECK__) > 0 OUTPUT FAILED FEATURE_TYPE DuplicateRemover_UNIQUE @Count(fme_attribute_name,__DUPTOCHECK__) @RemoveAttributes(__DUPTOCHECK__) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "DuplicateRemover_UNIQUE -> NewFeatureType Correlator" INPUT FEATURE_TYPE DuplicateRemover_UNIQUE OUTPUT FEATURE_TYPE __GO_TO_FINAL_OUTPUT_ROUTER__ multi_writer_id 0 @Transform(FME_GENERIC,XLSXW) @SupplyAttributes(ENCODED,fme_template_feature_type,NewFeatureType) @CopyAttributes(__wb_out_feat_type__,domain_name) # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME "Final Output Feature Type Router" INPUT FEATURE_TYPE * TEST @Value(__wb_out_feat_type__) != "" OUTPUT PASSED FEATURE_TYPE * @FeatureType(@Value(__wb_out_feat_type__)) OUTPUT FAILED 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__ # ------------------------------------------------------------------------- XLSXW_1_DEF NewFeatureType xlsx_drop_sheet No xlsx_trunc_sheet No xlsx_field_names_out Yes xlsx_start_col "" xlsx_start_row "" xlsx_offset_col "" xlsx_offset_row "" xlsx_table_writer_mode Insert_New_Rows xlsx_row_id_column "" code number(column_widthformat_typeSimplefont_typefont_colorfill_colorcustom_options) value string(column_widthformat_typeSimplefont_typefont_colorfill_colorcustom_options)