Ruby 初心者スレッド Part 58 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2016/03/23(水) 21:16:44.36ID:6HedlyzC質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 57
http://peace.2ch.net/test/read.cgi/tech/1426165733/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
0607デフォルトの名無しさん
2016/08/02(火) 21:15:40.05ID:G8b1Dkivでは、二行目を単体で読み込む方法はどうするんでしょうか?
あと一行目と二行目を両方読み込む場合はどうするんでしょうか?
0608デフォルトの名無しさん
2016/08/02(火) 21:20:03.60ID:bMxB9+Teカレントディレクトリ中にある全てのtxt形式のファイルを開く場合
Dir.glob('./*.txt') do |fn|
File.open(fn, 'r:utf-8') do |f|
line = f.readline
if /条件/ =~ line
end
end
end
0609デフォルトの名無しさん
2016/08/02(火) 22:04:55.90ID:R1uEEgNefoo = open("フォルダ名/ファイル名.txt").
line1 = foo.readline # 一行目
line2 = foo.readline # 二行目
大した量じゃないんだからマニュアルを読もう
http://docs.ruby-lang.org/ja/2.3.0/class/IO.html
0610デフォルトの名無しさん
2016/08/03(水) 00:10:59.84ID:qya5GR80http://vipper.2ch.net/test/read.cgi/news4vip/1470062380/
これはrubyのステマするチャンス
0611デフォルトの名無しさん
2016/08/03(水) 00:39:14.55ID:3mARGs2B効率は良くないけど、EXCELで使う程度の数かつ、何十万回も計算を繰り返したりしないなら。
s=“A”; 0.upto(n){s.succ!}; p s
s=“ZZ”; p (“A”..s).to_s.size
0612デフォルトの名無しさん
2016/08/03(水) 02:00:46.62ID:W0lh95XIinject厨が書いてみた:
https://ideone.com/PSRQnw
0613デフォルトの名無しさん
2016/08/03(水) 13:48:51.38ID:zdWIlhYUrubyだと“Z”.nextで”AA”になるから、”A”をスタートとして”ZZZ”までnextをループさせた回数=列の番号になるよ
0614デフォルトの名無しさん
2016/08/03(水) 15:07:33.08ID:mbys/AN5Z -> 26
の 26進数なんだよ
だから
ZZZ -> 26*26*25 + 26*25 + 25 + 1
と瞬時に判る
0615デフォルトの名無しさん
2016/08/03(水) 15:10:29.88ID:mbys/AN5桁の0に相当するものがないから
実際の値は違う
もうちょっと工夫が要るけど
考え方は 26進数
0616デフォルトの名無しさん
2016/08/03(水) 15:17:25.06ID:B5cRJMaSA-Zを A=0, Z=25 の26進数とみなして
s + B..B(Bがsの桁数個) - B が列の番号
だから>>603の下の式のようになる
これの逆変換が求めるものだけど素直にやると桁の左にあるAがなくなってしまうので
一旦 BA..A(Aはsの桁数個)を足しておいて最後にBを削れば良い
それが>>603の上の式
0617デフォルトの名無しさん
2016/08/03(水) 15:26:35.51ID:mbys/AN50618デフォルトの名無しさん
2016/08/03(水) 15:31:21.63ID:B5cRJMaS0619デフォルトの名無しさん
2016/08/03(水) 15:43:49.69ID:B5cRJMaS(n + 2 + 24*26**((25*n + 26).bit_length/4.7).to_i/25).to_s(26).tr('0-9a-p', 'A-Z')[1..-1]
0620デフォルトの名無しさん
2016/08/03(水) 15:51:40.29ID:kO+977FMbk = xl.Workbooks.Add
ws = bk.Worksheets(1)
ws.Cells(1,1).Formula='=column($ZZZ$1)'
puts ws.Cells(1,1).Value
bk.Close
xl.Quit
0621デフォルトの名無しさん
2016/08/03(水) 16:03:32.72ID:W0lh95XIhttps://ideone.com/gO9N9x
これならPerlやPythonのような普通の手続き型言語を知っていれば
容易く読めるし、普通のプログラマが引き継いでも問題無く
保守できるのではないかと思われ
0622デフォルトの名無しさん
2016/08/03(水) 16:46:12.54ID:/NIG+3Tlもうちょい短くできそうでできない
0623デフォルトの名無しさん
2016/08/03(水) 16:53:46.46ID:/NIG+3Tlもうちょい短くできそうでできない
0624デフォルトの名無しさん
2016/08/03(水) 16:56:15.69ID:/NIG+3Tlあと'@A-Y'じゃなくて'@-Y'やな。動くけど
0625デフォルトの名無しさん
2016/08/03(水) 17:02:40.83ID:B5cRJMaSn.to_s(26).tr('0-9a-p',r='@-Y').sub(/(.)@/){$1.tr('A-Z',r)+'Z'}.delete('@') # 75 B
(n+2+24*26**Math.log(25*n+26,26).to_i/25).to_s(26).tr('0-9a-p','A-Z')[1..-1] # 77 B
0626デフォルトの名無しさん
2016/08/03(水) 17:17:54.18ID:/NIG+3Tl0627デフォルトの名無しさん
2016/08/03(水) 18:04:32.66ID:/NIG+3Tl#97B
rubyらしさを捨ててtap使わなければ4B減る
0628デフォルトの名無しさん
2016/08/03(水) 18:06:33.96ID:mbys/AN50629デフォルトの名無しさん
2016/08/03(水) 18:09:55.37ID:B5cRJMaSMath.logを使うのはいつでも正しいよ
>>626が言ってるのは>>623のこと
bit_lengthを使う方も10**20000くらいまでは正しい
0630デフォルトの名無しさん
2016/08/03(水) 18:17:06.18ID:B5cRJMaSlogも9.603431447*10**18989までは正しく動作するよ
0631デフォルトの名無しさん
2016/08/03(水) 18:25:45.78ID:mbys/AN50632デフォルトの名無しさん
2016/08/03(水) 18:28:03.24ID:l8cxGlGj0633デフォルトの名無しさん
2016/08/03(水) 18:34:18.83ID:mbys/AN5余計な制限のあるコードにはコメントが必須
#logも9.603431447*10**18989までは正しい
+46Bだな
0634デフォルトの名無しさん
2016/08/03(水) 18:39:46.41ID:B5cRJMaSなんかキレてんの? システムに依存しない、アホみたいにでかい数値に対してすらいつでも正しいコードなんて存在するわけないだろ
0635デフォルトの名無しさん
2016/08/03(水) 19:05:26.45ID:mbys/AN5切れてないよ
0636デフォルトの名無しさん
2016/08/03(水) 19:14:20.38ID:B5cRJMaSいい加減黙ります ゴルフスレとかあったら面白いかもね
0637デフォルトの名無しさん
2016/08/03(水) 23:34:22.20ID:W0lh95XI・関数型 :(旧) >>612 --> (新) https://ideone.com/OQLdlR
・手続き型:(旧) >>621 --> (新) https://ideone.com/Ja6tP9
String#succ の存在も初めて知ったし、勉強になったわ
0638デフォルトの名無しさん
2016/08/04(木) 01:32:56.67ID:feZwYdLFEnumerator#with_indexはもっと流行っていいと思うんだ
使ってもそんなに短くはならないんだけどさ
0639sage
2016/08/04(木) 01:37:51.37ID:2HyRwUYqstr.strip.upcase.unpack('C*').inject(0){|result, item| result * 26 + item - 0100 }
end
def cel_str( n )
str = ""
while n > 0
n, r = (n - 1).divmod( 26 )
str << (r + 0101).chr
end
str
end
0640デフォルトの名無しさん
2016/08/04(木) 14:01:54.35ID:2HyRwUYq最後は
str.reverse
でした。
0641デフォルトの名無しさん
2016/08/04(木) 23:00:36.83ID:c9zwl1qOどのようにすれば、回避できるでしょうか?
■症状:インサートした日本語文字が文字化けする。
title =
0642デフォルトの名無しさん
2016/08/04(木) 23:04:28.59ID:c9zwl1qOSQLの使用に関して質問です。
どのようにすれば、回避できるでしょうか?
■症状:インサートした日本語文字が文字化けする。
title="あいうえお123"
DB = Mysql.new('host','name','pass','test01')
sql = "UPDATE `test01`.`table01` SET `title` = '#{title}'WHERE `table01`.`id` = '4';"
DB.query(sql)
0643デフォルトの名無しさん
2016/08/04(木) 23:36:28.77ID:QKnNcils0644デフォルトの名無しさん
2016/08/05(金) 06:51:27.16ID:tltzsolzひどいけどこれで十分
0645デフォルトの名無しさん
2016/08/05(金) 07:12:44.43ID:x8TUq60L0646デフォルトの名無しさん
2016/08/05(金) 13:38:20.94ID:LJe/qM3fperlは論外
0647デフォルトの名無しさん
2016/08/05(金) 15:48:28.22ID:UhWsfPtN>>604 です
唐突に質問なのですが
そもそもDXRubyでユーザーに文字を入力させ、それを扱うにはどうすれば良いのでしょうか
0648デフォルトの名無しさん
2016/08/05(金) 15:49:58.62ID:UhWsfPtN連投すみません
RPGの名前入力のようなものです
あと、一旦画面を消すのはどのようにするのでしょうか?
タイトルから本編へとかそういう感じです
結構しらべたのですが.....
0649デフォルトの名無しさん
2016/08/05(金) 16:21:49.83ID:teNswV+zこのへんの基礎知識がないとAPI探せないし何渡していいのかもわからないよ
0650デフォルトの名無しさん
2016/08/05(金) 18:50:19.50ID:UhWsfPtN正直ありません
Rubyが一番最初にやりました
VBSやBASICはやったことがありますが.....
DXRubyを入れて調べながらやっているところです
0651デフォルトの名無しさん
2016/08/06(土) 01:12:59.09ID:8Rl0Ybxyチュートリアルでもやれば、わかるのでは?
0652デフォルトの名無しさん
2016/08/06(土) 04:20:54.79ID:w5zQ+Fii0653デフォルトの名無しさん
2016/08/06(土) 05:53:35.02ID:2mFu6MHmhttps://support.office.com/ja-jp/article/Excel-の仕様と制限-ca36e2dc-1f09-4620-b726-67c00b05040f
0654デフォルトの名無しさん
2016/08/06(土) 07:35:29.07ID:aQkr0mnlチュートリアルには、文字の描画、キーの判定は書いてありますが
全てのキー入力の監視はどうやってやるのかなと.....
0655uy ◆e6.oHu1j.o
2016/08/06(土) 07:40:48.99ID:TO2ybUlLDXRubyにそういうのをやってくれる関数はないよ
ていうか名前をアルファベットに限定するなら、そこまで長いコードにならないから
ユーザー入力部分を自分で書いてみれば良い
DXRubyは綺麗に小さくまとまっている良いライブラリではあるものの
このくらいはさっと書けないと、機能は結構少ないライブラリだから今後も苦労する事になるでしょう
0656uy ◆e6.oHu1j.o
2016/08/06(土) 07:45:28.31ID:TO2ybUlLこんな感じで取得できる
Window.loop do
x = Input.keys
next if x.empty?
p x
end
0657uy ◆e6.oHu1j.o
2016/08/06(土) 07:51:12.27ID:TO2ybUlLいや、DXRuby扱うのにそういう知識は全然いらない
そもそもゲームのライブラリってのは
DirectXやOpenGLの勉強をすっ飛ばして使えるようにライブラリ作者が上手くまとめてくれているもの
0658デフォルトの名無しさん
2016/08/06(土) 08:14:46.43ID:aQkr0mnlありがとうございます!
keysで取得できるんですね!
ありがとうございます!
0659デフォルトの名無しさん
2016/08/06(土) 08:28:12.52ID:aQkr0mnlアルファベット限定でいいのでRPGの名前入力をしたいんですが
ユーザーが文字入力したのをnameという変数に記録し
それを画面に表示っていうのはできますでしょうか?
何度も質問本当にすみません
0660デフォルトの名無しさん
2016/08/06(土) 09:21:45.32ID:xpLjq4a+大抵C++のソース眺めるはめになるんだけどね
0661uy ◆e6.oHu1j.o
2016/08/06(土) 10:26:06.77ID:TO2ybUlLちょっと半端な出来だけど暇だったから書いた
https://ideone.com/r48pB5
文字を打ってエンター押したら
case , when の1のほういくから、そこで文字が青色になるサンプルコード
あと使ってるdxrubyのAPIのInput.set_repeatはこれね
http://mirichi.github.io/dxruby-doc/api/Input_23set_repeat.html
0662uy ◆e6.oHu1j.o
2016/08/06(土) 10:55:37.26ID:TO2ybUlLその辺りのコードは、ゲームでいうと「シーン管理」という
簡単な方法としては
phaseって変数に値を入れて
https://ideone.com/jJPN3k
こんな風に書くのが初歩的なやり方かな
工夫していくと、この辺も奥が深いロジックになるから、
自分なりにクラス化(シーン管理クラス)とか考えてみると良い
ついでに俺に遜った敬語いらんから
2chで身を低くしても得るもの無いぞ
0663デフォルトの名無しさん
2016/08/06(土) 14:50:23.69ID:aQkr0mnlありがとうございます!
whenが9なのはなにか意味があるんでしょうか?
0664uy ◆e6.oHu1j.o
2016/08/06(土) 18:32:46.50ID:TO2ybUlLたいして意味はない
0665デフォルトの名無しさん
2016/08/06(土) 19:22:34.03ID:P6FYCdC3最大値っぽい値にしてる ってとこだろう
0666uy ◆e6.oHu1j.o
2016/08/06(土) 20:43:13.60ID:TO2ybUlLそんなところ
だけど、別にそこまで真似る必要ないからね
自分のコードの癖に突っ込むという、鋭い突っ込み
0667デフォルトの名無しさん
2016/08/06(土) 23:11:34.04ID:aQkr0mnl例えば
test1.rbとtest2.rbいう2つのプログラムファイルがあるとして
test1.rbにはtest2.rbの内容をを実行させるというのはどうやってやるのでしょうか?
自分で、クラスを定義するのでしょうか?
test2.rbの内容はWindow.draw_fontを使いたいです
0668デフォルトの名無しさん
2016/08/06(土) 23:38:13.30ID:FykwWLuaKernel#system
0669uy ◆e6.oHu1j.o
2016/08/07(日) 02:19:16.41ID:ARnnbWqntest2.rbにクラス定義して
test1.rbで
require"./test2.rb"
やれば良いんじゃね
>>668
test1.rb側でウィンドウ生成してるって前提あるだろうからそれ無理
0670デフォルトの名無しさん
2016/08/07(日) 07:23:31.37ID:bL6v3Ot9test2.rbの一行目にClass test2
と、書いて
test1.rbにrequireで読み込みます
そこから例えばAキーが押されたらtest2.rbを実行って
どうやるんでしょうか....
0671uy ◆e6.oHu1j.o
2016/08/07(日) 08:44:57.55ID:PWyfS198その辺がまだわかんない段階なら無理にファイルわけしなくていいと思うぞ
rubyで普通にコード書けば小さめのゲームなんて1ファイルで書ききれるから
test1.rb
https://ideone.com/XyyEb2
test2.rb
https://ideone.com/cAxzVK
一応サンプルとしてはこうなるけど、
0672デフォルトの名無しさん
2016/08/07(日) 08:49:56.24ID:bL6v3Ot9本当に有難うございます
自分でも、もう少しリファレンスとか見てみます!
0673uy ◆e6.oHu1j.o
2016/08/07(日) 08:58:26.20ID:PWyfS198暇なだけだからいいよ
ついでにいっとくと、dxrubyにはSpriteクラスってのがあって
このクラスで描画・移動・当たり判定が全部出来る
rubyの基礎を抑えたら>>671こういうコードじゃなくて
http://mirichi.github.io/dxruby-doc/tutorial/sprite.html
↑ここのサンプルみたいな感じで書いていったほうが良い
速度が10倍以上は違ってくるからね
俺不定期でしかこのスレ見ないけど、まぁがんばって
0674デフォルトの名無しさん
2016/08/07(日) 17:34:52.83ID:bL6v3Ot9速度についてですが
例えばifとcaseで同じ処理するとcaseのほうが早いと思うのですが
同じことをするプログラムでも、コードが短いほうが早いとかありますか?
0675デフォルトの名無しさん
2016/08/07(日) 17:58:57.41ID:T8DF/r+jそんなのあったとしても微差。考えるだけ無駄
それよりアルゴリズムのお勉強した方が早い
0676デフォルトの名無しさん
2016/08/07(日) 18:05:45.89ID:gluNCp1xまずは「Rubyはクソ遅い言語である」という事実を受け入れよう。
じゃあなんでそんなに遅い言語が使われているのかというと、
(1)多くのアプリケーションのボトルネックは言語ではなくDBアクセスやネットワークなどの外部要因だから
(2)速度が重要でないケースは結構多いから
ゲームの例で説明すると、
描画はRubyから直接手を出せないので(1)、更新処理は次の更新までに間に合いさえすればいいので(2)に該当するね
もちろん高度なゲームになると(1)や(2)の前提は成り立たなくなるけど、そのときは残念ながらRubyを捨てる時だ。
0677デフォルトの名無しさん
2016/08/07(日) 19:42:22.24ID:bL6v3Ot9なるほど.....遅い言語なのですね.....
逆に、ライブラリなどを使わず
純粋なRubyが得意とするのはどんなものなのでしょうか?
0678デフォルトの名無しさん
2016/08/07(日) 19:49:02.03ID:6muXneSj0679デフォルトの名無しさん
2016/08/07(日) 19:50:02.91ID:bL6v3Ot9そうなのですか.....
ありがとうございます!
0680デフォルトの名無しさん
2016/08/07(日) 20:27:25.95ID:T8DF/r+j遅いけれども書きやすいのがメリット
速度を求めてDirectX使いたいならふつーにC#使うのがよろし
0681デフォルトの名無しさん
2016/08/07(日) 21:07:14.31ID:bL6v3Ot9上記のコードで@@imageというのがありますよね
時々@@とか@から始まる奴があると思うのですが
あれは、何の意味があるのでしょうか?
0682デフォルトの名無しさん
2016/08/07(日) 21:08:49.00ID:6muXneSjこれよめ
http://qiita.com/mogulla3/items/cd4d6e188c34c6819709
0683デフォルトの名無しさん
2016/08/07(日) 21:12:57.96ID:bL6v3Ot9あ、すみません!
ありがとうございます!
0684デフォルトの名無しさん
2016/08/08(月) 11:25:24.34ID:WWplGsDY0685デフォルトの名無しさん
2016/08/08(月) 11:49:51.61ID:qKDY79To0686デフォルトの名無しさん
2016/08/08(月) 13:22:45.98ID:ldi7UiFIrbenv exec って使ってないんですか?
プロジェクト毎にrubyのバージョン指定するときは
rbebv exec bundle exec rails s
みたいに記述するのかと思うのですが、
ネットだと
bundle exec rails sみたいなのばかりなので、
使わないのか、省略できるのか仕組みがわからないです
0687デフォルトの名無しさん
2016/08/08(月) 15:04:46.88ID:KcW4wK3erbenv のソース嫁!
0688デフォルトの名無しさん
2016/08/08(月) 18:14:11.09ID:1QM6yHGZ掛け算には順序があります
0689デフォルトの名無しさん
2016/08/08(月) 20:31:33.35ID:+4ewFkZdこれのライフサイクルを管理するのところなんですが
self.vanish if self.x > 300
ここなのですが
これはx座標300以降のオブジェクト?は描画しないということでいいんでしょうか?
もしも合っているなら例えば250から300の間のような
座標の範囲指定はどのようにやるのでしょうか?
0690デフォルトの名無しさん
2016/08/08(月) 20:46:46.11ID:7oYgKi44じゃないかな。
てかRubyの基本的な制御構文を勉強した方が良さそう
0691デフォルトの名無しさん
2016/08/08(月) 20:49:48.09ID:qKDY79Toとかもいいかな
>>690の言うようにまずは基本的なことを勉強する必要があると思う
この程度すらわからない かつ その都度人に聞いていたんじゃ全然捗らないと思うよ
0692デフォルトの名無しさん
2016/08/08(月) 22:48:37.77ID:+4ewFkZdチュートリアルが完全に理解できるように
DXRubyじゃなくて普通のRubyをまずは勉強してみます
ほんとうにありがとうございました!
0693デフォルトの名無しさん
2016/08/09(火) 15:01:07.73ID:/QwUjUla0694デフォルトの名無しさん
2016/08/10(水) 22:31:03.23ID:uPyxj/T5http://www.tdb.co.jp/tosan/syosai/4191.html
0695デフォルトの名無しさん
2016/08/11(木) 12:06:30.15ID:v2n9djjr0696デフォルトの名無しさん
2016/08/12(金) 00:04:15.74ID:YUzYFiQucronでシェルからrubyを起動した際、requireしてるgemの一つが読み込みエラーしており困っております。
実行パスが違うからなのでしょうが、こういった場合どう解決すればよいでしょうか?
0697デフォルトの名無しさん
2016/08/12(金) 00:30:51.28ID:3GviCvck環境変数PATHも見てみ
Rubyの起動オプションなら、-Idirectory かな?
0698デフォルトの名無しさん
2016/08/14(日) 16:05:38.95ID:qlcn2KoZprintf "%s %s\n", tmp
とやると`printf': too few arguments (ArgumentError)
というエラーになるのですがPrintfに配列は渡せないのでしょうか
0699デフォルトの名無しさん
2016/08/14(日) 16:53:42.36ID:MHXGGTGkprintf "%s %s\n", *tmp
好きな方をどうぞ
0700デフォルトの名無しさん
2016/08/14(日) 18:00:18.07ID:qlcn2KoZありがとうございます
配列としてのObjectじゃなくって配列のポインタを渡すかしないといけないんですね
全てがObjectだからあかんと・・・ありがとうございました
0701デフォルトの名無しさん
2016/08/14(日) 18:03:55.65ID:MHXGGTGkprintf "%s", tmp # => ["a", "b"]
単純に%sが2つあるのにそれに対する引数が1つしかないからtoo few argumentsってなってるんだよ
0702デフォルトの名無しさん
2016/08/14(日) 18:12:25.22ID:qlcn2KoZ展開する用の指示が*なわけですよね、だから参照を渡してやればいいって話ですよね?
基本的にLLにしろなんにしろポインタは意識させない作りになっているだけでないわけじゃないですよね。
0703デフォルトの名無しさん
2016/08/14(日) 18:13:36.98ID:DMp4bkRPhttps://analytics.twitter.com/
Mechanizeを使ってログインするところまでは出来たのですが、
そこから「データをエクスポート」をクリックし、csvのダウンロードまで実行する手順がわからず行き詰まってしまいました。
これはどのように対処すればよいのでしょうか?
0704デフォルトの名無しさん
2016/08/14(日) 21:12:38.18ID:Mh5ntfj4何が困ってるのか全然分からん
もっと困ってるところを具体的に書いてくれ
0705デフォルトの名無しさん
2016/08/14(日) 21:21:33.21ID:DMp4bkRP↓のコードで、とりあえずログイン後のページまではいけていることを確認できたんですが
require 'mechanize'
agent = Mechanize.new
agent.user_agent_alias = 'Windows Mozilla'
url = "https://analytics.twitter.com/user/【ID】/tweets"
agent.get(url) do |page|
form = page.form_with(action: 'https://twitter.com/sessions')
form.fields[0].value = '【ID】'
form.fields[1].value = '【パスワード】'
p form.submit
end
ここから
・「データをエクスポート」ボタンを押す
・csvファイルをダウンロードする
まですすめる手順がわからない状況です。
jsがきかないとダメなようにも見えて、その場合Mechanize以外の手段を組み合わせる必要がありそうな感じですが・・・
0706デフォルトの名無しさん
2016/08/14(日) 22:52:24.64ID:SaGN03aV参照じゃないよ…
Rubyにはポインタの概念がそもそもないから…
■ このスレッドは過去ログ倉庫に格納されています