第8页
第4排
FME“开始”Tcl“设置GTTranslationStartTime[时钟格式[时钟秒]”FME“结束”Tcl“转换开始时间:$GTTranslationStartTime \转换结束时间:[时钟格式[时钟秒]”“
fme_end_tcl proc finally \全局fme_状态;\如果$FME_status==“1”\输入\“翻译成功”\}else \ puts \“翻译不成功\”;\}(二)\}(二)同样的例子也可以不用程序编写:
fme_end_tcl if$fme_status==“1”\ puts\“翻译成功”\}else \ puts \“翻译不成功\”;\}
#此映射文件中用于设置目标数据集目录的宏是destDataset。在tcl脚本中的dwg_dataset“$(destdataset)”source,在翻译结束时运行。#脚本与此映射文件存储在同一目录中。fme_begin_tcl source$(fme_mf_dir_unix)/backup.tcl;备份$(DestDataset)
proc backup文件名如果[文件存在$filename]文件复制-强制$filename$filename.bak
#源代码在tcl脚本中运行,以完成此翻译。#脚本与此映射文件存储在同一目录中。fme_end_tcl source$(fme_mf_dir_unix)/tryanother.tcl
设置outputfile[open c:/temp/status.txt w+]如果$fme_status==“1”puts$outputfile“translation was successful”否则puts$outputfile“translation failed--running alternate translation”exec fme.exe alternatetranslation.fme 2>nul:关闭$outputfile
FME_Logmessage FME_Information_Hi Dale Inline_
从pyfm import*log=fmelogfile()log.log(“howdy”)。
fme_end_tcl set outputfile[打开$fme_logfilename a];\放入$outputfile_\将$outputfile放在末尾写一些东西\放入$outputfile_\关闭$outputfile;
#设置一个映射文件ID,以便Tcl最终确定过程“知道”正在运行哪个映射文件,将“文件ID形状”映射到AutoCAD记录所有消息编号,以便我们以后只能提取我们感兴趣的那些。在tcl脚本中记录消息编号是的源代码,以便在翻译结束时运行。#脚本与此映射文件存储在同一目录中。fme_end_tcl source$(fme_mf_dir_unix)/tcl完成.tcl
#打开一个文件,写出翻译统计设置输出文件[open c:/temp/stats_out.txt w+]检查翻译状态,如果$fme_status==“1”输入$output file“翻译成功”否则输入$outputfile“translation failed“puts$outputfile”错误消息为:$fme_failuremessage“”;将$output file“”输出映射文件中设置的唯一映射文件标识符,使用mapping_file_id将$fme_mappingfileid的$outputfile“翻译摘要”输出每个功能类型读取/写入的功能数。Puts$outputfile“—————————————————————————————————————————————Puts$outputfile“Features read summary”Puts$outputfile“————————————————————————————————————————————————————————————————————————————————————————————在被读取时,并输出每一组格式规范“%-65s:%12s”的for each feattype[lsort[数组名fme-featuresread]]puts$outputfile[格式$formatspec$feattype$fme-featuresread($feattype)]puts$outputfile”------------------------------------------------------------------“Puts$outputfile[格式化$formatspec”读取的总功能“$fm_total features read”;放入$outputfile“------------------------------------------------------------------------------------------------”放入$outputfile“放入$outputfile”功能写入摘要“放入$outputfile”---——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————并输出每个for each featuretype[lsort[数组名fme_featureswritten]放入$outputfile[格式$formatspec$featuretype$fme_featureswritten($featuretype)]放入$outputfile“”放入$outputfile”-----------------------------------------------------------------------------------“Puts$outputfile[format$formatspec”total features written“$fm_totalfeatureswritten]Puts$outputfile[format$formatspec”total coordinates written“$fm_totalcoordinates]Puts$outputfile”--------------------------------------------------------------------------------------------------------------------------“Puts$outt文件“在日志文件中查找任何警告行,并将它们的计数输出到摘要文件。也,检查是否有任何“意外的输入移除器”统计行,并报告一个非零计数,如果有(当工作台生成的映射文件针对具有不同于预期功能类型的输入数据集运行时,可能会发生这种情况),同时找出系统状态US日志消息(即246014)并将其复制到输出文件集合log file exists[文件存在$fm _logfilename]如果$logfileexists设置log file[打开$fm _logfilename r]而[获取$logfile line]>=0如果[regexp warn$line]incr warnings elseif[regexp 246014$line]puts$outputfile”------------------------------------------------------------------------------------“puts$outputfile$line puts$outputfile”------------------------------------------------------“puts$outputfile”“elseif[regexp unexpected input remover$line]set totalfeatures 0 set acceptedfeatures 0 set rejectedfeatures 0 set line[regsub ^.*unexpected$line unexpected]catch scan$line“unexpected input remover(testfactory):测试了%d个输入功能--通过了%d个功能,%d个功能失败。“totalfeatures acceptedfeatures rejectedfeatures if$rejectedfeatures>0 puts$outputfile”-------------------------------------------------------------------------------“puts$outputfile[format$formatspec”features with unexpected feature types“$rejectedfeatures]放入$outputfile“—————————————————————————————————————”放入$outputfile“———”关闭$logfile“—”放入$outputfile“———————————————————————————————————————————”放入$outputfile[格式$formatspec”logf文件$fme_logfilename warnings“$warnings]放入$outputfile”------------------------------------------------------------------------------------“放入$outputfile”“放入$outputfile”----------------------------------------------------------------“放入$outputfile[格式化$formats”pec“总运行时间(秒)”$fme elapsed time]放入$outputfile[格式$formatspec“总CPU时间(秒)”$fme-cputime]放入$outputfile”----------------------------------------------------------放入$outputfile“”并关闭文件close$outputfile
此示例使用外部脚本使用tclodbc包将翻译活动的记录插入数据库。在这个例子中,将创建一个Access数据库(如有必要),并为完成的每个转换填充一行。
tclODBC
要在FME环境中使用tclodbc,遵循以下步骤:
fme_end_tcl source$(fme_mf_dir_unix)/recordtranslationodc.tcl
#==============================================================recordtranslationdbc.tcl此脚本记录使用tclodbc包执行翻译的过程。此示例包括创建用于存储翻译结果的访问数据库和表。#在表中插入每个翻译运行的一行。#请注意,对于Acutal生产系统,“Puts”语句将被删除。软件包需要tclodbc譁设置一些变量,这些变量在中用于通过odbc set driver“Microsoft Access driver(*.mdb)”set dbfile c:/tran创建并连接到数据库。slations.mdb set dsn xlation譁譁如果数据库尚未存在,则创建该数据库。如果数据库是基于服务器的,但在这个例子中,我们只是使用access。如果![文件存在$db file]放置“创建数据库$dbfile”数据库配置配置\u dsn$driver[列表“创建数据库=\”$dbfile\“常规”]其他放置“使用现有数据库$dbfile”============================为此数据库创建一个ODBC数据源,并连接到它如果DSN已经存在,请始终先删除它。如果我们使用ODBC连接到“真实”的数据库,然后我们假设DSN已经是有效的catch database configure remove$driver“dsn=$dsn”database configure add$driver[list”dsn=$dsn“”dbq=$dbfile“]database db$dsn==如果[长度[db tables xlation_results]]==0将“创建xlation_results table in database$dbfile“db”创建table xlation_results(mappingfileid varchar(50),则创建要插入的表,如果它不在其中,开始时间时间戳,结束时间戳,cputime双精度,成功字符(3)numFeatures integer)“else_puts”xlation_results table present in database$dbfile“譁现在我们可以插入行,#承诺吧,如果$fme_status==0 set success no db“插入到XLation_结果(mappingfileid,开始时间,结束时间,CPU时间,成功,numFeatures)值(“$fm_mappingfileid”,\ ts'$fm_startingTimestamp',\ ts'$fme_endingTimestamp',$fme_cputime,时间,'成功',$fme_totalfeatureswritten)“db commit db disconnect如果连接到基于服务器的数据库,您可能不会在末尾删除ODBC DSN。但由于我们是基于文件的,我们将删除它数据库配置删除驱动程序dsn=dsn
此示例使用外部脚本使用oratcl包将翻译活动的记录插入到Oracle数据库中。
奥拉科
在FME环境中使用oratcl,遵循以下步骤:
fme_end_tcl source$(fme_mf_dir_unix)/recordtranslationoracle.tcl
#==============================================================recordtranslationoracle.tcl此脚本使用oratcl包记录翻译的执行。此示例包括创建用于存储翻译结果的XLation结果表。#在表中插入每个翻译运行的一行。软件包需要oratcl览览览览览=========================================================览登录到Oracle服务集username scott set password tiger set service amidala set loginhandle[oralogon$username/$#==============================================================确定要记录结果的XLation结果表是否存在set table exists no set statementhandle[oraopen$loginhandle]orasql$statementhandle“select*from user_tables where tatable[orafetch$statementhandle-datavariable row]==0 set tableexists yesexists==“否”orasql$statementhandle“创建表XLation”结果(mappingfileid varchar(50),开始时间时间戳,结束时间戳,cputime浮点,XLationSuccessful字符(3),numFeatures integer)“如果$fme_status==0 set success no orasql$statementhandle”insert into xlation_result,则将转换结果插入表集success yes。S(映射文件ID,开始时间,结束时间,CPU时间,X定位成功,numFeatures)值(“$fm_mappingfileid”,时间戳“$fm_startingTimeStamp”,时间戳“$fm”结束时间戳“,$fme_cputime,时间,'成功',$fme_totalfeaturesWriten)“-提交譁譁譁譁譁譁譁譁譁譁譁譁譁譁譁譁譁金把手
?2019安全亚搏在线软件公司|法律