我有下面的数组
Array ( [0] => abuse@peterstar.net [2] => hostmaster@peterstar.net [3] => noc@peterstar.net )
我需要将其转换为以下格式
:abuse@peterstar.net,hostmaster@peterstar.net,noc@peterstar.net
我知道这在php中很容易,如下所示
file_put_contents($file, ":".implode(",", $emails)."\n", FILE_APPEND | LOCK_EX);
但是我如何在ruby中这样做?
提前致谢。
答案 0 :(得分:2)
检查 File 类。
File.open(yourfile, 'w') { |file| file.write(":#{your_array.join(',')}") }
如果要将文本附加到文件,则需要以“追加”模式打开文件。
File.open(yourfile, 'a') { |file| file.write(":#{your_array.join(',')}") }
答案 1 :(得分:0)
我建议以更常见的格式存储数据,例如YAML。
array = ['foo', 'bar', 'baz']
# write file
File.open('filename.yml', 'w') { |f| YAML.dump(array, f) }
# read file
array = File.open('filename.yaml') { |f| YAML::load(f) }
答案 2 :(得分:0)
如果问题是如何转换字符串:
str = "Array ( {[0] => abuse@peterstar.net}, {[2] => hostmaster@peterstar.net},\
{[3] => noc@peterstar.net} )"
到字符串:
":abuse@peterstar.net,hostmaster@peterstar.net,noc@peterstar.net"
需要正则表达式:
':' + str.scan(/(?:=> )([^}]*)/).join(',')
:
和.join(',')
的需求应该是显而易见的。让我们看看产生
str.scan(/.*?(?:=> )([^}]*)/)
# => [["abuse@peterstar.net"], ["hostmaster@peterstar.net"], ["noc@peterstar.net"]]
我不是正则表达式专家,所以欢迎任何改进或改进建议。
(?:=> )
是一个“非捕获”组(因为?:
),它会查找"=> "
。([^}]*)
是一个捕获组,它接受所有字符,直到遇到"}"
。 答案 3 :(得分:0)
implode
的红宝石等价物为join
。字符串上.
运算符的ruby等价物为+
。 ruby相当于写入文件:
File.open(yourfile, 'w') do |file|
file.write ':' + yourarray.join(',') + "\n"
end