如何在Ruby中为文件写一个换行符?
我写入文件的代码是:
[完整代码请求]
print("Word:") #Prompt for word to scrambe
word = gets.chomp #Inputs word
wordLength = word.length #Gets word length
randomAmount = wordLength * wordLength #Finds out how many ways to randomize
amountDone = 0 #Loop variable for process of randomizing
while amountDone != randomAmount
puts "---------------------------\n"
x = word.chars.to_a.shuffle #Changes each character to an array and randomizez them
File.open("output.txt","a+") {|f| f.write(x)}
puts "#{amountDone}:\n #{x}"
amountDone += 1
puts "---------------------------\n"
end
puts "Type any key to continue..."
endWord = gets.chomp #Close program prompt
-
File.open("output.txt","a+") {|f| f.write(x) }
但问题是该行^处于循环中。意思是它实际上反复重复了很多次。因此,无论何时打开输出文件,输出都会被压缩在一起。那么我所编写的程序基本上就是将语言尽可能多地混为一谈。因此,如果我的输入是“Abcdefgh”,那么文件中的输出将显示为一个连续的行:
bdfcegAhhbgfeAcdhcedbAgfdfcAhgebefcdbghAdAfhegbcAegdfhbcbchdgefAhAbedfcgdAfcbhgefhgdAbceefdhcgAbAefbhgcdfAcebdhgAebgchfddhcfAbegcAdfbhgecAgdfhebedAghbfcedbAchgfbhAcgfdeceghAbfddAbfehcgbAhefdgcecfghbdAAhcgdfbedchAgfbebfhAgecdedAhcbgfAfdceghbehdcAbfgcegdhbfAfdAbchgegAhbfecdgeAdhfcbcbdAehfgfhgbcAedchdgbefAfhecdAbgAbedgcfhehcgfbdAAhgcebfdbAcehgfddfchgebAhcAbegdffAbehgcdchdbgAfebeAhgdfcbegcdhfAfecbdhAgdbfehgAcdbcehgfAgdehfcbAbgedAcfhdgcAfehbdfhAgecbcAgdhebfghbAefcdgebhAfdcgecdbAfhgbcAhfedhAbfgdcebAedfhcgbdfchAge
所以,我想要做的是我想在输出之间进行某种分离。因此,每次输出时,都会有新线,空格,管道,斜线等。
我已经尝试了
File.open("output.txt","a+") {|f| f.write(x)+" " }
和
File.open("output.txt","a+") {|f| f.write(x)," " }
和
File.open("output.txt","a+") {|f| f.write(x)" " }
但它不起作用。那我怎么能解决这个问题呢?
答案 0 :(得分:4)
File.open("output.txt","a+") { |f| f.puts(x) }
应该这样做
编辑:
您可以像这样在x上附加换行符:
x + "\n"
编辑2:
您想要在循环外打开文件。试试这个:
File.open('testfile.txt', 'a+') do |f|
(1..3).each do |i|
f.puts("test #{i}")
end
end
它适用于我的机器(MBP)。它在文件中放了3行:
test 1
test 2
test 3
答案 1 :(得分:3)
在最简单的级别上,您只需添加另一个write
语句:
separator = '\n' # or space, tab, etc
...
File.open("output.txt","a+") {|f|
f.write(x)
f.write(separator)
}
结合两个write
调用也应该有效:
separator = '\t'
...
File.open("output.txt","a+") {|f| f.puts(x + separator) }
答案 2 :(得分:2)
您需要将括号括在“”以及x。
周围File.open("output.txt","a+") {|f| f.write(x)+" " }
应改为
File.open("output.txt","a+") {|f| f.write(x + " ") }
答案 3 :(得分:2)
当我找到这个解决方案时,我实际上嘲笑它是多么荒谬。
我真正需要做的就是将线条与线条分开添加。所以:
File.open("output.txt","a+") {|f| f.write(x) }
所有需要做的就是添加这一行:
File.open("output.txt","a+") {|f| f.write(" ") }
所以它会是:
File.open("output.txt","a+") {|f| f.write(x) }
File.open("output.txt","a+") {|f| f.write(x) } #This is hilarious
因此,解决方案一直都非常简单,但是如果有更简单的解决方案(可能代码在一行而不是2行)。
我认为@ seph的答案确实有效,但仍然以同样的方式逐字逐句地写出来。我认为如果你将“puts”改为“write”,它会单独写每个。
File.open('testfile.txt', 'a+') do |f|
(1..3).each do |i|
f.puts("#{x} #{randomAmount}")
end
end
#change that to
File.open('output.txt', 'a+') do |f|
(randomAmount).each do |i|
f.write("#{amountDone}:\n#{x}")
end
end
然后我认为它有效。我不确定,因为我试过这个时间它实际上是否有效,因为我错放了我的output.txt文件,所以我假设我的主目录中的空文件有输出(这不是真的)所以我得错了。
但感谢所有尝试过的人!