Lire l'entrée de la console dans Ruby?

115

Je veux écrire un simple programme A + B en ruby, mais je n'ai aucune idée de comment travailler avec la console.

Sergey
la source
10
Je parle de Ruby mais pas de ROR. Il n'y a pas de mot sur l'entrée de la console.
Sergey

Réponses:

228

Parlez-vous gets?

puts "Enter A"
a = gets.chomp
puts "Enter B"
b = gets.chomp
c = a.to_i + b.to_i
puts c

Quelque chose comme ca?

Mettre à jour

Kernel.getsessaie de lire les paramètres trouvés dans ARGVet ne demande à la console que s'ils ne sont pas ARGVtrouvés. Pour forcer à lire depuis la console même si ce ARGVn'est pas videSTDIN.gets

siame
la source
59
J'ai un conflit avec cette solution: Kernel.getsessayez de lire les fichiers trouvés ARGVet ne demande à la console que s'ils ne sont pas ARGVtrouvés. Forcer à lire depuis la console même si ce ARGVn'est pas une utilisation vide STDIN.gets.
fguillen
3
a.to_iet b.to_ipourrait être mieux
Dorian
est le getsblocage? Sinon, y a-t-il un substitut qui bloque?
noMAD
1
@fguillen est une excellente réponse et ne devrait pas être caché dans les commentaires. Pourriez-vous peut-être y répondre, s'il vous plaît? Merci!
Dan Rosenstark
2
@Yar merci pour la suggestion, j'ai ajouté une mise à jour à la réponse elle-même.
fguillen
28

vous pouvez également transmettre les paramètres via la ligne de commande. Les arguments de ligne de commande sont stockés dans le tableau ARGV. donc ARGV [0] est le premier nombre et ARGV [1] le deuxième nombre

#!/usr/bin/ruby

first_number = ARGV[0].to_i
second_number = ARGV[1].to_i

puts first_number + second_number

et tu l'appelles comme ça

% ./plus.rb 5 6
==> 11
rik.vanmechelen
la source
10

Il existe de nombreuses façons de recueillir les commentaires des utilisateurs. J'aime personnellement utiliser la méthode obtient. Lorsque vous utilisez gets, il obtient la chaîne que vous avez tapée et qui inclut la touche ENTRÉE sur laquelle vous avez appuyé pour terminer votre entrée.

name = gets
"mukesh\n"

Vous pouvez le voir dans irb ; tapez ceci et vous verrez le \ n, qui est le caractère «nouvelle ligne» que la touche ENTRÉE produit: Tapez name = getsvous verrez quelque chose comme "mukesh\n" Vous pouvez vous débarrasser du caractère de nouvelle ligne embêtant en utilisant la méthode chomp .

La méthode chomp vous renvoie la chaîne, mais sans la nouvelle ligne de fin. Belle sauveur de vie méthode chomp.

name = gets.chomp
"mukesh"

Vous pouvez également utiliser le terminal pour lire l'entrée. ARGV est une constante définie dans la classe Object . C'est une instance de la classe Array et a accès à toutes les méthodes de tableau. Puisqu'il s'agit d'un tableau, même s'il s'agit d'une constante, ses éléments peuvent être modifiés et effacés sans problème. Par défaut, Ruby capture tous les arguments de ligne de commande passés à un programme Ruby (séparés par des espaces) lorsque le binaire de ligne de commande est appelé et les stocke sous forme de chaînes dans le tableau ARGV .

Lorsqu'il est écrit dans votre programme Ruby, ARGV prendra une commande de ligne de commande qui ressemble à ceci:

test.rb hi my name is mukesh

et créez un tableau qui ressemble à ceci:

["hi", "my", "name", "is", "mukesh"]

Mais, si je veux passer une entrée limitée, nous pouvons utiliser quelque chose comme ça.

test.rb 12 23

et utilisez ces entrées comme ceci dans votre programme:

a = ARGV[0]
b = ARGV[1]
Mukesh Kumar Gupta
la source
5

si vous souhaitez conserver les arguments de Terminal, essayez le code suivant:

A = ARGV[0].to_i
B = ARGV[1].to_i

puts "#{A} + #{B} = #{A + B}"
rilutham
la source
0

Si vous souhaitez créer une console interactive:

#!/usr/bin/env ruby

require "readline"
addends = []
while addend_string = Readline.readline("> ", true)
  addends << addend_string.to_i
  puts "#{addends.join(' + ')} = #{addends.sum}"
end

Utilisation (en supposant que vous mettez l'extrait ci-dessus dans le summatorfichier du répertoire actuel):

chmod +x summator
./summator
> 1
1 = 1
> 2
1 + 2 = 3

Utiliser Ctrl + Dpour sortir

wik
la source