关于属性分割的问题
原文发布时间:2015-01-05 09:26:32
作者:小张张
在群里潜伏了这么久,还是很有收获的,看着大神们飞出来的各种问题和答案,表示不明觉厉,自己也有过尝试,所以把一些比较完整的问题和答案整理了一下,给自己留个底,同时也跟大家分享一下,也上SAFE官网上搜罗了几个问题和答案,一起分享,本文主要是对于属性分割的问题进行了搜集与研究,不对之处,多多指教:
问题一:属性分割问题(SAFE问答)
在我的表里有一列名为Date的数据,数据的格式为“日期+时间”,如下所示:
在日期之间用“/”分割年、月、日,时间之间用“:”分割时、分、秒。
现在我需要把日期和时间分开,分别存放在Data和Time列下,期待解答。
最佳回答:使用AttributeSplitter转换器不会改变原始属性,分割的结果会存放在一个列表属性里:
_list{0}=’9/9/2009’
_list{1}=’21:23:31’
你可以使用AttributeRenamer转换器进行重命名,达到最终目的:
_list{0}=>Data
_list{1}=>Time
个人验证:
选择要分割的属性以及分隔符或者格式字符串,经过这一步之后,得到的结果为:
原始属性没有发生变化,分割后的属性是存放在_list{}里的,添加一个AttributeRenamer转换器,进行设置:
得到的结果如下图所示:
原始属性没有发生变化,分割后的属性是存放在_list{}里的,添加一个AttributeRenamer转换器,进行设置:
得到的结果如下图所示:
成功!
问题二:分别读取度分秒(技术交流群)
FME怎么把一个字段的度分秒分别读出来,108°20′35″,108°5′3″
如果是很规则的数据,我们可以使用AttributeSplitter转换器,直接以正则表达式提取子字串长度进行分割,如108°20′35″,100°10′05″等,我们可以以“4s3s3s”进行分割:
但是如果不规则的话,就不能那么用了。
可以使用StringSeacher转换器,输入正则表达式(正则表达式规则可参见帮助文档):^([0-9]+)[°]([0-9]+)[′]([0-9]+)
经过转换器,能得到下列结果:
这样就分解出来了,存储在_matched_parts{}中,如有必要,暴露_matched_parts{0},_matched_parts{1},_matched_parts{2},并分别映射到相应属性即可。
如对文章有疑问,可发送邮件至[email protected]讨论或提问。