gpt4 book ai didi

ruby - 从excel文件解析字符串的问题

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:07 25 4
gpt4 key购买 nike

我有 ruby​​ 代码来使用 Parseexcel gem 解析 excel 文件中的数据。我需要将该文件中的 2 列保存到哈希中,这是我的代码:

worksheet.each { |row|  if row != nil    key = row.at(1).to_s.strip    value = row.at(0).to_s.strip    if !parts.has_key?(key) and key.length > 0      parts[key] = value    end  end}

但是它仍然将重复的键保存到散列中:“020098-10”。我检查了指定行的excel文件,发现区别是“020098-10”和“020098-10”。第一个有前导空格,而第二个没有。我不明白 .strip 函数是否已经删除了所有前导和尾随空格?

同样,当我尝试打印出 key.length 时,它给了我这些奇怪的数字:

020098-10 length 18020098-10 length 17

应该是 9....

最佳答案

如果您检查收到的字符串,您可能会得到如下内容:

" \x000\x002\x000\x000\x009\x008\x00-\x001\x000\x00"

发生这种情况是因为字符串编码。 Excel 使用 unicode,而 ruby​​ 默认使用 ISO-8859-1。编码在各种平台上会有所不同。

您需要将从 excel 接收的数据转换为可打印的编码。但是,当您不应该对在 ruby​​ 中创建的字符串进行编码时,因为您将以垃圾结尾。

考虑这段代码:

@enc = Encoding::Converter.new("UTF-16LE", "UTF-8")

def convert(cell)
if cell.numeric
cell.value
else
@enc.convert(cell.value).strip
end
end

parts = {}
worksheet.each do |row|
continue unless row

key = convert row.at(1)
value = convert row.at(0)

parts[key] = value unless parts.has_key?(key) or key.empty?
end

您可能需要将编码更改为不同的编码。

关于ruby - 从excel文件解析字符串的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2831141/

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