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?
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.
Il existe une solution assez simple:
IO.write("file_name.txt", your_array.join("\n"))
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")}"}
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
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")) }