红宝石分割问题

红宝石分割问题

问题描述:

我的目标是读取txt.file,并将内容分割成数组。然而,我对split命令有问题。红宝石分割问题

我的文本文件,内容是这样的

阿科斯塔,1,3,0,0,0
Amezcua,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,我不希望这样。第三,如果我用put替换print,那么对于数组的每个最后一个元素,我都不会有\ n的问题;为什么?

为了补充,我将解释为什么我想从数组的最后一个元素中移除\ n的原因。 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 

然而,由于在阵列中的最后一个元素\ N,我无法点分配给比赛的最后一场比赛。因此我想从数组的最后一个元素中删除\ n。

这个练习是从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 

如果はNT的输出看起来像你在你的文本文件的东西,你可以使用puts

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

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

* answer可能是有益的,因为它讨论了puts和红宝石print之间的差异。

这个article解释了Ruby中的puts,printp之间的差异。

更新:

要从例如删除\n新的生产线,您的条件语句前加上placing = placing.chomp

您还可以使用爆炸!运营商chomp到即chomp!修改placing串到位:

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 
+0

嗨如何删除从数组的最后一个元素\ n吗? – roppo

+0

嗨:)我更新了我的回答 –

+0

嗨,我想我不清楚我的问题,你能不能好好读我的qns agn? – roppo

你想line.chomp.split(',')

chomp从字符串末尾删除换行符。

有很多方法可以去除\nchompstrip

试试下面的代码:

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

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