トップページ⇒tech
1001コメント355KB

Ruby 初心者スレッド Part 52

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/06/06(木) 23:50:09.17
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
RoRはスレ違いよ

前スレ
Ruby 初心者スレッド Part 51
http://toro.2ch.net/test/read.cgi/tech/1358636526/

るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/
0249デフォルトの名無しさん2013/08/20(火) NY:AN:NY.AN
いわゆる「普通」のzip/unzipはないねえ
02502442013/08/20(火) NY:AN:NY.AN
すると、

forの前にk = -pとか書いたり

break if k <= deltaとか書いたり

しないといけないんですね


Rubyって意外に不便ですね
0251デフォルトの名無しさん2013/08/20(火) NY:AN:NY.AN
そこでその処理をしなければならないのなら、そこにその処理を書かなければいけない
0252デフォルトの名無しさん2013/08/20(火) NY:AN:NY.AN
こまるねェ・・・
gem使えると思ったら大間違いですョ・・・
0253デフォルトの名無しさん2013/08/21(水) NY:AN:NY.AN
なにがしたいのかしらんけど糞すぎて読めないレベルのコードだ
0254デフォルトの名無しさん2013/08/21(水) NY:AN:NY.AN
日本語の流れで説明してもらったほうがよかったな
各行の処理(正確には、各行の前後にあるかもしれない処理)のせいでこちらからなにもできん

まあ、ループの書き方くらいはきちんと自分で理解して書いて欲しい
下手するとコピペで書いていただけでループや繰り返しの概念がないようにも見受けられる
0255デフォルトの名無しさん2013/08/21(水) NY:AN:NY.AN
PerlとPythonの間にRubyを入れました
だからRubyは少しだけ中途半端な言語
0256デフォルトの名無しさん2013/08/21(水) NY:AN:NY.AN
>>250
a..bてのがある。
点がふたつ。これは、他のスクリプト言語にもある。

a = -p
b = delta - 1
for k in a..b do
処理
end
0257デフォルトの名無しさん2013/08/21(水) NY:AN:NY.AN
多重ループ回避のために

catch :out do


end


という処理を書いたら、catch句の中にはいってくれないのはどうしてですか?
0258デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
rubyの例外構文がtry-catchじゃないから
0259デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>>254
知りたいのはループ方法だけなんです

>>256
ありがとうございます。

でもその構文でインクリメントを2にするには、next if...とか使うしかないのでしょうか?
0260デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>知りたいのはループ方法だけなんです
違うと思う
たぶん>>254の見立てが正しそうだ
0261デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>>259
(a..b).step(2)

ググレ
0262デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
a=[1,1,1,2,3,4]
b=[1,1,2]
に対して a-bを実行すると[3,4]が返ってくるのですが
[1,3,4]が返ってくるようにするにはどうしたらいいですか?
0263デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
質問が多義的
いまは高校数学で、ベクトル、行列、群論とかやってないのかな
0264デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
% gem install multiset
% irb
> require 'multiset'
> a = Multiset.new([1,1,1,2,3,4])
=> #<Multiset:#3 1, #1 2, #1 3, #1 4>
> b = Multiset.new([1,1,2])
=> #<Multiset:#2 1, #1 2>
> a - b
=> #<Multiset:#1 1, #1 3, #1 4>
irb(main):006:0> (a - b).to_a
=> [1, 3, 4]

うおお
0265デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>>263
高校数学で群論やってたのっていつの時代だよ?
0266デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
確かに、
a=[1,1,1,2,3,4]
b=[1,1,2]
のとき、
a+b => [1,1,1,2,3,4,1,1,2]
なのに
a-b => [3,4]
というのは直感と反してるかもな。
0267デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
a+b-b => [3,4]
a+(b-b) => [1,1,1,2,3,4]
0268デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>>264
ありがとうございます

