如何在Ruby中将数组写入文件

时间:2014-01-03 03:36:58

标签: php ruby arrays file-io

我有下面的数组

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中这样做?

提前致谢。

4 个答案:

答案 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