我的目标是读取一个txt.file,并将内容拆分为一个数组。不过,我对split命令有意见。
我的文本文件内容是
阿科斯塔,1,3,0,0,0
阿梅斯库亚,2,1,2,0,2
阿瓦洛斯,0,1,1,0,0
我的密码是这个

file = open("score2.txt", "r")

file.each do |line|
  array = line.split(",")
  print array
end

但是我的powershell返回这个
["Acosta", "1", "3", "0", "0", "0\n"]["Amezcua", "2", "1", "2", "0", "2\n"]["Avalos", "0", "1", "1", "0", "0\n"]["\n"]

我对从powershell输出得到的结果感到困惑首先,我的txt只包含三行,为什么powershell打印出4个数组而不是3个?。其次,为什么每个最后一个数组的元素都包含\n,我不希望这样。第三,如果我用puts替换print,我就不会在数组的每个最后元素上都有问题;为什么会这样?
要添加,我将解释为什么要从数组的最后一个元素中删除txt文档中的数字表示个人在锦标赛中的排名,例如Acosta,1,3,0,0,0意味着Acosta在第一场比赛中得了第一名,在第二场比赛中得了第三名,在剩余的比赛中没有排名因此,我想分配一个分数系统,根据放置每个个人得分,最后打印出每个人的总分。
因此我使用了一个ifelsif序列来分配分数如下
 file = open("score2.txt", "r")

 file.each do |line|
    array = line.split(",")
  name = array.shift
  score = 0
  array.each do |placing|
    if placing == "1"
      score += 6
    elsif placing == "2"
      score += 4
    elsif placing == "3"
      score += 2
    else
      score = score
    end
  end
  print "#{name}: #{score} "
end

但是由于在数组的最后一个元素中,我无法为锦标赛的最后一场比赛分配点数因此,我想从数组的最后一个元素中删除。
这个练习来自http://www.evc-cit.info/cit020/beginning-programming/chp_05/exercises2.html
有人能开导我吗?谢谢你

最佳答案

\n表示一个新行字符。
你的文本文件在最后有一个新的(空行),所以它实际上有4行。
返回语句中最后一个\n数组表示
在文本文件的末尾空白新行。
每个数组中的最后一个元素都有一个\n字符,因为每个数组表示文本文件中的每一行每行后面跟着一个新行(由\n字符表示)。
在ruby中,puts在每个参数的末尾添加新行,而print使用\n表示新行。
如果要从输出中删除\n,可以这样简化代码:

open("score2.txt", "r")

file.each do |line|
  print line.split
end

如果要从输出中删除\n,但保留新行,可以使用p,而不是print
open("score2.txt", "r")

file.each do |line|
  p line.split
end

如果希望输出与文本文件中的输出相似,可以使用puts
open("score2.txt", "r")

file.each do |line|
  puts line.split
end

这个stackoverflow answer可能有帮助,因为它讨论了Ruby中putsprint之间的区别。
这解释了Ruby中putsprintp之间的区别。
更新:
要从示例中删除\n新行,请在条件语句之前添加placing = placing.chomp
您还可以使用bang!运算符和chomp来就地修改placing字符串,即chomp!
file = open("score2.txt", "r")

file.each do |line|
  array = line.split(",")
  name = array.shift
  score = 0
  array.each do |placing|
    placing.chomp!
    if placing == "1"
      score += 6
    elsif placing == "2"
      score += 4
    elsif placing == "3"
      score += 2
    else
      score = score
    end
  end
  print "#{name}: #{score} "
end

关于arrays - ruby 拆分的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45117597/

10-16 02:05