初心者なのでgemってよくわからないんですが
通常のarrayクラスの演算では求めるような操作を行うことはできない'multiset'モジュール?を使え
という理解でよろしいでしょうか?
0269デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>>268
ググるくらいしろ
0270デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>>262
http://play.island.ac/codepaste/code?id=1551
0271デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>>270
[1,1,1,2,3,4].diff[1,2,1] => ?
0272デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>>271
いつものアレだから無視しろ
0273デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
配列から特定のインデックスの値を複数取り出す場合、この書き方以外に何かありますか?

a = [1, 2 ,3]
a.select.with_index(0) {|val, i| i == 0 || i == 2 }
#=> [1, 3]
0274デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
s = Time.now
Time.now - s

これで求めた時刻って、単位はなんなのでしょうか?
0275デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
ttp://doc.ruby-lang.org/ja/1.9.3/class/Time.html#I_--2D
0276デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
>>273
Array#values_at
0277デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
>>271
[1,1,1,2,3,4].diff [1,2,1] => [1, 1, 3, 4]

また、>>271を更新しました
http://play.island.ac/codepaste/code?id=1552

更新版では、multisetパッケージ(>>264)と同様にメソッド Array#- をオーバライドさせました
[1,1,1,2,3,4] - [1,2,1] => [1, 1, 3, 4]

なお、この実装は(コードを見れば一目で分かるように)「配列の差」を単純に表現しています
もし質問者(>>262)が必要としているのが「真の多重集合」であるなら multsetを使うべきだし、
「単なる配列の差」でかまわないならばこちらを選んでもいいのではないかと思います


>>273
a.select.with_index { |_, i| [0, 2].include?(i) }
0278デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
>>275
ありがとうございました

