请原谅我,我对Ruby非常陌生,而且对于一般的编程来说相对较新。我的问题可能并不难,但我一直用谷歌搜索,直到我的手指流血寻找解决方案而我无法得到它。
我有一行文字如下:
6 19 11 28 22 localhost G6UI ip0 cameraLink cameraLinkMissingScans 15116
毕竟说完了,我希望它看起来像这样:
6.19.2014,11.28.22,localhost,G6UI,ip0,cameraLink cameraLinkMissingScans 15116
我已经在Bash中完成了这个(我基本上只是创建一个CSV文件,时间和日期按照我想要的方式格式化)但是,由于理由冗长而无法解释,我喜欢用Ruby做。
我有一个开始,虽然它可能有点悲伤:
myLineOfText.sub!(/[^-a-zA-Z0-9]/,'\1.\2.')
这给了我这个:
6..19 11 28 22 localhost G6UI ip0 cameraLink cameraLinkMissingScans 15116
非常感谢任何帮助,我只需要一些东西让我开始。
提前致谢。
答案 0 :(得分:1)
如果您可以确定格式始终保持不变,则可以执行以下操作:
str.sub!(/(\d+) (\d+) (\d+)/,'\1.\2.\3').gsub!(/ /,',')
示例:
str='6 19 11 28 22 localhost G6UI ip0 cameraLink cameraLinkMissingScans 15116'
str.sub!(/(\d+) (\d+) (\d+)/,'\1.\2.\3').gsub!(/ /,',')
puts str
=> "6.19.11,28,22,localhost,G6UI,ip0,cameraLink,cameraLinkMissingScans,15116"
答案 1 :(得分:0)
对于这样的问题,答案取决于固定的内容和数据格式的变量。我假设:
dd.mm.2014
我认为正则表达式不适合格式化;而只是在空格上分割字符串并使用一系列String#join
来形成新字符串,以明显的方式组合生成的子字符串:
s = "6 19 11 28 22 localhost G6UI ip0 cameraLink cameraLinkMissingScans 15116"
a = s.split(' ')
#=> ["6", "19", "11", "28", "22", "localhost", "G6UI", "ip0", "cameraLink",
# "cameraLinkMissingScans", "15116"]
a[0]+'.'+a[1]+'.2014,'+a[2..4].join('.')+','+a[5..7].join(',')+','+
a[8..-1].join(' ')
#=> "6.19.2014,11.28.22,localhost,G6UI,ip0,cameraLink cameraLinkMissingScans 15116"