span8
斯潘4
可以,我想我们在这个问题上找错了对象,很抱歉。
说清楚,你在一个AttributeCreator中,并生成条件值,它必须是数字条件值。你选择了算术编辑器。你也可以在里面创建一个条件值,使用?:语法。
Takashi 100%正确,我们的算术编辑器文档参考了C手册,这不是我们应该做的。我们正在使用tcl的expr来评估所述表达式。所以我们应该更新我们的文档,而不是参考TCL ExPR对于运算符定义。我们将为此更新提交一份公关。
也就是说,自动引用是一个有趣的问题。因为FME不是强类型环境,一般来说,当我们访问一个属性的值时,我们不知道会得到什么。缺乏有力的打字是FME的一部分力量,因为它支持这样的灵活性。
但这种灵活性和力量是有代价的,就是这样,对于这种更复杂的情况,引用负担由工作区作者承担。我们的工作,我们正在努力做得更好,就是提供最好的文档来指导这样的作者,让他们知道如何解析和解释事情。
简而言之——我不知道我们如何能够安全地在Value()调用周围注入{},亚搏在线但我会问团队。老是这样做有什么害处吗?这就是我们要计算的)。
我现在必须赶去面试一位额外的技术作家,以便我们的团队帮助我们更好地了解FME中这些黑暗角落的来龙去脉。(是的,我是认真的!)
谢谢你指出这一点@gio.
山谷
你好,不,我不是指那个。
我指的是分析错误。
在tcl中,使用变量字符串作为操作数可能会导致reg解析错误,最常见的,当字符串中有特殊字符时。使用双qoutes可以解决问题,除非字符串中有某些字符。(所以此时,您仍然可以在regexp中使用的属性中使用regexp…)使用大括号告诉reg引擎将内部的所有内容都用作字符串。
上述逻辑查询,现在失败了,除非强制它将变量的内容视为字符串,也就是说,使用括号。(在2015年fme2015之前,这是可以不带括号的)
如果在上面的表达式@value(zone)=a中,表达式将生成一个表达式字符串,以a==a等开头。没有大括号,第一个A不被认为是字符串,:结果错误无效。分析错误。
下面是一个错误日志示例。
attributeCreator_2:无法计算算术表达式'(b2==a(b2=b1&&&fas3=fase1))?300∶200’
AttributeCreator_2: TCL错误消息:
无效的bareword“B2”
在表达式“(b2=a(b2=b1&&&…”
应该是“$b2”或“b2”或“b2(…)”或…
attributeCreator_2:未能评估函数'(b2==a(b2==b1&&fase3==fase1))?300∶200’
未能评估数值表达式“(B2 = ={一}| | ({B2} = = {B1} & & {FASE3} = = {FASE1})) ? 300:200”。结果设置为空。
…我删除了第一个操作数上的大括号以强制执行上述错误。
如您所见,括号中包含的所有变量(操作数)都不会产生此错误。
这与再生引擎的口味无关。
FME应该知道变量的内容是一个字符串,所以不需要像这样把变量名括起来{值(区))}或者“@value(zone)”…我想是这样。
不同的再生引擎更多的是一个婚姻,而不是一个真正的问题。解析错误是一个更严重的问题。
@Takashi:“=”不是数学运算符,它是一个逻辑运算符。
为什么这是最好的答案??我困惑…。)
==运算符属于“FME数学运算符”,一些程序语言通常把它当作比较(或关系)操作符。但是操作符的分类不是问题。
尽管FME和C对运算符的定义明显不同,文件上写着“见C手册……”。这就是问题所在。
嗨海门口,也许你所指的事实是,FME在不同的地方使用不同的regex引擎。巩固这些是发展计划。我们会通知你,工作完成后。
您好!@ XiaomengA亚搏在线tSafe,我想知道为什么有些数学运算符。==)用于非数字操作数。
“有关每个操作员生成的结果的更多详细信息,请参阅C手册。”——关于数学操作员的FME文档
据我所知,C数学运算符从不适用于非数字操作数。我总是觉得奇怪。这也可能是文件和FME实际行为之间的不一致。
?2019安全亚搏在线软件公司|合法的