49

たとえば、文字列の配列がある場合

a = ['a', 'b', 'c', 'd']

要素をファイル (.txt など) に 1 行に 1 つずつ出力したいと考えています。これまでのところ、私は持っています:

File.new("test.txt", "w+")
File.open("test.txt", "w+") do |i|
    i.write(a)
end

これにより、test.txt ファイルの 1 行に配列が表示されます。各値をファイルの新しい行に追加して、配列を反復処理するにはどうすればよいですか?

4

5 に答える 5

118

Array#each配列を反復処理し、呼び出しIO#putsて各要素をファイルに書き込むために使用します (putsレコード区切り文字、通常は改行文字を追加します)。

File.open("test.txt", "w+") do |f|
  a.each { |element| f.puts(element) }
end

または、配列全体を次のように渡しputsます。

File.open("test.txt", "w+") do |f|
  f.puts(a)
end

ドキュメントから:

配列引数で呼び出された場合、各要素を新しい行に書き込みます。

于 2013-09-19T16:53:08.073 に答える
18

かなり簡単な解決策があります:

IO.write("file_name.txt", your_array.join("\n"))
于 2016-09-20T13:35:09.017 に答える
7

別の方法として、次のように、配列を「\n」で結合して、各要素が新しい行になるようにすることもできます。

a = %w(a b c d)

File.open('test.txt', 'w') {|f| f.write a.join("\n")}

テキスト ファイルに既にある値をオーバーライドしたくない場合は、単に新しい情報を一番下に追加するだけです。次のようにします。

a = %w(a b c d)

File.open('test.txt', 'a') {|f| f << "\n#{a.join("\n")}"}
于 2013-09-19T17:37:34.487 に答える
4

Array#each各要素を反復するために使用します。ファイルに書き込むときは、必ず newline( ) を追加してください。そうしないと、コンテンツとして次\nのファイルが取得されます。abcd

a = ['a', 'b', 'c', 'd']
File.open('test.txt', 'w') do |f|
  a.each do |ch|
    f.write("#{ch}\n")
  end
end
于 2013-09-19T16:44:27.277 に答える