在文件中添加换行符

时间:2012-05-08 21:34:21

标签: ruby file-io

如何在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)" " }

但它不起作用。那我怎么能解决这个问题呢?

4 个答案:

答案 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文件,所以我假设我的主目录中的空文件有输出(这不是真的)所以我得错了。

但感谢所有尝试过的人!