4

如何在 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

4 回答 4

5
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
于 2012-05-08T21:37:48.073 回答
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) }
于 2012-05-08T22:32:24.620 回答
3

当我想出这个解决方案时,我实际上嘲笑它是多么简单。

我真正需要做的就是将间距与线条分开添加。因此对于:

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 文件,所以我认为我的主目录中的空文件有输出(这不是真的)所以我得到了错误的想法。

但是感谢所有尝试过的人!

于 2012-05-10T00:06:28.757 回答
2

您需要在“”和 x 周围加上括号。

File.open("output.txt","a+") {|f| f.write(x)+" " }

应该改为

File.open("output.txt","a+") {|f| f.write(x + " ") }
于 2012-05-08T21:48:49.313 回答