秒なんですかね?
なんか1秒ぐらいかかってる処理が0.02秒で終わるのですが
0279デフォルトの名無しさん2013/08/25(日) NY:AN:NY.AN
function method() {
var func = function(i) { //すっげー長い処理 }

func(1);
func(255);
func(1000);
}

こういう処理をRubyで書きたいんですが方法が分かりません。

def method

func = lamda { |k|

}

end


これはなんか違う気がします
0280デフォルトの名無しさん2013/08/25(日) NY:AN:NY.AN
気がするのは勝手だけど、メソッド定義内で消尽するサブルーチンを書きたいのならlamnda/procが動作的にも意味的にも妥当
なぜlambdaでは駄目だと思うのか120文字程度で言えるもんなら言ってみろ(15点)
0281デフォルトの名無しさん2013/08/25(日) NY:AN:NY.AN
func = lamda do |k|

end

func(10)


これで普通に上のJavaScriptと同じように動くのですか?
0282デフォルトの名無しさん2013/08/25(日) NY:AN:NY.AN
func = lambda {|k| // 処理 }


func.call(10)


こうでした
Rubyって短く書くこと推奨なのにcall()が必要なんですね
0283デフォルトの名無しさん2013/08/25(日) NY:AN:NY.AN
func.(10) とか func[10] とか func === 10 とか
好きなの使えばいいと思うよ
0284デフォルトの名無しさん2013/08/25(日) NY:AN:NY.AN
>Rubyって短く書くこと推奨なのに
そんな推奨はない
0285デフォルトの名無しさん2013/08/25(日) NY:AN:NY.AN
まあrubyのダサい所だな
0286デフォルトの名無しさん2013/08/25(日) NY:AN:NY.AN
ruby2.0で無理やりにでもfunc(10)と書けるようにして欲しかった
0287デフォルトの名無しさん2013/08/25(日) NY:AN:NY.AN
()がついたら変数参照ではなく常にメソッド呼び出し、というルールがあるからどうしようもない
Procオブジェクトという態を捨てるわけにもいかないし
メソッド化するという機能があればいいんだろうけど
0288デフォルトの名無しさん2013/08/25(日) NY:AN:NY.AN
Cでの
for ( i=0 ; c = getc&copy; != EOF ; i++)
{
ほにゃ
]

c = STDIN.getc
while ( c != nil)
 ほにゃ
c= STDIN.getc
end

って面倒くさい書き方になっちゃうんですけど、もっと上手いやり方ないですか?
0289デフォルトの名無しさん2013/08/25(日) NY:AN:NY.AN
cでもふつう while ( (c = getc()) != EOF) ... だと思うが…
0290デフォルトの名無しさん2013/08/25(日) NY:AN:NY.AN
io.each_byte do |c|
end

じゃね?
0291デフォルトの名無しさん2013/08/26(月) NY:AN:NY.AN
日本語の流れで説明してもらったほうがよかったな
0292デフォルトの名無しさん2013/08/26(月) NY:AN:NY.AN
そんなC初めて見たな。
0293デフォルトの名無しさん2013/08/26(月) NY:AN:NY.AN
>>288
I/Oの反復処理を書く方法はいくつかあって(.... ここで「ほにゃ」を「英大文字変換」と仮定):
(1) 反復構文 until .... end を使う -- Rubyを使い始めたばかりの人向け
  until (c = STDIN.getc).nil?
    STDOUT.putc c.upcase
  end
(2) イテレータ IO#each_char を使う(>>290) -- フツウにRubyらしいやりかた
  STDIN.each_char do |c|
    STDOUT.putc c.upcase
  end
(3) (2) + 遅延評価 Enumuable#lazy を使う -- イマドキ(?)のRubyらしいやりかた(Ruby 2.0から)
  STDIN.each_char.lazy.map { |c|
    c.upcase
  }.each do |c|
    STDOUT.putc c
  end

 ・Rubyist Magazine - 無限リストを map 可能にする Enumerable#lazy
     http://magazine.rubyist.net/?0041-200Special-lazy
 ・Enumerable lazy について
     http://www.slideshare.net/cuzic/enumerable-lazy
0294デフォルトの名無しさん2013/08/27(火) NY:AN:NY.AN
初心者だがルビーからしようとしたらよくわからなかったから
html→css→php→rubyの順にしようと思うけどこれでいいと思う?
0295デフォルトの名無しさん2013/08/27(火) NY:AN:NY.AN
いいとおもわない
0296デフォルトの名無しさん2013/08/27(火) NY:AN:NY.AN
今html全部勉強し終わってcssに移ろうとしたとこに…
どんな順番がいいと思う?
0297デフォルトの名無しさん2013/08/27(火) NY:AN:NY.AN
出力・操作したいものがHTMLやCSSやJavascript(を含んだもの)であって、
そしてなおかつそれの知識がないのだとしたら、
そりゃHTMLやCSSやJavascriptの勉強から始め「なければならない」と思う
極める必要などさらさらないが、区別分別できるくらいの知識は必要
0298デフォルトの名無しさん2013/08/27(火) NY:AN:NY.AN
なるほどなー
jsもいるのか
ありがとーRuby始められるくらいのレベルになったらまたここくるわ
0299デフォルトの名無しさん2013/08/27(火) NY:AN:NY.AN
ブログ、SNS、CMS、Twitter とかがなかったとき
1. 情報を発信してー
2. HTMLを勉強する
3. 見栄えを良くするために CSS を勉強する
4. 細工したくて JavaScript 勉強する
5. 動的にしたくて CGI を勉強する
CGIでどんな言語を選択するかのが分岐点になる。
2000年はPerlの一強
0300デフォルトの名無しさん2013/08/27(火) NY:AN:NY.AN
とりあえずやれそうなものからドンドンやれば良いんじゃないかな

初心者が「やれそう!」と思うようなものは簡単で基礎的なものだろうから
後々無駄になることは多分おそらくあまりないんじゃないかなと思わなくもない
0301デフォルトの名無しさん2013/08/27(火) NY:AN:NY.AN
>>276,277
遅くなりましたがありがとうございました!
0302デフォルトの名無しさん2013/08/27(火) NY:AN:NY.AN
>>294
計算するだけのアプリとかなら、いきなりrubyでいいだろ。
0303デフォルトの名無しさん2013/08/27(火) NY:AN:NY.AN
W
0304デフォルトの名無しさん2013/08/27(火) NY:AN:NY.AN
>>302
これは義務教育で算数や数学を学んでいて計算ができる前提だな。
0305デフォルトの名無しさん2013/08/27(火) NY:AN:NY.AN
計算なら R がいいよ
0306デフォルトの名無しさん2013/08/27(火) NY:AN:NY.AN
>>293
サンクス
勉強してみます
0307デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
てすt
0308デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
VirtualBox上のUbuntuにソースコードからRubyを入れたいのですが
configureからmake installまで1時間30分ぐらいかかりました
ホストOSがWindowsのCeleronの1コアのCPUです。
みなさんの環境ではどのくらいの時間でコンパイルできるのでしょうか?
20〜30分切れるというかた,スペック教えてください
0309デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
>>308
新しい一番安いmacmini(59,800円)でやってみた。
Parallels上のCentOS6(Core4個割り当て)
ruby-2.0.0-p247

# time ./configure
real 0m16.055s
user 0m7.716s
sys 0m3.865s

# time make -j
real 3m12.424s
user 4m30.528s
sys 0m13.983s
(うち、ドキュメント生成 127.1s)
03103092013/08/28(水) NY:AN:NY.AN
あ、ごめん嘘ついた。
79,800円の方だった。

2.3GHzクアッドコアIntel Core i7(Turbo Boost使用時最大3.3GHz)、6MB三次キャッシュ
0311デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
え、そんなに速いんですか
やっぱり買い替えます
ありがとうございます
0312デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
コアもCPUも1個しかないならVirtualBoxでLinuxで開発するのはやめといたほうがいいかも
0313デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
最近プログラム初めて勉強がてらいろんな人のブログ回ってるんだけど
Linux?ってやつで開発するとどんなメリットがあるの?
0314デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
ごめんぐぐったら普通にいろんな回答でてきた
無視して
0315デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
windowsで動かないgemがあるからlinux
0316デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
>>306
>>239のサンプルコードを....
(1) 反復構文 until....end を使う
  http://play.island.ac/codepaste/code?id=27
長い(1.2Kstep)けど、見るのは1262行から始めるメイン処理の箇所だけ
変数 seq_num と env をループの中でゴリゴリと(=破壊的代入で)更新するフツーなスタイル

(2) イテレータ IO#each_line を使う
  http://play.island.ac/codepaste/code?id=1553
変数 seq_num を更新する代わりにメソッド Enumerable#with_index を、そして
変数 env を更新する代わりにメソッド Enumerable#inject をチェーン(繋ぐ)ことで
(1)と同じ反復処理を実現している

なお、(3)の遅延メソッド Enumuerable#lazy は無くても、ループが止まることは無く普通に動く
メソッドチェーンの途中で map や select 等を使うケースでは必要になるみたいだけど、
どんな条件で lazy が要(あるいは不要)か?に対する明確な答えは分からなかった....
03173162013/08/28(水) NY:AN:NY.AN
2行目のアンカミスを訂正
X: >>239
O: >>293
0318デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
>>313
開発ツールが豊富で簡単で安定してる。使い方によるだろうから、自分にあった環境使えばいいよ。
0319デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
nokogiriをBundlerでインストールすると、nokogiriとmini_portileというGemがインストールされました。

nokogiriのGemファイルには他にもminitestやhoeといったGemが書かれているのですが、nokogiriとmini_portileしかインストールされないのは何故でしょうか?
0320デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
こまけぇことは
0321デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
開発時に必要なものと実行時に必要なものは違うから
0322デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
何ページかあるリストにアイテムが複数あるデータがあって、それを必要に応じて外部から持ってくるEnumerableなクラスを作ろうとしています。
適当にeachを実装することでそれはできました。このような実装です
def each
items_read_position = -1
while get_next
(items_read_position+1).upto(@items.length-1) do |i|
yield @items[i]
end
items_read_position = @items.length-1
end
end
@itemsはアイテムが入った配列で、get_nextは取得した結果を@itemsにArray#<<し、取得終了時にfalse、それ以外はtrueを返すというメソッドです。

そこまでは出来たのですが、後々容易にアイテムを識別したり、リストの重複を防ぐために、Itemの中にあるキーを用いてhashにしようと考えました。
色々調べて、Hashの順序は保証されることがわかったので、Enumerator#nextというのが使えるかなと思いましたが、
nextの実行中に元オブジェクトの変更は出来ませんでした。
何かいい手段があれば教えてください。
0323デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
>>321
Gemfileではどのgemもgroupに:developmentと:testが指定されているのですが、開発時に必要なものと実行時に必要なものが指定されているのは別のファイルでしょうか?
0324デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
外部イテレータを使え、というのが回答ではあるんだが、これめんどくさいんだよな
0325デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
>>323

Nokogiriって、 gemspecファイルないんだな。

Gem::Specification.find {|spec| spec.name == 'nokogiri'}.dependencies.map(&:type)
を見て。
0326デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
あと、開発時ってのは、nokogiri gem の開発時ってことな。
0327デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
配列をキャッシュにする方法ありますか?
ジェネリクスが無効化される方法でお願いします。
0328デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
rubyからtor操作する方法って何かありませんか?(*・ω・*)
0329デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
犯罪目的ですか
0330デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
Rubyをメインで使っている人に質問です
オブジェクト指向を学ぶのにRubyは適していますか?
0331デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
一般的なオブジェクト指向というのはJavaのことです
オブジェクト指向を学びたいならJavaを学んでください
0332デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
>>325
Hoe使ってRakeファイルの中でgemspec作って依存性管理してるのかなという結論に至りました。
ありがとうございます!
0333デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
巨大な配列があります(数百行が平均)。
配列の中身はすべてハッシュで{:type=>"", text:=>""}という中身です。
:typeは、A, B, Cの3種類だけです。

今この巨大配列を
α:typeがAとCの配列
β:typeがBとCの配列
に分割したうえで、
αは、:typeがAの要素と:typeがAの要素からインデックスが±3以内の:typeがCの要素のみ
βは、:typeがBの要素と:typeがBの要素からインデックスが±3以内の:typeがCの要素のみ
にしたいんです。


alpha_tmp = big.dup.delete_if do |ele| if ele[:type] == B end
beta_tmp = big.dup.delete_if do |ele| if ele[:type] == A end

alpha = []
is_within = 0
alpha.tmp.each.do |ele, index|
  if ele == A
    alpha << A
    is_within = index
  else
    is_within -4 < index && index < is_within + 4
    alpha << A
end

alpha = alpha.uniq



書いてみましたが・・・なんか糞です。・・・もっと上手い書き方はないものでしょうか?
0334デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
普通に受け皿配列用意してデカい配列のeach内で振り分ければよろしがな
caseが使えるはず

インデックスは要素位置だとして、配列arrの2要素目から7要素目までの部分配列はarr[2..7]で得られる
プラマイ3がよくわかんが、xプラマイ3が欲しいならarr[(x-3)..(x+3)]でいいんじゃないのん
irb> ["a", "b", "c", "d", "e", "f", "g", "h", "i"][2..5]
=> ["c", "d", "e", "f"]
0335デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
>>333
AとCの配列、BとCの配列を作り、六つ以上連続するCがあったら
前後の3つを残して中側のCを削除する

あと杞憂かも知れんがAB分割する前と後の±3では結果が異なってくるぞ
[ABBBC]なら
分割前はalpha=[A],beta=[BBBC]
分割後はalpha=[AC],beta=[BBBC]
0336デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
>>334-335
ありがとうございます。
助かりました。

AB分割後の配列の±3で問題ないです。
0337デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
プログラミング自体の初心者で数独ソルバーを作っているのですが、
9x9の問題を縦・横・3x3のブロックの3つの2次元配列に代入するのに
以下のものよりベターな方法ありませんか?

def set
for x in 0...9
for y in 0...9
@x[x][y] = @sheet[x][y]
@y[x][y] = @sheet[y][x]
@z[x][y] = @sheet[x / 3 * 3 + y / 3][x % 3 * 3 + y % 3]
end
end
end
0338デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
まずそんなこと気にしないのがベター
0339デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
(*・ω・*)できた
0340デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
>六つ以上連続するCがあったら前後の3つを残して中側のCを削除する
をどう書くのか考えてみた
簡略化して要素はHashの代わりにSymbolで :a,:b,:c
big = 10000.times.map{[:a,:b,:c].sample} #ダミーデータでっちあげ
10.times{ big[rand(big.size),0] = [:c]*(rand(10)+7)} #数箇所に:cの連続するデータを挿入

alpha_tmp = big.reject{|e| e == :b}
beta_tmp = big.reject{|e| e == :a}

alpha = ([:c]*3 + alpha_tmp + [:c]*3).each_cons(7).reject{|s| not s.find{|e| e == :a}}.map{|s| s[3]}
# e のとこは e[:type] の代わりのイメージで
bigが数百メガ超とかならlazy使ったほうがいいのかな
0341デフォルトの名無しさん2013/09/01(日) 01:12:22.21
array = ["a", "b", "c", "\r", "\n", "d", "e", "f", "\r", "\n", "g"]

temp = []
start = 0
array.each_with_index do |e, i|
if e == "\r"
temp << array.slice(start..i)
start = i + 1
end
end


なんでgが切り出されないのでしょうか?
0342デフォルトの名無しさん2013/09/01(日) 01:50:12.54
期待する出力を具体的に述べたまえ
0343デフォルトの名無しさん2013/09/01(日) 01:57:45.89
"abc\r\ndef\r\ng".split("\r\n")
のようなことをしたいのだろうか。。。
0344デフォルトの名無しさん2013/09/01(日) 02:18:47.26
やりたいことを説明してもらったほうがいいような気がする
splitとかscanを使うと平易に書けるかもしれない
0345デフォルトの名無しさん2013/09/01(日) 06:12:15.59
文字入力をeach_charで受けるとかアホなこと書いた人がいるから…

Rubyでは標準入力/ファイル読み混みは行単位または文字列全体として受け取るのが一般的
0346デフォルトの名無しさん2013/09/01(日) 10:21:03.93
RubyのI/OはUNIXに由来するバイトストリーム(バイト列)が基本で
そのバイトストリームを扱う様々なメソッドが提供されている
・バイトを単位として扱う -- IO#each_byte
・文字を単位として扱う -- IO#each_char
・行を単位として扱う -- IO#each_line
・ストリーム全体を単位として扱う -- IO.read

そして、I/O処理における「反復の制御方法(>>293,316,317)」と
「I/Oのデータ単位」は直交する概念だから、ごっちゃにせずそれらの組合せとして考え、
解決したい問題に対して最適な方法(組合せ)を選ぶ必要がある


で、それはさておき、>>316で紹介した(行をI/Oの単位とする)サンプルコードについて、
irb のようにカーソルキーで履歴/行編集ができるよう改造してみた
  http://play.island.ac/codepaste/code?id=1554

標準ライブラリのreadlineとRuby1.9で導入されたEnumeratorクラスの応用になるけど、
Enumuratorクラスはなかなか面白い
0347デフォルトの名無しさん2013/09/01(日) 11:04:03.73
>>342-344
temp = [ ["a", "b", "c", "\r"], ["\n", "d", "e", "f", "\r"], ["\n", "g"]]


これを期待しているんです。
0348デフォルトの名無しさん2013/09/01(日) 11:05:22.42
a = 12345

下2桁45を取得方法をおしえて
■ このスレッドは過去ログ倉庫に格納されています