Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在单个CSV.new()行中创建一个新的Ruby CSV对象,其标题为_Ruby_Csv - Fatal编程技术网

在单个CSV.new()行中创建一个新的Ruby CSV对象,其标题为

在单个CSV.new()行中创建一个新的Ruby CSV对象,其标题为,ruby,csv,Ruby,Csv,我正在尝试创建一个新的CSV对象,其中只包含标题行,但在调用read()之前,不会设置标题: [32]pry(main)>c=CSV.new(“关键字、索引、页面、页面索引、类型、标题、URL”,:headers=>:第一行,:write\u headers=>true,:return\u headers=>true) =>正如将告诉您的,它将字符串视为文件的内容(即StringIO),因此您仍然必须像读取任何其他IO源一样读取字符串 如果要显式设置标头,请将数组作为:headers参数传递。似

我正在尝试创建一个新的CSV对象,其中只包含标题行,但在调用
read()
之前,不会设置标题:

[32]pry(main)>c=CSV.new(“关键字、索引、页面、页面索引、类型、标题、URL”,:headers=>:第一行,:write\u headers=>true,:return\u headers=>true)
=>正如将告诉您的,它将字符串视为文件的内容(即StringIO),因此您仍然必须像读取任何其他IO源一样读取字符串


如果要显式设置标头,请将数组作为
:headers
参数传递。

似乎没有一种方法可以在一次调用中完成此操作,但您可以使用自己的自定义方法轻松解决此问题:

鉴于:

def new_csv(headers, data)
  csv = CSV.new(data, headers: headers, write_headers: true, return_headers: true)
  csv.read
  csv
end
您可以将其用作:

csv = new_csv("Header 1, Header 2", "abc,def") 
=> <#CSV io_type:StringIO encoding:UTF-8 lineno:1 col_sep:"," row_sep:"\n" quote_char:"\"" headers:["abc", "def"]>

csv.headers
=> ["Header 1", "Header 2"]
csv=new_csv(“标题1,标题2”,“abc,定义”)

=>谢谢!但问题依然存在:
[49]pry(main)>c=CSV.new(nil,:headers=>[“关键字”、“索引”、“页面”、“页面索引”、“类型”、“标题”、“URL”],:write_headers=>true,:return_headers=>true)=>这就是它的工作方式。无论传递什么,文件还是字符串,都必须
read()
。也许你想要的是谢谢你澄清“字符串作为文件”的事情,肖恩。正如@the Tin Man所指出的:headers的酷用法。尽管在调用c=CSV.new(nil,:headers=>['col1','col2'])后-c.headers被设置为true,但这仍然不能解决问题。奇怪的是,在这种情况下,只有在发出c.read(即使它在NilObject上失败!)之后,c.headers才突然被正确设置。你是对的-parse()一行就解决了这个问题。谢谢谢谢我希望有一个更简单的(一行)解决方案存在,但唉。
csv = new_csv("Header 1, Header 2", "abc,def") 
=> <#CSV io_type:StringIO encoding:UTF-8 lineno:1 col_sep:"," row_sep:"\n" quote_char:"\"" headers:["abc", "def"]>

csv.headers
=> ["Header 1", "Header 2"]