题目问题:“tcl” https://knowledge.亚搏在线safe.com/questions/topics/single/132.html “TCL”主题的最新问题 算术编辑器-数学运算符(X?y:z)-无法计算表达式 https://knowledge.亚搏在线safe.com/questions/67672/arithmetic-editor-math-operator-xyz-failed-to-eval.html

为什么这行不通?

@ value (SP) = FD ? @ value (PCT): 0

如果属性sp的值是fd,然后使用属性PCT的值,否则为0。我也试着用“FD”和“FD”。

2018-04-05 22:58:55 8.1 0.0 warn attributemanager 19:tcl错误消息:2018-04-05 22:58:55 8.1 0.0 warn无效的裸词“fd”2018-04-05 22:58:55 8.1 0.0 warn in expression“fd=fd”?10.0:0“;2018-04-05 22:58:55 8.1 0.0 warn应为“$fd”或“fd”或“fd(…)”或……2018-04-05 22:58:55 8.1 0.0 warn attributeManager_19:未能评估表达式“fd=fd”?10.0:0英寸结果设置为空。
tcl 数学运算符 算术艾德 星期四,2018年4月05日23:02:59格林尼治标准时间 mikek
TCL启动脚本在服务器上失败(在桌面运行) https://knowledge.亚搏在线safe.com/questions/55982/tcl-startup-script-fails-on-server-runs-on-desktop.html

可能是许可问题,但不知道失败的是什么。我不断地得到这个错误。

