2017-04-26 41 views
0

红宝石我怎么能不假换行空间打印每行ruby​​如何在每行不留行列空间的情况下打印?

这是我的文件

name1;name2;name3 

name4;name5;name6 

我有这个命令

File.open("text2xycff.txt", "r") do |fix| 
    fix.readlines.each do |line| 
    parts = line.chomp.split(';') 

input3= zero 

File.open('text2xyczzzz2.txt', 'a+') do |f| 
    f.puts parts[0] , parts[1], parts[2] ,input3 
end 



end 

end 

这是我的输出

name1 

name2 

name3 

zero 

name4 

name5 

name6 

zero 

我需要输出这个

name1;name2;name3;zero 

name4;name5;name6;zero 

请帮助如果你调用puts用逗号分隔的参数我丝毫这个问题

回答

1

你有两个解决方案。

第一个使用puts作为目前您:

File.open('yourfile.txt', 'a+') { |f| 
    f.puts "#{parts[0]}#{parts[1]}#{parts[2]}#{input3}" 
} 

第二个使用write而不是puts

File.open('yourfile.txt', 'a+') { |f| 
    f.write parts[0] 
    f.write parts[1] 
    f.write parts[2] 
    f.write input3 
} 
+0

非常感谢你的作品 – zzero

1

尝试:

File.open("test_io.txt", "r") do |fix| 
    fix.readlines.each do |line| 
    File.open('new_file10.txt', 'a+') do |f| 
     next if line == "\n" 
     f.puts "#{line.chomp};zero" 
    end 
    end 
end 

我不是确定为什么当你指定时用分号分割字符串d你想要下面的输出。只需在字符串的末尾附加“;”而不是解析数组就可以更好地服务。

名1;名称2; NAME3零

NAME4; NAME5; name6零

+0

非常感谢你。 – zzero

1

您可以指定一个if语句来检查zero值。

实施例:

arr = ["name1", "name2", "name3", "zero", "name4", "name5", "name6", "zero"]; 
arr.each { |x| 
    if x != "zero" then 
    print x 
    else 
    puts x 
    end 
} 

输出:

name1name2name3zero 
name4name5name6zero 

print将打印行内。

puts将在新行上打印。

只要在你的代码中实现这个逻辑,你就可以走了。

+0

非常感谢你。 , – zzero

2

更最小的做法是只将一些东西附加到每一行:

File.open("text2xycff.txt", "r") do |input| 
    File.open('text2xyczzzz2.txt', 'a+') do |output| 
    input.readlines.each do |line| 
     output.puts(line.chomp + ';zero') 
    end 
    end 
end 

或者,如果你想真正分析的东西,它提出了清理的机会:

File.open("text2xycff.txt", "r") do |input| 
    File.open('text2xyczzzz2.txt', 'a+') do |output| 
    input.readlines.each do |line| 
     parts = line.chomp.split(/;/) 
     parts << 'zero' 

     output.puts(parts.join(';')) 
    end 
    end 
end 
+0

非常感谢您的帮助 – zzero

相关问题