2010-09-22 7 views
1

ok, je le suivant, le code très simple:suppression des lignes vides après la boucle

f = "String1\n\n\nString2\n\n\n" 
f.each_line do |t| 
    t.delete! "\n" 
    puts t.inspect 
end 

Il supprime \ n, mais laisse les espaces

"String1" 
nil 
nil 
"String2" 
nil 
nil 

Je veux que ça ressemble à ce :

"String1" 
"String2" 

Merci d'avance pour l'aide.

+1

Non, il ne laisse aucun espace. Il renvoie une chaîne vide. Quel résultat recherchez-vous? – Matchu

+0

Êtes-vous sûr que le code exact que vous avez produit 'nil' dans la sortie, plutôt que' "" '? Cela ne devrait pas être le cas. –

Répondre

3
f.squeeze("\n").each_line do |l| 
    puts l 
end 
+0

Excellente réponse! Merci pour l'aide – nomoreflash

1

Vous pouvez split la chaîne par \n, puis reject toutes les lignes vides:

f = "String1\n\n\nString2\n\n\n" 
f.split("\n").reject { |i| i.empty? } 
#=> ["String1", "String2"] 

Vous finiriez avec un tableau que vous pouvez sortie que vous le souhaitez.

+0

Fonctionne très bien. Merci – nomoreflash

+0

pouvez-vous diviser la chaîne par zéro? – nomoreflash

1
f = "String1\n\n\nString2\n\n\n" 
f.each_line.collect(&:chomp).reject(&:empty?) 
#=> ["String1", "String2"] 

Le collect(&:chomp) supprime les fins de ligne. reject(&:empty?) jette toutes les lignes vides.

+0

Merci, va certainement utiliser pour votre contribution. – nomoreflash

+0

Vous êtes très gentil. La réponse de @ jordinl est clairement meilleure. –

Questions connexes