2 votes

Comment utiliser STDIN lorsque ARGF a été utilisé ?

Je veux créer un script, que je peux chaîner avec une liste: cat list | ruby script.rb Je sais que je peux le faire en utilisant ARGF et ça marche. Mais encore une fois je veux itérer sur chaque ligne et faire une action basée sur une décision. Mais quand j'utilise STDIN.gets je ne serai même pas invité à saisir une entrée quand je chaîne quelque chose.

Voici ce que j'ai pour le moment

#!/usr/bin/env ruby
# encoding: utf-8

items = []

ARGF.each_with_index do |line, index|
  items << line
end

items.each_with_index do |item, index|
  puts "Que faire avec #{item}? (1,2,3)"
  case STDIN.gets
  when 1
    puts "un"
  when 2
    puts "deux"
  when 3
    puts "trois"
  end
end

Merci pour toutes les indications qui me dirigent dans la bonne direction.

1voto

noxoc Points 2309

Après avoir lu et parcouru les Ruby-Docs pendant un certain temps, j'ai trouvé un moyen. J'ai besoin d'ouvrir un nouveau flux IO, car ARGF est fermé comme l'a souligné cam.

#!/usr/bin/env ruby

ARGF.each_with_index do |line, index|
  puts "#{index}: #{line}"
end

fd = IO.sysopen("/dev/tty", "w+")
IO.open(fd, "w+") do |io|
  puts "Entrez quelque chose :"
  puts "Vous avez saisi : #{io.gets}"
end

Probablement pas la meilleure pratique, mais cela fonctionne pour moi en ce moment et ne devrait pas être le sujet de cette discussion.

0voto

cam Points 8882

Vous ne pouvez pas utiliser ARGF si vous voulez pouvoir utiliser également STDIN. STDIN est juste la liste des fichiers puis elle est fermée (c'est votre shell qui le fait, pas ruby, donc vous n'avez aucun contrôle).

-1voto

Hardik Patel Points 826

Si lists est un nom de fichier et qu'il contient le nombre de lignes que vous souhaitez utiliser dans votre script, veuillez essayer d'exécuter votre script.rb avec la commande suivante.

ruby script.rb list

Remarque : lists doit être un fichier dans lequel vous avez le nombre de lignes pour lesquelles vous devez demander une option. De plus, veuillez partager votre sortie après cela !!!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X