2017-10-18 10:22:55在服务亚搏在线器ABC(## #.##.# .# .# .# .# .# .#)上的端口上检测到一个安全的许可证服务,并提供FME许可证。请确保fmelicensingassistant已配置为使用它(输入“ABC”或“ABC:##### #”作为服务器名),它有足够的许可证。

启动脚本是

lappend sysString $env(TEMP)/ TEMP .fme;lappend sysString{—RESOLVE_DOMAINS};lappend sysString {YES};lappend sysString {2>@1};eval exec $sysString;

任何想法吗?我正在积极地努力,希望能解决这个问题。

tcl 星期二,2017年10月17日格林尼治标准时间22:52:03 dfresh
启动过程中的全局变量初始化 https://knowledge.亚搏在线safe.com/idea/19777/global-variable-initialization-in-startup-process.html 添加一个用初始值定义全局变量的python/tcl函数,这样用户就可以调用启动python/tcl脚本中的函数。 工作台 可变电位器 tcl 可变检索器 坐,2015年11月7日10:35:43格林尼治标准时间 更新TclCaller参数 https://knowledge.亚搏在线safe.com/idea/19380/update-tclcaller-parameters.html
  1. 使“目标属性”参数可选:当前需要此参数,但有些情况下,用户定义的TCL脚本不会返回任何值。在这种情况下,目标属性名将是无用的。
  2. 添加“要隐藏的属性”和“要隐藏的列表”参数:脚本也会删除和/或重命名特性属性。如果有类似于蟒蛇的参数是很方便的,以便用户可以选择性地隐藏属性/列表名称。
变形金刚 脚本 tcl tclcaller 周一,2015年11月2日04:29:49格林尼治标准时间
电子邮件从FME桌面2015年 https://knowledge.亚搏在线safe.com/questions/5145/email-from-fme-desktop-2015.html 我正在寻找一种从FME桌面发送电子邮件的方法。
我读过这篇文章,但不能解决这个问题:
https://knowledge.亚搏在线safe.com/answersquestiondetail?ID=906A0000000Ckupaai

我使用了“TCLEmailer”和“PythonEmailer”,但是我得到了与上面文章相同的错误。
------
Python的例外 :服务器不支持SMTP AUTH扩展名。
调用函数“email”时遇到错误
PythonFactory无法处理特性
------

我禁用了防病毒软件,但没有任何改进。

我用Gmail发邮件,我知道Gmail的设置:
电子邮件服务器:smtp.gmail.com
Gmail SMTP端口(TLS):587
Gmail SMTP端口(SSL):465


请大家多多支持。
如果有人能从FME桌面上获得电子邮件的数据样本或演示,我会很高兴。
python 电子邮件 tcl 星期四,2015年10月22日05:57:32 GMT 作为
私有参数中的算术python/tcl https://knowledge.亚搏在线safe.com/questions/4684/arithmetic-pythontcl-in-private-parameters.html 你好,
我试着做一些我确信很基本但很困难的事情
我有一个公共参数(CellRes),它指的是输出速率器的单元分辨率,我试图用它来计算行/列的数量,基于最大区段(max_X/max_Y)。
我正在努力编写python或tcl——本质上我只是想做(max_x/celleres)?
它似乎只是将两个参数连接起来,而不是返回一个值
谢谢
艾德
python tcl 周五,2015年10月09日10:22:50 GMT edc
已发布参数在启动或关闭脚本中使用 https://knowledge.亚搏在线safe.com/articles/1256/published-parameter-use-within-a-startup-or-shutdo.html


示例1

例1:翻译一结束就会产生FTP结果

在某些情况下,将翻译的结果通过FTP传输到某个地方是很有用的。

这是一个FME_END_TCL脚本(我已经用它附加了一个工作空间),它就是这样做的——注意它利用了DestDataset宏(作为输出的位置发布在工作空间中)来查找用于ftp目的的输出文件:

包需要ftp

放置[数组名fme_macrovalues];

将“上载$fm_macrovalues(destdataset)”set server“某物。anotherthing.com“set user”accountnamegoesher“set passwd”passwordgoesher“set conn[::ftp::open$server$user$passwd]将“step 2”::ftp::cd$conn outgoing/servicesputs“step 3”::ftp::list$conn*puts“step 4”::ftp::put$conn$fm_macrovalues(destdataset)::ftp::close$conn puts”上传完成”

当然,在生产中,您需要包装各种::ftp::..“catch”es中的内容,以便您可以适当地标记错误。

示例2

示例2:将URL获取到属性中

对于你们中间的刮屏者,这一小段Tcl:

包需要httpput [http::geturl http://www.google.ca]
展示了如何获取URL并使用它的内容(这里我只是将它打印出来,但是,如果在@tcl中调用它,它可以很容易地进入一个属性中。我非常喜欢这个想法,我们把它包装成一个新的变压器“URLFetcher”,这是4300型FME的一部分。本文附带了一个示例(如果您想以另一种方式在映射文件或Tcl脚本中使用该技术,下面将粘贴底层映射文件代码)。

tcl2 proc urlfetcher_fetch url \ package需要http;\ FME_SetAttribute _url_contents {};\ if[catch fme setattribute url contents \[http::data[设置令牌$url]]\ errormsg \]\ \catch http::cleanup$token\ if {No == {Yes}} {\ FME_LogMessage fme_error \"Error retrieve URL ' $ URL ' in transformer URLFETCHER: $errorMsg\";\}else \错误\“在transformer urlfetcher中检索url`$url'时出错:$errormsg\”;\}\}else \放入$token;\ catch {http::cleanup $token};\}
FACTORY_DEF * TeeFactory \ FACTORY_NAME URLFETCHER \ INPUT FEATURE_TYPE CREATOR_CREATED_1 \ OUTPUT FEATURE_TYPE URLFETCHER_OUTPUT \ @Tcl2(“URLFETCHER_fetch {@Value(URL)}”)


您可以在以下位置阅读有关在TCL内部使用HTTP的更多信息:http://wiki.tcl.tk/1303。注意-我确实发现了一个问题,我们将记录为一个已知的问题是,如果有一个错误检索URL,似乎FME进程本身将暂停退出。

示例3

示例3:在注册表中检入设置

下面是一个示例,您可以检查注册表以查看ARCGIS的版本,大概是为了发出一些漂亮的错误信息??如果不是的话。
{HKEY_LOCAL_MACHINE\SOFTWARE\ESRI\ArcInfo\Desktop\8.0}设置值[registry get $path {RealVersion}]返回$value}设置ArcGISVersion [getArcGISVersion]

和往常一样,可能性是无限的。我想如果你喜欢的话,你可以把FME变成一个网络服务器,那就去玩吧!

亚搏在线 发表的参数 关闭脚本 启动脚本 tcl 星期四,2015年10月08日格林尼治时间19:15:56 danat亚搏在线safe
启动和关闭tcl脚本示例 https://knowledge.亚搏在线safe.com/articles/1198/startup-and-shutdown-tcl-script-examples.html

简单日志窗口消息

当放入工作区头文件或映射文件时,这些片段使用翻译开始/结束挂钩将翻译开始和结束时间写入标准输出(FME日志窗口)。

FME“开始”Tcl“设置GTTranslationStartTime[时钟格式[时钟秒]”FME“结束”Tcl“转换开始时间:$GTTranslationStartTime \转换结束时间:[时钟格式[时钟秒]”“

翻译状态测试

当放入工作区头文件或映射文件时,此后处理片段使用翻译结束挂钩和全局FME U状态变量输出翻译成功或失败消息。

请注意,它首先定义了一个将执行此测试和输出的过程,然后它调用这个过程来做这个工作。

fme_end_tcl proc finally \全局fme_状态;\如果{$FME_Status == "1"} {\ put \"翻译成功\";\}else \ puts \“翻译不成功\”;\};\};
同样的例子也可以不用程序编写:
fme_end_tcl if$fme_status==“1”\ puts\“翻译成功”\}else \ puts \“翻译不成功\”;\}

使用映射文件宏

这个例子展示了如何将映射文件使用的宏作为过程的参数传递到开始或结束脚本中。这可以用来移动,复制,电子邮件,备份或以其他方式发布/预处理目标数据集。在这个例子中,目标数据集在转换开始之前备份,以保存通常会被覆盖的任何现有输出文件。

当使用宏或已发布的参数时,通常最好使用全局变量$FME_MacroValues(),即文件删除$fm_宏值(destdataset)

映射文件片段为:
这个映射文件中用于设置目标# dataset目录的宏是DestDataset。在tcl脚本中的dwg_dataset“$(destdataset)”source,在翻译结束时运行。#脚本与此映射文件存储在同一目录中。fme_begin_tcl source$(fme_mf_dir_unix)/backup.tcl;备份$(DestDataset)


And the contents of the "backup.tcl" file are:
proc backup {filename}{如果{[file exists $filename]} {file copy -force $filename.bak}}

链接翻译

这个例子展示了如何使用FME_END_TCL将翻译链接在一起,基于特定翻译的结果。在这个例子中,如果原文翻译失败,然后将启动另一个fme会话。

注意,在Tcl文件中,2> NUL:将任何日志和错误消息路由到空设备,这实际上使他们被忽视。映射文件片段为:
#源代码在tcl脚本中运行,以完成此翻译。#脚本与此映射文件存储在同一目录中。fme_end_tcl source$(fme_mf_dir_unix)/tryanother.tcl

And the contents of the "tryAnother.tcl" file are:
set outputFile [open c:/temp/status.txt w+]       if { $FME_Status == "1" } {  puts $outputFile "Translation was successful"  } else {  puts $outputFile "Translation failed -- running alternate translation"  exec fme.exe alternateTranslation.fme 2> NUL:  }   close $outputFile

自定义FME日志文件-启动脚本

向日志文件写入自定义(用户定义)消息的情况会因启动或关闭阶段的不同而有所不同。

在启动脚本-因为FME已经打开了日志文件,多次打开它是很危险的——你应该简单地使用函数FME_LogMessage,例如:
FME_LogMessage fme_inform {hi dale inline}

对于Python用户,我们建议您使用pyfme来完成以下操作:
从pyfm import*log=fmelogfile()log.log(“howdy”)。

自定义FME日志文件-关机脚本

向日志文件写入自定义(用户定义)消息的情况会因启动或关闭阶段的不同而有所不同。

在关机脚本中——因为FME已经关闭了日志文件——函数FME_LogMessage将无法工作。因此,您应该使用FME_LogFileName来提取日志文件的名称,打开它,给它写信,例如:
FME_END_TCL设置outputFile[打开$FME_LogFileName a];\ put $outputFile {};\放$outputFile(在末尾写一些东西);\ put $outputFile {};\关闭$outputfile;

创建自定义日志文件-关机脚本

本例使用外部脚本在翻译结束时将一组完整的翻译统计信息输出到摘要文件。

映射文件片段为:
#设置一个映射文件ID,以便Tcl最终确定过程“知道”正在运行哪个映射文件,将“文件ID形状”映射到AutoCAD记录所有消息编号,以便我们以后只能提取我们感兴趣的那些。在翻译结束时运行的Tcl脚本中的LOG_MESSAGE_NUMBERS yes # Source。#脚本与此映射文件存储在同一目录中。$ (FME_MF_DIR_UNIX) / tclFinalization.tcl FME_END_TCL来源

“tclFinalization.tcl”文件的内容是:
#打开一个文件写的翻译数据集outputFile[打开c: / temp / stats_out.txt w +] #检查翻译状态和输出所需的消息如果{$ FME_Status = = " 1 "}{把$ outputFile“翻译是成功的”}其他{把$ outputFile“翻译失败”把美元outputFile“错误消息是:$ FME_FailureMessage "};在映射文件中使用MAPPING_FILE_ID设置唯一的映射文件标识符。Puts$outputfile“———————————————————————————————————————————————Puts$outputfile“Features read summary”Puts$outputfile“——————————————————————————————————————————————————————————————————————————————————————————————并输出每组formatSpec "%-65s: %12s" foreach featType [lsort [array names FME_FeaturesRead]] {put $outputFile [format $formatSpec $featType $FME_FeaturesRead($featType)]的# count;把美元outputFile”- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -“把美元outputFile”“把美元outputFile”- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -“把美元outputFile“功能写总结”把美元outputFile”- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -“#循环排序列出的功能类型,并输出每个feattype[lsort[数组名fme-featureswritten]输出$outputfile[格式$formatspec$feattype$fme-featureswritten($feattype)]输出$outputfile“”输出$outputfile”-------------------------------------------------------------------“输出$outputfile[格式$formatspec”到al features written“$fm_total features written”输入$outputfile[格式$formatspec”输入的总坐标“$fm_total coordinates]输入$outputfile”-------------------------------------------------------------------“输入$outputfile”在日志文件中查找任何警告行,并将它们的计数输出到# summary文件中。同时,检查是否有任何“意外的输入删除程序”统计行,并报告一个非零计数,如果有(当工作台生成的映射文件针对不同功能类型的输入数据集运行时,可能会发生这种情况),并找出系统状态日志消息(即246014)并复制在输出文件中设置日志文件存在[文件存在$fme_log文件名]设置警告0如果;$log文件存在;;$log文件存在;;设置日志文件[打开$fme_log文件名r]而;[获取$日志文件行]>=0;;如果;[regexp;警告;$行];;增加警告;elseif;[regexp;\123;; \\\;$Log文件存在;$log文件存在;$log文件;$log文件存在;$log文件存在------------------------------放入$outputfile$行放入$outputfile---放入$outputfile'elseif[regexp意外的输入移除器$line]set totalfeatures 0 set acceptedfeatures 0 set rejectedfeatures 0 set line[regsub ^.*意外的$line意外的D]catch scan$line“意外的输入删除程序(testforry):测试了%d个输入功能--%d个功能通过,%d个功能失败。“totalfeatures acceptedfeatures rejectedfeatures if$rejectedfeatures>0 puts$outputfile”----------------------------------------------------------------------------puts$outputfile[format$formatspec”具有意外功能类型的功能“$rejectedfeatures]puts$outputfile”-----------------------------————————————————“Puts$outputfile”“Close$logfile Puts$outputfile”——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————“—————————————————————————————————————————————————————————放入$outputfile”“并关闭文件——关闭$outputfile”

使用TclODBC的数据库日志文件

本例使用外部脚本使用TclODBC包将翻译活动的记录插入数据库。在这个例子中,创建一个Access数据库(如果必要的话),并为每个完成的翻译填充一行。


TclODBC

要在FME环境中使用TclODBC,遵循以下步骤:

  1. 有关tclodbc包的信息,请访问网址:http://wiki.tcl.tk/2151
  2. 从其中下载TclODBC包http://sourceforge.net/projects/tclodbc
  3. 解压缩的结果
  4. 编辑提供的setup.tcl以更改:if [string match *lib* $i] {to if [string match *lib* $i] {
  5. 在包含setup.tcl的目录中的命令提示符中,运行“fme setup.tcl”。这将在FME的tcl环境中安装TclODBC包。
  6. 确保任何需要tclodbc包的脚本都以以下开头:包需要tclodbc
映射文件片段为:
$ (FME_MF_DIR_UNIX) / recordTranslationODBC.tcl FME_END_TCL来源

“recordtranslationodc.tcl”文件的内容是:
#==============================================================recordtranslationdbc.tcl此脚本记录使用tclodbc包执行翻译的过程。这个例子包括创建# Access数据库和存储翻译结果的表。每次翻译运行都有一行插入到表中。注意,对于实际生产系统,“put”语句#将被删除。包需要tclodbc #==================================================================如果数据库不在,请创建它。如果#数据库是基于服务器的,我们不会这样做,但在这个例子中,我们只是使用access。如果![文件存在$db file]放置“创建数据库$db file”数据库配置配置$driver[列表“创建”“创建”“$db file\”常规“]其他放置“使用现有数据库$db file”t此数据库的源,并连接到它首先始终删除DSN(如果它已经存在)。如果我们使用ODBC连接到“真正的”数据库,然后我们假设DSN已经是有效的catch database configure remove dsn$driver“dsn=$dsn”database configure add dsn$driver[list”dsn=$dsn“”dbq=$dbfile“]database db$dsn如果要插入的表,请创建它如果[llength[db tables xlation\u results]]==0将“creating xlation\u results table in database$dbfile”db“create table xlation\u results(mappingfileid varchar(50),就不存在了,开始时间时间戳,结束时间戳,CPUTIME双,成功的CHAR (3),numFeatures integer)“else_puts”xlation_results table present in database$dbfile“譁现在我们可以插入行,#提交,如果$fme_status==0 set success no db“插入到XLation_结果(mappingfileid,开始时间,EndTime,CPUTIME成功,numFeatures)值(“$fm_mappingfileid”,\ {ts的FME_StartingTimeStamp美元\},\ {ts的FME_EndingTimeStamp美元\},$fme_cputime,时间,'成功',FME_TotalFeaturesWritten美元)“db数据库断开# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = #如果你是连接到服务器的数据库,您可能不会在最后删除ODBC DSN。但由于我们是基于文件的#,我们将删除它数据库配置remove_dsn $驱动器"DSN=$ DSN "

使用oratcl的数据库日志文件

本例使用外部脚本使用Oratcl包将翻译活动的记录插入Oracle数据库。

奥拉特尔

要在FME环境中使用Oratcl,遵循以下步骤:

  1. 在您的计算机上安装和配置Oracle客户端软件。验证是否可以使用sqlPlus访问数据库。
  2. 阅读并下载oratcl软件包,网址为http://oratcl.sourceforge.net
  3. 将结果解压缩到$fme_home/tcl_library/oratcl4.4(您必须创建此目录,4.4可能需要修改以匹配您下载的Oratcl版本)。
  4. 确保任何需要Oratcl包的脚本都以以下代码开始:套餐需要oratcl
请注意 ——Oratcl中的O必须是大写,这一点很重要


映射文件片段为:
$ (FME_MF_DIR_UNIX) / recordTranslationOracle.tcl FME_END_TCL来源

“recordtranslationoracle.tcl”文件的内容是:
#==============================================================recordtranslationoracle.tcl此脚本使用oratcl包记录翻译的执行。此示例包括创建用于存储翻译结果的XLation结果表。每次翻译运行都有一行插入到表中。软件包需要oratcl譁譁譁譁譁譁譁譁譁譁======================确定要记录结果的XLation结果表是否存在set table exists no set statementhandle[oraopen$loginhandle]orasql$statementhandle“select*from user_tables where table name='xlation_results'”while[orafetch$statementhandle-datavariable row]==0{set tableexists是如果需要,请创建xlation_结果表if$tableexists=“否”orasql$statementhandle“创建表xlation_结果(mappingfileid varchar(50),开始时间时间戳,结束时间戳,CpuTime浮动,XLationSuccessful字符(3),numFeatures integer)“如果$fme_status==0 set success no orasql$statementhandle”insert into xlation_results(mappingfileid,开始时间,EndTime,CPUTIMEXlationSuccessful,NumFeatures)值(“FME_MappingFileId美元”,时间戳“$fm_startingTimestamp”,时间戳FME_EndingTimeStamp美元,$fme_cputime,时间,'成功',$FME_TotalFeaturesWritten)" -commit  # =========================================================================  # Shut down the statement handle   oraclose $statementHandle  # =========================================================================  # Logout of our oracle service   oralogoff $loginHandle
亚搏在线 关闭脚本 启动脚本 tcl 星期四,2015年10月08日格林尼治时间19:15:46 danat亚搏在线safe
如何在运行翻译后退出(Windows OS) https://knowledge.亚搏在线safe.com/articles/924/how-to-log-out-after-running-a-translation-windows.html 有一些解决方案同时使用tcl或python,使用windows shutdown命令。

关闭TCL脚本:
如果{$FME_Status == "1"} {exec shutdown /l /f} else {puts \n\t[concat ==>翻译失败。< = =]\ n}

关闭python脚本:
导入操作系统

如果fme_status==true:os.system(“shutdown/l/f”),否则:print“\n\t==>翻译失败。< = = \ n”
python 脚本 关闭脚本 tcl 星期四,2015年10月8日19:14:55格林尼治标准时间 markat亚搏在线safe
启动和关闭python和tcl脚本 https://knowledge.亚搏在线safe.com/articles/813/startup-and-shutdown-python-and-tcl-scripts.html

启动和关闭脚本

在翻译之前和翻译之后控制FME的愿望已经讨论和争论了很多年。人们想在翻译开始前做不同的设置工作,以及在翻译结束后对日志文件或其他翻译构件的不同后处理。

最后这是可能的,以非常强大的方式处理前和后处理功能,提供在处理工作区之前和/或之后执行脚本的能力。脚本可以访问许多翻译工件(如counts,日志文件,等等)。

可能性是巨大的;一些示例应用程序包括:

  • 自定义日志记录(到文件或数据库)
  • 站点特定事件日志
  • 后处理重命名,移动或备份文件
  • 源和目标数据集的预处理测试

  • 有关python启动或关闭脚本的详细信息,请看在FME中启动Python脚本 关闭FME中的python脚本。


    当脚本运行

    启动脚本在映射文件完全解析之后执行,打开日志文件后,但在读者开始处理之前。关闭脚本在写入程序完成处理并关闭日志文件后执行(或者在翻译错误终止的情况下,清除后,日志文件关闭)。

    支持脚本语言

    启动和关闭脚本可以是tcl或python。

    FME内置Tcl解释器,因此不需要进一步安装。

    如果脚本包含过程定义,脚本必须调用它定义的过程,否则,将不会执行过程本身,也不会发生任何处理。

    脚本与工作区

    您可以在工作台中直接定义脚本导航窗格。Workbench甚至为编写脚本提供了一个特殊的编辑窗口。

    用户添加的图像

    以上: navigator窗格中的Tcl和Python脚本指令。

    用户添加的图像

    以上: Tcl end脚本指令设置对话框。单击突出显示的按钮打开脚本编辑器。

    用户添加的图像

    以上:脚本编辑器。

    带有FME对象的脚本

    关闭python脚本可以利用导入FmeObjects

    对于TCL脚本,没有访问FMEObjects的权限,但是您可以通过“exec”命令(TCL)启动新的进程,这些新的过程可能涉及到FME对象TCL而没有任何冲突。

    自定义格式的脚本

    启动和关闭脚本是在FDS(自定义格式)中有效。也有一些架构上的原因必须保持这种方式。

    他们可以,当然,在映射文件或工作区中使用,该文件或工作区本身使用自定义格式。

    发表的参数

    可以在启动或关闭脚本中访问已发布的参数。

    fme_宏值数组/dictionary保存这些(按宏名索引,值是实际值)-所以在Tcl中,你可以通过这样的行来获得它们:
    FME_END_TCL put[数组名FME_MacroValues];
    FME_BEGIN_TCL把美元FME_MacroValues (DestDataset);

    在Python中,你可以像访问其他字典一样访问它,例如,这样地:
    对于name,fme_macrovalues.iteritems()中的val:logger.log(“%s:%s”%(name,val))。

    所以,正如我祖父曾经说过的,我的许多发明,“这有什么好处?”嗯,爷爷,它有很多用途,这里有一些例子

    Tcl和python中提供的全局FME变量

    有关启动和关闭脚本中可用变量的完整列表,请参阅帮助:启动和关闭Python脚本启动和关闭TCL脚本

    从启动到关闭传递设置
    Tcl启动和关闭脚本共享一个Tcl解释器,这意味着启动脚本可以设置tcl全局变量,这些变量稍后将可用于关闭脚本。

    然而,该解释器完全独立于FME中使用的任何其他Tcl解释器;所以,例如,不能将@TCL和@Tcl2 FME函数的设置传递给关机脚本。

    启动脚本失败

    如果启动脚本失败并带有错误消息,那么FME将报告错误并停止工作区的执行。

    然而,您可以通过捕获发生的错误来阻止FME停止工作区执行。

    例如,如果您试图写入自定义日志文件,但要确保一个错误的发现这个文件不会停止整个过程,你可能会使用:
    if [catch {set outputFile [open c:/temp/logfile.log {RDWR CREAT EXCL}]}] {    puts stderr "ERROR - cannot open the log file."} else {    set gTranslationStartTime [clock format [clock seconds]]    puts $outputFile "Translation started: $gTranslationStartTime    close $outputFile}
    另一方面,为了有目的地停止翻译,即使脚本不会导致错误,然后你可以使用TCL的“错误”命令来迫使FME停止处理,例如:
    如果{[file exists $outputFilename]}{错误"输出文件已经存在-选择一个不同的目标文件名。"
    Python版本是:
    import-osif os.path.exists(output filename):引发异常(“输出文件已存在-请选择其他目标文件名。)

    链接翻译

    关闭脚本可以调用进一步的FME会话,前提是标准错误是直接从exec调用中消除的。例如:
    fme_end_tcl exec fme.exe anothertranslation.fmw 2>nul:

    实例

    可以提供一组全面的Tcl示例在这里找到

    python 脚本 tcl 星期四,2015年10月08日格林尼治时间19:14:37 brianat亚搏在线safe
    提取地理数据库编码的域定义 https://knowledge.亚搏在线safe.com/articles/800/extract-geodatabase-coded-domain-definitions.html

    看到这个文章对于从ESRI XML工作区文档提取域和子类型的最新方法

    本文适用于FME 2015及以上版本。如果您使用的是FME 2016或更新版本,请参阅本文的最新版本,加例子,在Geodatabase转换教程:

    使用地理数据库域:创建编码域



    下载


    FME将读取和解析地理数据库编码域,有些用户可能希望实际提取域表本身,在地理数据库中存储为blob。


    下面的工作区分两步完成:

    第一步是使用startup tcl脚本生成命令行fme generate命令,该命令创建从geodatabase到空的临时映射文件。

    第二步是使用文本行阅读器读取新的映射文件,将编码的域定义提取并解析到Excel电子表格中。


    另一种方法是使用ArcCatalog导出带有数据库模式的ESRI XML工作区文档。然后可以从生成的XML中提取域和子类型代码。


    在更现代的FME版本中,一个更简单的替代方法是使用FeatureReader转换器读取GDB模式。如果启用读取器参数Resolve域,域定义将以使用该域的任何属性的本机数据类型提供。



    数据库 geodatabase 地理信息系统 亚搏在线 启动脚本 tcl 星期四,2015年10月08日19:14:34格林尼治时间 daveat亚搏在线safe
    使用PyCharm作为FMEObjects Python IDE https://knowledge.亚搏在线safe.com/articles/726/use-pycharm-as-fmeobjects-python-ide.html

    介绍

    PyCharm 亚搏国际在线官网Community Edition是一个免费且易于使用的IDE,用于Python项目,可以设置它为FMEObjects提供自动完成功能。

    安装和配置

    下载并安装PyCharm Community editio亚搏国际在线官网nhttps://www.jetbrains.com/pycharm/download/

    python fmeobjects项目不能使用fme的内部python,因此,您可能需要从www.python.org安装完整版本的python。您还可以使用Arcgis安装的python。

    为FMEObjects配置:

    1. 开始PyCharm
    2. 文件-显示“创建项目”对话框的新项目
    3. 设置项目位置并选择所需的Python解释器。如果还想使用arcpy,请使用ArcGIS解释器。
    4. 文件-设置-打开设置对话框。点击项目,然后是项目翻译。用户添加的图像
  • 单击解释器旁边的链轮图标,然后选择“更多”以显示“项目解释程序”对话框用户添加的图像

  • 选择所需的解释程序,单击右边的filetree图标,弹出解释器路径对话框。用户添加的图像

  • 单击“+”图标,将以下路径添加到解释器路径(其中 为FME安装文件夹,也就是说。C: \ apps \ FME):
    • \ fmeobjects \ python27
    • \插件
    • python \
    • python \ \ python27
  • 单击OK关闭解释器路径对话框
  • 单击“确定”关闭“项目解释程序”对话框并返回“设置”对话框。如果“应用”按钮仍然是灰色的,切换到另一个项目解释器,点击“应用”,然后切换回来,再次单击“应用”。
  • 点击“应用”按钮保存设置,然后确定退出对话框。
  • 文件-使缓存失效/重新启动以更新设置。

  • 使用PyCharm

    • 打开上面创建的项目。
    • 添加FMEObjects引用:
    导入FmeObjects
    • Pycharm现在将自动完成fmeobjects方法

    用户添加的图像

    python tcl 星期四,2015年10月8日19:14:19格林尼治标准时间 daveat亚搏在线safe
    关于TCLCaller的使用说明 https://knowledge.亚搏在线safe.com/articles/134/usage-notes-on-the-tclccaller.html

    问题

    什么是TclCaller?

    回答

    TCLCaller

    TclCaller是一个工作台变压器。TCLCaller计算任意工具命令语言(Tcl) 8.4.9表达式,并将其返回值赋给属性。

    Tcl命令可以操作特性的几何形状和/或属性,使用tcl语言提供的任何内置tcl函数,以及FME提供的Tcl设施。参阅Tcl语言参考手册( http://www.tcl.tk/)有关功能的详细信息。

    常见的TCL用法包括:

    从属性中修剪空格:
    FME_SetAttribute trimmedAttribute [string trim [FME_GetAttribute originalAttribute]]
    用属性中的空格替换所有非数字字符:
    FME_SetAttribute anAttribute [regsub -all {[^0-9]] [FME_GetAttribute anAttribute] [}]
    注意,在这种情况下,返回值是实际进行的替换的数量。
    将正则表达式与属性匹配:
    $} [FME_GetAttribute anAttribute]
    此正则表达式测试属性的整个值是否仅由字母字符组成。注意,当匹配正则表达式时,如果表达式匹配,返回值为1,和0。
    将自定义消息记录到日志窗口:

    这是我的消息
    操作特征属性的推荐方法是通过以下功能:
    FME_GetAttribute attrName FME_SetAttribute attrName newVal FME_CopyAttribute destAttrName srcAttrName FME_RenameAttribute destAttrName srcAttrNameFME_UnsetAttributes attrName1 [attrName2 attrName3…]
    如果“Use FME_Attributes数组”参数选择“Yes”,然后访问一个名为FME_Attributes的数组,每个属性都可以用名称fme_attributes(attrname)来获取或设置。注意,这会显著降低执行时间。

    可以选择提供TCL源文件。在执行Tcl命令之前,将读取该文件。这可以用来引用保存在公共外部文件中的Tcl函数。

    注意:由于FME解析器的限制,Tcl表达式不能包含%字符。如果需要一个%字符,然后应该将表达式编码为Tcl过程,并将其放入一个外部文件中进行“源代码导入”。此外,请注意StringFormatter transformer提供了一种方便的方法来访问Tcl 'format'命令,从而避免了这种情况下的%字符问题。
    tcl tclcaller 星期四,2015年10月08日19:12:45 GMT MitaAt亚搏在线Safe