2010-03-17 4 views
4

En Ruby, je cherche à lire les données jusqu'à ce que j'atteigne un délimiteur ou la fin du fichier.Readline, le séparateur d'enregistrement et le Ruby

J'ai trouvé cela possible en redéfinissant $/ ou le $INPUT_RECORD_SEPARATOR à mon délimiteur. Cependant, avec toutes les "fonctionnalités" dans le langage Ruby, il semble hackey de changer la valeur d'un global pour le faire. En outre, readline utilisé pour consommer le délimiteur, tout en ne l'incluant pas dans ce qui est retourné.

Existe-t-il un autre moyen de "lire jusqu'à" en consommant le délimiteur qui n'implique pas d'obtenir les valeurs char par char dans une boucle?

+0

Qu'est-ce que "readline utilisé pour consommer le délimiteur alors qu'il n'est pas inclus dans ce qui est retourné" signifie dans ce contexte? – mbigras

Répondre

3

Fondamentalement, toutes readline méthodes -style de IO acceptent chaîne de séparation comme paramètre optionnel:

>> s = StringIO.new('hello from string') 
=> #<StringIO:0x52bf34> 
>> s.readline ' ' 
=> "hello " 
>> s.readline ' ' 
=> "from " 
>> s.readline ' ' 
=> "string" 
+0

Excellent, comment pourrais-je l'utiliser dans un "f.each do | line |" ou "alors que la ligne est à la mode"? – QueueHammer

+0

'f.each ('') {| s | met s} ' –

+0

Pour la victoire! QueueHammer

1

Vous pouvez spécifier le séparateur d'enregistrement comme un argument obtient, par exemple:

while line = gets("\r") 
    puts line 
end 
Questions connexes