我正在尝试从文本文件逐行解析/组织字符串列表到Ruby中的数组。我希望我解释得对。
example.txt中
exampleuser:examplepassword
myusername:mypassword
askfjwaeir:dcqw38974q238ifj
我想如何在Ruby中存储example.txt -
$username = [ "exampleuser",
"myusername",
"askfjwaeir"
]
$password = [ "examplepassword",
"mypassword",
"dcqw38974q238ifj"
我一直在寻找几个小时,但似乎找不到我正在寻找的东西。我知道.strip,.split,从分号中切断,但我似乎无法做我在这里描述的内容。
答案 0 :(得分:0)
username, password = File.readlines('example.txt')
.map { |s| s.chomp.split(':') }
.transpose
为什么你首先会有这样的演示?哈希将用户名作为键,密码作为值更具可读性:
users = File.readlines('example.txt')
.map { |s| s.chomp.split(':') }
.to_h
#⇒ {
# "exampleuser" => "examplepassword",
# "myusername" => "mypassword",
# "askfjwaeir" => "dcqw38974q238ifj"
# }
此外,在任何情况下都不应使用全局变量。
答案 1 :(得分:0)
处理您提出的问题的一种方法是在自动关闭IO#each_line块中使用File#open。然后,您可以使用String#split解构每一行,然后将结果附加到存储阵列。例如:
s1.SetCustomProperty("someAttribute", "someValue");
上面的示例回答了您提出的问题,但它可能是X / Y问题的解决方案,因为您现在缺少用户名和密码之间的映射。你可以在两个数组之间进行索引,但这真的很麻烦。你真正想要的是像Hash一样的键/值数据结构。
根据前一个示例的输出,您可以使用Array#zip和Array#to_h将数组数据转换为更有用的数据。例如:
# Create arrays outside the File block, which acts as a scope gate.
usernames = []
passwords = []
# Open your file, and split your lines. This solution avoids having to read
# all of example.txt in at once, which may matter on larger files.
File.open('example.txt') do |file|
file.each_line do |line|
user, pass = line.chomp.split ':'
usernames << user
passwords << pass
end
end
usernames
#=> ["exampleuser", "myusername", "askfjwaeir"]
passwords
#=> ["examplepassword", "mypassword", "dcqw38974q238ifj"]
也许您有一个特定的用例,但一般情况下,您应该根据计划访问数据的方式选择数据结构。在大多数情况下,键/值对应该是Hash,Struct或OpenStruct,因为它们针对查找键进行了优化。您的里程可能会有所不同。