web-dev-qa-db-fra.com

Ajoutez chaque élément de tableau aux lignes d'un fichier en ruby

Si j'ai un tableau de chaînes, par exemple.

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

et je veux sortir les éléments, dans un fichier (par exemple .txt) un par ligne. Jusqu'à présent, j'ai:

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

Cela me donne le tableau sur une ligne du fichier test.txt. Comment puis-je parcourir le tableau, en ajoutant chaque valeur à une nouvelle ligne du fichier?

37
edc505

Utilisez soit Array#each pour parcourir votre tableau et appeler IO#puts pour écrire chaque élément dans le fichier (puts ajoute un séparateur d'enregistrement, généralement un caractère de nouvelle ligne):

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

Ou passez le tableau entier à puts:

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

De la documentation:

S'il est appelé avec un argument tableau, écrit chaque élément sur une nouvelle ligne.

92
Stefan

Il existe une solution assez simple:

IO.write("file_name.txt", your_array.join("\n"))
12
Josip Đuraković

Comme alternative, vous pouvez simplement joindre le tableau avec "\ n" afin que chaque élément soit sur une nouvelle ligne, comme ceci:

a = %w(a b c d)

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

Si vous ne souhaitez pas remplacer les valeurs déjà présentes dans le fichier texte afin d'ajouter simplement de nouvelles informations en bas, vous pouvez le faire:

a = %w(a b c d)

File.open('test.txt', 'a') {|f| f << "\n#{a.join("\n")}"}
5
tigeravatar

Utilisation Array#each pour itérer chaque élément. Lors de l'écriture dans le fichier, assurez-vous d'ajouter une nouvelle ligne (\n), ou vous obtiendrez un fichier avec abcd comme contenu:

a = ['a', 'b', 'c', 'd']
File.open('test.txt', 'w') do |f|
  a.each do |ch|
    f.write("#{ch}\n")
  end
end
3
falsetru

Une autre solution simple:

directory = "#{Rails.root}/public/your_directory" #create your_directory before
file_name = "your_file.txt"
path = File.join(directory, file_name)
File.open(path, "wb") { |f| f.write(your_array.join("\n")) }
2
andriy