Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 我的程序中的字符串不会保存在文本文件中_Ruby - Fatal编程技术网

Ruby 我的程序中的字符串不会保存在文本文件中

Ruby 我的程序中的字符串不会保存在文本文件中,ruby,Ruby,我正在写克里斯·派恩的《学会编程》第11章。这个练习要求建立一个播放列表,我需要从每个文件夹中随机挑选几首歌曲。 以下是我写的: folder = Dir['/Users/M/Music/iTunes/iTunes Media/Music/**'] music_folders= [] folder.each do |f| f = f.split ('/') music_folders.push f[7] end def mix arr arr.each do |aa

我正在写克里斯·派恩的《学会编程》第11章。这个练习要求建立一个播放列表,我需要从每个文件夹中随机挑选几首歌曲。 以下是我写的:

folder = Dir['/Users/M/Music/iTunes/iTunes Media/Music/**']
music_folders= []

folder.each do |f|
    f = f.split ('/')
    music_folders.push f[7]
end


def mix arr
    arr.each do |aa|
    songs = Dir["/Users/M/Music/iTunes/iTunes Media/Music/#{aa}/**/*.{MP3,mp3}"]
    shuffle(songs)
    end
end

def shuffle songs
    playlist=[]
    x = 0
    y = 0
    count = songs.length

    while y<4
        x = rand(count)
        if songs[x] !='used'
        playlist.push songs[x]
        songs[x] = 'used' 
        y= y+1 
    end
end
puts playlist
end

mix(music_folders)

因此,命令输出提供了我想要的内容,但我不确定如何将它们保存到.txt文件中。有人能帮我吗?谢谢

这将读取比需要复杂一点的文件,并将其写入/tmp/songs.txt


您到底想向文件写入什么?整个音乐文件夹阵列、播放列表或单个项目?我想知道您看到的是哪种输出。没有单一的p、puts或任何其他方法可以打印到屏幕上。虽然返回nil,但shuffle也返回nil。arr.mix方法中的每个都返回原始数组,因此mix返回相同的arr。最后,mixmusic\u文件夹应该返回原始数组。如果您的路径不够长,则该数组可能包含nils。我的路径很短。我把它改成了f。另外,您应该检查以下方法:File.File?、[].inject、File.open或File.write。最后两种方法是用来写作的。Opps!我不小心删除了一条重要的行。我把它加了回去。我使用File.open+File。写它在命令输出上打印了播放列表,并创建了一个文件,但该文件是空的…@SeanNieuwoudt-我想将不同文件夹中的曲目列表写入一个.txt文件…这有意义吗?谢谢
ROOT = "#{ENV['HOME']}/Music/iTunes/iTunes Media/Music"

folders = Dir["#{ROOT}/**"]
files   = folders.flat_map { |dir| Dir["#{dir}/**/*.{MP3,mp3,m4a}"] }
songs   = files.map { |file| File.basename(file) }

File.open('/tmp/songs.txt', 'w') { |f| f.write(songs.join("\n")) }