gpt4 book ai didi

ruby - CSV 仅返回字符串。我需要保留值类型

转载 作者:行者123 更新时间:2023-12-02 17:33:00 29 4
gpt4 key购买 nike

我正在尝试解析 CSV 文件并抓取每一行并将其上传到 Postgres。问题是 CSV.foreach 将每个值作为字符串返回,而 Postgres 不接受双列中的字符串值。

有没有一种简单的方法来保留值类型?或者我是否必须逐列将字符串转换为 double 和日期格式?

require 'csv'
CSV.foreach("C:\\test\\file.csv") do |row|
print row
end

我所需要的只是保持其类型的值,而不是作为字符串返回。我不知道 CSV 是否可行。我在使用电子表格 gem 解析 .xls 文件时工作正常。

最佳答案

CSV 本身没有类型; CSV 包含简单的逗号分隔文本。当您查看 CSV 文件时,您会看到该文件的所有内容。在 Excel 文件中,有很多隐藏的元数据可以跟踪每个单元格的类型。

当您通过 CSV #foreach 时,每一行都以字符串值数组的形式给出。一行可能看起来像

[ "2.33", "4", "Hello" ]

每个值都以字符串形式给出。您可能会将“2.33”视为 float / double ,但 CSV 解析器只知道将其视为字符串。

您可以使用 Ruby 的类型转换函数将字符串转换为其他类型,假设每一列只包含一种类型(因为您使用的是 SQL 数据库,这是一个非常安全的假设)。

您可以编写类似这样的代码,将每行中的值转换为特定类型。此示例将第一行转换为 float (应该与 Postgres 的 double 一起使用),将第二行转换为整数,将第三行转换为字符串。

require 'csv'
CSV.foreach("C:\\test\\file.csv") do |row|
puts [ row[0].to_f, row[1].to_i, row[2].to_s ]
end

给定上面的示例行,此函数将打印如下数组

>> [ 2.33, 4, "Hello" ]

您应该能够在使用 Postgres 进行的任何其他操作中使用这些转换后的值。

关于ruby - CSV 仅返回字符串。我需要保留值类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30538152/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com