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」の場合、ファイルの出力は連続した 1 行として表示されます。

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)
}

2 つの呼び出しを組み合わせて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 行ではなく 1 行のコード)。

@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 に答える