2011-01-28 11 views
1
ARGF.each_with_index do |line, idx| 
     print("[#{idx}] #{line} x: "); 
     indent = Indent 
     # do stuff 
     indent = "" 
    end #ARGF e 

STDINからの各行は次のように表示されているあなたは私に言わせれば、ない良い/奇数ある、ルビーARGF行動

x: [1] W:\sandbox\tmp\for_each\for_each.rake 

を説明してください。

一つの更なる原因不明の結果、ライン...

print("ab: [#{idx}] #{line} x: "); 

ディスプレイ:

x: ab: [1] W:\sandbox\tmp\for_each\for_each.rake 

私はちょうどここに奇妙な感情を取得します。 3つの質問に、このaは:

  1. は「X:」どのようにそれぞれの先頭の文字列風アップ「ライン」という文字列を??!
  2. Ruby v1.8.7バグか私のバグ?
  3. 修正方法?

ヘルプが必要です。私はこれを見続けると、私がやったことが本当にばかげているのか疑問に思いますか?事前に多くの感謝。 each_lineによって得られた文字列は改行が含まれていますので、

アロハ、ウィル

+0

"PLSの" ではなく、 "ください" を使用してください。 –

+0

ええ、_pls_は 're'、 'OK'、 'thx'、 'ta'と同じ英語です。英語は母と祖先の舌です。 * _lol_ *または、1066計算されたキャンペーンのこの部分は、フランス語をすべて使用するよう強制しますか?ああ待って、 '_plait_' _plaisure_(してください)はすでにフランス語です。 – will

答えて

3

each_lineは、行の末尾に改行を削除しません。一方、printは、文字列の最後に改行を追加しません(必要ならば、putsを使用してください)。だから、print "lala"続いprint "hello\nworld:、あなたの出力はそれがない道に見える理由を説明

hello 
world:lala 

を印刷します。

は、あなたが望む出力を得る lineの最後に改行を削除するので、 x:前に改行を含む文字列からあなたを防ぐことができますされ、 lineの代わりに line.chompを使用します。

+0

ありがとう...私はそれを見つけた約30秒後に投稿しました。少なくとも私は失われた気がしません。 – will

1

ごめんなさい。 I fergot Windowsでの行末とCR/LFの問題についてライン出力します

line.chomp! 
print("ab: [#{idx}] #{line}:x\n"); 

:ソリューションがあるように思わ

ab: [1] W:\sandbox\tmp\for_each\for_each.rake x: 

若い選手のために残りのトラップを、ムシャムシャ食べる後に独自の改行(\ n)を置くことである()メソッド!。私がこれを使って作った間違いの1つは、 '()'ではなく 'trim()'を考えていたことです.-どのように狂っていますか?

乾杯、

ウィル

+0

'print" ... \ n "'は 'puts"と同じです... " – Phrogz