如何将数组中的字符串拆分为两个?

3
我目前有一个单列CSV文件,格式如下:["firstname lastname", "firstname lastname", ...]
我想创建一个这样的CSV文件:["f.lastname", "f.lastname"...];其中f是名字的第一个字母。
你们有什么建议?
更新:
好吧,感谢大家,我觉得我离成功不远了,以下是我已经完成的部分:
  require 'csv'
  filename = CSV.read("mails.csv")
  mails = []
  CSV.foreach(filename) do |col|
   mails << filename.map { |n| n.sub(/\A(\w)\w* (\w+)\z/, '\1. \2') }
  end
  puts mails.to_s

但我仍然会遇到错误。

更新2

好的,这样就可以正常工作:

require 'csv'
mails = []
CSV.foreach('mails.csv', :headers => false) do |row|
  mails << row.map(&:split).map{|f,l| "#{f[0]}.#{l}@mail.com" }
end
File.open("mails_final.csv", 'w') {|f| f.puts mails }
puts mails.to_s 

非常感谢大家的支持和帮助;)

1
你得到了什么错误? - Alok Anand
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/csv.rb:1254:in `initialize': 数组无法隐式转换为字符串 (类型错误) - gilles
1
请提供正确的文本以进行翻译。 - Alok Anand
3个回答

4
一种不使用正则表达式的解决方案:
ary = ["firstname lastname", "firstname lastname"]
ary.map(&:split).map{|f, l| "#{f[0]}. #{l}" }
#=> ["f. lastname", "f. lastname"]

好的,它可以工作了,只有一个问题,例如如何删除f.和lastname之间的空格?更新:没事了,我设法解决了;)非常感谢。 - gilles

1
ary = ["firstname lastname", "firstname lastname"]
ary.map{|a| e=a.split(" "); e[0][0]+"."+e[1]}
#=> ["f.lastname", "f.lastname"]

您需要修改以下代码:--
CSV.foreach(filename) do |col|
  mails << filename.map { |n| n.sub(/\A(\w)\w* (\w+)\z/, '\1. \2') }
end

匹配以下类似的内容:--
CSV.foreach(path_to_csv_file/mails.csv, headers: true/false) do |row|
  # row is kind _of CSV::Row, do not use filename.map => causing error
  mails << row.to_hash.map { |n| n.sub(/\A(\w)\w* (\w+)\z/, '\1. \2') }
end

我得到了这个错误信息:test.rb:5:in block in <main>': undefined method to_hash' for ["Able Parris"]:Array (NoMethodError) - gilles

0
我会这样做:
array = ["firstname lastname", "firstname lastname"]
array.map { |n| "#{n[0]}.#{n.split[1]}" }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接