从Excel文件parsingstring的问题
我有Ruby代码来parsingExcel文件中的数据使用Parseexcelgem。 我需要在该文件中保存2列到哈希,这里是我的代码:
worksheet.each {| row | 如果row!= nil key = row.at(1).to_s.strip value = row.at(0).to_s.strip 如果!parts.has_key?(key)和key.length> 0 部分[键] =值 结束 结束 }
但是它仍然将重复键保存到散列“020098-10”中。 我检查了指定行的excel文件,发现区别是“020098-10”和“020098-10”。 第一个有领先的空间,第二个没有。 我不明白是否.stripfunction已经删除所有前导和尾随空白?
当我试图打印出key.length,它给了我这些奇怪的数字:
020098-10长度18 020098-10长度17
应该是9 ….
如果你将检查你收到的string,你可能会得到像这样的东西:
" \x000\x002\x000\x000\x009\x008\x00-\x001\x000\x00"
发生这种情况是因为string编码。 Excel使用unicode,而ruby默认使用ISO-8859-1。 编码在各种平台上会有所不同。
您需要将从Excel中收到的数据转换为可打印的编码。 但是,当你不应该编码在ruby创build的string,因为你会以垃圾结束。
考虑这个代码:
@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
您可能需要将编码更改为不同的编码。
较新的Spreadsheet-gem自动为您处理字符集转换,以UTF-8为标准,但您可以更改它,所以我build议您使用它。