我目前只有一个列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
但我仍然收到错误。
UPDATE2
好的,这很好用:
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
非常感谢你们所有人;)
答案 0 :(得分:4)
不使用正则表达式的解决方案:
ary = ["firstname lastname", "firstname lastname"]
ary.map(&:split).map{|f, l| "#{f[0]}. #{l}" }
#=> ["f. lastname", "f. lastname"]
答案 1 :(得分: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
答案 2 :(得分:0)
我会这样做:
array = ["firstname lastname", "firstname lastname"]
array.map { |n| "#{n[0]}.#{n.split[1]}" }