Ruby阅读Excel在值中包含多余的[[“”]',如何删除它们?

问题描述

我有这个非常简单的Ruby代码

xlsx = Roo::Excelx.new($docs_dir + '/mytestsheet.xlsx')
xlsx.each do |str|
  send_keys_characters(str)
  step %[I wait for 2 sec]
end
end

,但输出返回[“”]之间的值,例如[“ xxxxxx”] [“ aaaaaaaaaaaaaaaaaaaa”] [“ bbbbbbbbbbbbbbbbbbbb”] [“ cccccccccccccccc”] 如何去除多余的[“”]并仅保留值?

解决方法

在这种情况下,我喜欢的一种方法是解构块参数。

本文提供了更广泛的Ruby解构概述: https://jsarbada.wordpress.com/2019/02/05/destructuring-with-ruby/

以您的示例为例:

您可以使用括号来告诉块,您期望将数组作为参数,并且您希望在该数组中使用元素,而不是数组本身:

irb(main):001:0> [ ['a'],['b'],['c'] ].each do |(char)|
irb(main):002:1*   puts char.inspect
irb(main):003:1> end
"a"
"b"
"c"
=> [["a"],["b"],["c"]]

注意正在打印的内容。这些是字符串。 |(char)|(而不是|char|)的解构语法使变量char被分配给数组的第一个元素,而不是数组本身。我相信这与您想要的类似。

您的代码更像是这样,没有破坏(注意|char_in_arr|内缺少括号):

irb(main):004:0> [ ['a'],['c'] ].each do |char_in_arr|
irb(main):005:1*   puts char_in_arr.inspect
irb(main):006:1> end
["a"]
["b"]
["c"]
=> [["a"],["c"]]

所以我建议您尝试以下代码,并查看它是否符合您的目的:

xlsx.each do |(str)|
  send_keys_characters(str)
  step %[I wait for 2 sec]
end

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...