#ruby #file #random #save
#ruby #файл #Случайный #Сохранить
Вопрос:
Я застрял в выполнении такой простой программы на Ruby, которая генерирует случайную строку длиной 63 символа, а затем сохраняет ее в текстовом файле. На данный момент мой код :
def Password_Generator(length=63)
chars = ("a".."z").to_a ("A".."Z").to_a ("0".."9").to_a
password = ''
length.time { |i| password << chars[rand(chars.length)] }
aFile = File.new("Generated-Password.txt", "w ")
aFile.write(password)
aFile.close
end
Ответ №1:
Во-первых, Password_Generator
это неправильное имя метода в Ruby, поскольку константы используются для имен классов. Также разработчики Ruby предпочитают snake_case над camelCase. Для вашего фактического вопроса (это Ruby 1.9):
def generate_password(length=63)
chars = [*?a..?z, *?A..?Z, *0..9]
(1..length).map{ chars.sample }.join
end
Я бы, вероятно, выполнил фактическую запись в файл другим методом, разделил проблемы и все такое.
Комментарии:
1. Вау, я действительно не понимаю этот способ генерации случайных строк Oo! Никогда не видел этого *?a. Не могли бы вы опубликовать функцию записи файла? Спасибо за быстрый ответ!
2. для записи в файл используйте
File.open("generated-password.txt','w '){|w| w.write generate_password }
3. Я протестировал это, и это сработало! Большое спасибо вам двоим за помощь! И спасибо вам за *? способ генерации случайных чисел!
4.
*
в этом контексте оператор splat ([*1..3] #=> [1, 2, 3]
) .?a
является символьным литералом, поэтому мы разделяем диапазон символов ([*?a..?e] #=> ["a", "b", "c", "d", "e"]
). @Jacob показал вам способ записи в файл.5. Рад помочь. Кстати: если это был ответ, который вы искали, пожалуйста, примите его, чтобы другие люди знали, что на него был дан достаточный ответ. Это считается хорошей практикой здесь, при переполнении стека.
Ответ №2:
require 'securerandom'
def generate_password(length=63)
# urlsafe_base64 uses lowercase, uppercase, 1-9 and _-.
# The latter are removed from the generated string.
SecureRandom.urlsafe_base64(length).delete('_-')[0, length]
end
File.open('pwd.txt', 'w'){|f| f.puts generate_password}