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/
0795デフォルトの名無しさん
2016/09/05(月) 02:24:10.75ID:SdDvLzP6これをテストするために"test.bat"を作って、
> test.bat *.txt
という感じでテストしました。
foo(bar).txt
foo(bar)[hoge-huga_fizz].txt
というファイルに対しては、
foo(bar)_.txt
foo(bar)[hoge-huga_fizz]_.txt
となることを期待しましたが
foo(bar)_.txt
foo(bar)__.txt
となります。
色々試したところ、"_"を"a"に変えたり、ファイル名を変更すると期待した挙動になります。
アンダースコアはファイル名的に特別だったりしますか。
ハマりまくっているので助けてください…
0796デフォルトの名無しさん
2016/09/05(月) 02:31:07.88ID:B0VMf5p9codepadなんかで投稿しなおしてみては
0797794
2016/09/05(月) 02:42:18.42ID:SdDvLzP6http://codepad.org/phgMbtNs
0798デフォルトの名無しさん
2016/09/05(月) 03:00:37.69ID:vxYcnkVP投稿のために短く切り詰めたとかじゃなく
そりゃ大変だ
教科書投げ捨てる案件だなコレ
0799デフォルトの名無しさん
2016/09/05(月) 03:17:25.42ID:B0VMf5p9まあともかくdst_filenameには想定通りの文字列が来てるみたいだから、batファイルの問題なんじゃないか
windowsのことはわからん
0800デフォルトの名無しさん
2016/09/05(月) 04:09:04.01ID:DasxJQQ9echo %%f
ruby test.rb %%f
)
こうじゃない?
bat 使わずに ruby だけでやった方が楽だと思うけど。
0801デフォルトの名無しさん
2016/09/06(火) 00:57:19.17ID:JK1a3Uc+せめて、PowerShell_ISE だろ
0802デフォルトの名無しさん
2016/09/06(火) 17:01:21.99ID:XKZPS+fP0803794
2016/09/06(火) 22:28:35.50ID:yRSBEbJdありがとうございました。
0804デフォルトの名無しさん
2016/09/07(水) 06:36:39.93ID:apKIFhKKexit if ARGV.empty? || !File.exist?(ARGV[0])
src_filename = ARGV[0]
begin
dst_filename = src.filename.sub(/.\K(\.)(?=[^.]+$)|$/,TAIL+'\1')
end while File.exist?(dst_filename)
p dst_filename
0805デフォルトの名無しさん
2016/09/07(水) 10:51:39.61ID:dMgwZegprubyをconfigureかmakeまでしたら
make distcleanやっても消えないファイルがあるんですが仕様ですか?
この状態でconfigure && makeすると
executable host ruby is required. use --with-baseruby option.
なって途中で止まっちゃうんです。何でですか?
0806デフォルトの名無しさん
2016/09/07(水) 11:43:57.58ID:mGf42UhLをそのまま訳すなら「動かせるrubyが必要だから--with-baserubyオプション使えよ」って事になる
ぐぐったら色々出てくるけど、ソースからコンパイルしてインストールしようとしてるの?
情報不足だからこれ以上はわからない
インスコするならrbenvとかRPM使ったほうが楽に入れられると思う
0807デフォルトの名無しさん
2016/09/07(水) 12:03:10.18ID:YSZpbVenおまいが悪い
ruby 側の問題
ループ中でファイルが増えてるので
同じファイルにアクセスし続けてる
ファイル一覧を一旦リストに入れてから処理すれば成功するだろう
0808デフォルトの名無しさん
2016/09/07(水) 12:05:38.78ID:YSZpbVen原因はディレクトリのソート順かもしれんな
いずれにしてもループの要素をループ中で増減するのは危険
0809デフォルトの名無しさん
2016/09/07(水) 21:57:51.62ID:tAhMeQ6s0810デフォルトの名無しさん
2016/09/08(木) 00:34:49.37ID:zamWLbBna_.txt ファイルが作られた後、それがbatのループに拾われて、
a__.txt ファイルが作られるとか?
別のディレクトリに、ファイルを作るとか、
ループ終了後に、まとめてファイルを作るなど、排他的に処理すべき
>>805
>make distcleanやっても、消えないファイルがあるんですが、仕様ですか?
makefileの、distcleanの所を見れば?
0811デフォルトの名無しさん
2016/09/08(木) 09:23:30.37ID:gPBbc6Mn別に問題ない
0812デフォルトの名無しさん
2016/09/08(木) 17:03:47.71ID:vq3pb7wp以下のようなJSONファイルをJSON.parseしてhogeに格納しました
[ { "id":"1","kana":"あ","boin":"a" } ]
この状態で「p hoge.class」するとArryを返されます
JSONファイルをこうすると
{ "id":"1","kana":"あ","boin":"a" }
Hashを返されます
[{…},{…},{…}]のJSONファイルをHashに格納したいのですが
なにか良い方法はありませんでしょうか
よろしくお願いします!
0813デフォルトの名無しさん
2016/09/08(木) 18:11:48.06ID:uHWEQ8CC[ { "id":"1","kana":"あ" }, { "id":"2","kana":"い" }, { "id":"3","kana":"う" } ]
がどう変換されたいのか書いてみて。
0814デフォルトの名無しさん
2016/09/08(木) 20:24:23.21ID:gPBbc6Mn0815デフォルトの名無しさん
2016/09/08(木) 21:19:39.88ID:5PY6byd9hoge.inject({}) {|result, item| result.merge(item) }
hoge.inject({}, &:merge) # 省略形
0816デフォルトの名無しさん
2016/09/08(木) 21:29:09.66ID:s09Hu+LE0817デフォルトの名無しさん
2016/09/08(木) 22:09:36.89ID:gPBbc6Mn[*1..9].reduce(&lambda{|a,b|a+b}) #=> 45
少なくとも1.8.7の頃からできるよ
0818デフォルトの名無しさん
2016/09/08(木) 22:21:38.10ID:s09Hu+LEinject/reduceは意図的に両方OKな設計にされてるのね
0819デフォルトの名無しさん
2016/09/09(金) 04:17:17.09ID:LpeB3e0iary = [ { "id":"1","kana":"あ" }, { "id":"2","kana":"い" }, { "id":"3","kana":"う" } ]
h = ary[1]
p h
{:id=>"2", :kana=>"い"}
0820デフォルトの名無しさん
2016/09/09(金) 07:40:28.22ID:Lk44lMhwbat でやりたいことは、コマンドライン引数のワイルドカード展開なんだろうけど、
# test.rb
p ARGV
---
test.rb *.txt
って、やってごらん。
マニュアルに書かれているようにワイルドカード展開に `*', `?', `[]', `**/' が使える。
Windows環境で []等を含めたければ ''括る、とも書いてあるね。
0821デフォルトの名無しさん
2016/09/09(金) 13:22:13.98ID:nAt2a2k9そのままやればいいんじゃないの?
hash1, hash2, hash3 = JSON.parse(json_string)
0822デフォルトの名無しさん
2016/09/10(土) 11:26:54.07ID:0WfpQ0VBfalse
:end
>ruby -e ' p false && echo;p :end'
false
p :end'
Windowsで'-e'に対してシングルクォート(')でスクリプトを書くと
'|' や '&' や '&&' がコマンドプロンプトのコマンドとして認識されてしまうんですがおま環ですかね?
ruby 2.3.1p112 (2016-04-26 revision 54768) [x64-mingw32]
Windows8.1(x64)
0823デフォルトの名無しさん
2016/09/10(土) 11:36:17.02ID:0WfpQ0VB無視してくださいorz
0824デフォルトの名無しさん
2016/09/10(土) 13:37:43.64ID:QUVRyXDh0825デフォルトの名無しさん
2016/09/11(日) 16:04:49.34ID:4fbcKkyuどのように書けばよいのでしょうか
str == (("apple") || ("banana"))
のようにかけるかと思ったのですがうまくいきませんでした
これは論理演算子の左辺がfalseだった場合、右辺は実行されないというrubyの仕様によるものだということはわかったのですが、
ではどうしたらいいのかということがわかりません
0826デフォルトの名無しさん
2016/09/11(日) 16:06:07.87ID:qOBSijlm0827デフォルトの名無しさん
2016/09/11(日) 16:16:38.56ID:4fbcKkyu教えていただきありがとうございます
助かりました
0828デフォルトの名無しさん
2016/09/11(日) 16:32:54.36ID:UPswGxCa!!(str =~ /\A(apple|banana)\z/)
やり方はいろいろ
0829デフォルトの名無しさん
2016/09/11(日) 18:08:52.74ID:7mVeUw5e0830デフォルトの名無しさん
2016/09/13(火) 08:22:10.35ID:LgDBG7c/0点
論理和
論理積
コード(演算子)の処理順序
などを少し整理する事をすすめる
0831デフォルトの名無しさん
2016/09/13(火) 16:29:06.06ID:aXWSAFy4正規のURLだけの情報えお拾いたいのですがどのような方法がありますでしょうか?
0832デフォルトの名無しさん
2016/09/13(火) 16:35:24.92ID:aXWSAFy4anemone.skip_links_like /除外対象のURLパターン/
で文字化け部分を指定しても改善にはいたりませんでした。
0833デフォルトの名無しさん
2016/09/13(火) 16:36:46.35ID:80RPfzdF0834デフォルトの名無しさん
2016/09/13(火) 16:45:49.24ID:aXWSAFy4URLエンコードです。
デコードすると正規のURLに変換できます。
0835デフォルトの名無しさん
2016/09/13(火) 16:46:32.94ID:Z1s//V7/%なしを正規として扱うのはわかってやらないのならオススメしない。
0836デフォルトの名無しさん
2016/09/13(火) 16:51:13.41ID:80RPfzdF一応検索したら出てきたもの
http://qiita.com/foloinfo/items/435f0409a6e33929ef3c
0837デフォルトの名無しさん
2016/09/13(火) 17:04:47.99ID:mdhMcfhGfocus_crawl で、いらないとお前が思うリンクを弾いたら?
0838デフォルトの名無しさん
2016/09/13(火) 17:19:43.00ID:aXWSAFy4参考リンクの情報ありがとうございます。
一通り試してみますm(_ _)m
>>837
ご返信ありがとうございます。
具体的に申しますと、
[ → %5B
] → %5D
のように、カッコ部分がエンコード/デコードで重複して出力されます。
link.to_s.matchで[●●]や%5B●●%5Dといった条件付けで巡回ページを指定しても、
両方のパラメータが出力されてしまうようです。
0839デフォルトの名無しさん
2016/09/13(火) 19:00:51.61ID:sMHYkxL70840デフォルトの名無しさん
2016/09/15(木) 01:10:39.64ID:EGe9UG5cクラスにincludeした際にmoduleの別のインスタンスメソッドから呼び出すために用意してみたんだけど…
ちなみにクラスメソッドのような使い方は想定してないのでmodule_functionとかは利用しなかった
0841デフォルトの名無しさん
2016/09/15(木) 19:46:09.23ID:8swlNZts{ :name => "bar", :address => "piyopiyo"} ]
↓で「data」の中のハッシュを取り出せました
data.each do |list|
puts list[:name]
puts list[:address]
end
「data」から「:address」に"fuga"を含むハッシュだけを取り出したいんですがうまくいきません
どうかアドバイスをお願いしますm(_ _)m
0842デフォルトの名無しさん
2016/09/15(木) 20:05:06.44ID:2bVUIpAa0843デフォルトの名無しさん
2016/09/15(木) 21:56:41.38ID:4Lbf8ykuありがとうございます
試して見ます!
0844デフォルトの名無しさん
2016/09/15(木) 23:26:56.53ID:UCCDVfNQhttps://ideone.com/xp2IB6
0845デフォルトの名無しさん
2016/09/16(金) 01:04:31.60ID:egLfcP1Pfugafgaではなくgafで抽出したい場合は正規表現使う感じでしょうか
0846デフォルトの名無しさん
2016/09/16(金) 06:12:33.38ID:DLAZUyzS0847デフォルトの名無しさん
2016/09/16(金) 07:56:10.76ID:6a7QMzs2構造化データを扱う際、Hashの配列よりも、
クラスまたは、Struct(簡易クラス、クラスジェネレータ)のような専用の型を、使った方がいい
data[:name]
キー名のような実装の詳細が、隠蔽されず表に出てくる。
また、存在しないキーは、nilとなる
Person = Struct.new(:name, :address) #定数に代入
data = Person.new("foo", "fugafuga")
data.name
Structでは属性になるから、getter, setter も付いているし、
存在しない属性名でアクセスすると、NoMethodErrorになる
0848デフォルトの名無しさん
2016/09/16(金) 09:30:54.73ID:DLAZUyzS複雑にネストしたJSONとかでもそっちのが良いの?
うまく使いこなせる気がしない
0849デフォルトの名無しさん
2016/09/16(金) 09:37:52.73ID:6a7QMzs2data.select{|it| it[:address].match(/gaf/) }
0850デフォルトの名無しさん
2016/09/16(金) 09:44:38.44ID:6a7QMzs2一方、項目がコロコロ変わるような場合、
何の項目が来るのか、わからない場合は、Hashがいい
0851デフォルトの名無しさん
2016/09/16(金) 10:32:56.00ID:S3qmK1RfEffectiveRubyの項目10を読んでみました
プログラミング初心者なので書いてあることの半分も理解できませんが
クラス化して汎用性のあるものを作れるように最初から読み込んでみます!
なんとなくやってみたいことが動くというところまでは行きたいので
文字のマッチングから>>841の「data[0]」を出力できるところまでやってみたいと思います
ありがとうございます!
0852デフォルトの名無しさん
2016/09/16(金) 23:44:30.69ID:6a7QMzs2まず「たのしいRuby 第5版、2016」で文法を勉強すべし
クラス・Structは、DBのレコードのように、項目が固定されている場合に使う
一方、Hashは、事前に項目(キー)がわからない場合。
例えば、文章に出てくる英単語を、使用回数が多い順に並べるとか
0853デフォルトの名無しさん
2016/09/17(土) 00:12:19.00ID:PduQX1gXそのレベルの本はいらんやろ。
0854デフォルトの名無しさん
2016/09/17(土) 15:43:11.73ID:3YKrhMdtみないた、newを使わないインスタンスの生成方法って可能ですか?
以前どこかでこの形を見たような記憶があるのですがとてもあやふやで、
確認しようと色々さがしてみたら見当たりませんでした
やはり記憶違いでしょうか?
0855デフォルトの名無しさん
2016/09/17(土) 15:43:54.52ID:VbfmfVd0Foo というメソッドを定義すればいい
0856デフォルトの名無しさん
2016/09/17(土) 18:42:02.15ID:9X+eFsUZ最初にカードの枚数が与えられ、次にカードのシンボルと数字がスペース区切りのセットで与えられます。
例えば、スペードの5なら「S 5」と言った感じです。自分はまだ初心者なので効率的なやり方がわからず、
とりあえず、case文で場合分けして配列に入れるやり方を考えてみました。以下が組んだコードです。
num=gets.to_i
s=[]
h=[]
c=[]
d=[]
i=1
while i<=num
symbol, numeric = gets.chomp.split
case symbol
when symbol=="S"
s<<numeric
when symbol=="H"
h<<numeric
when symbol=="c"
c<<numeric
when symbol=="d"
d<<numeric
end
i+=1
end
print s
とりあえず確認がてらスペードの配列を表示させようとしたら、空配列しか返ってきません。どの部分がおかしいのか
ご指摘いただけませんでしょうか。
0858デフォルトの名無しさん
2016/09/17(土) 19:21:36.45ID:Bzzyu0/Qcase when構文がおかしいので再確認を
caseで場合分けせんでも
cards = Hash.new{|h,k| h[k] = [] }
while i <= num
symbol, numeric = gets.chomp.split
cards[symbol] << numeric
i += 1
end
でいいんじゃないかなと思うんだが
0859デフォルトの名無しさん
2016/09/17(土) 19:39:53.49ID:9X+eFsUZうぬ・・・いつのまに・・・めんぼくない
>>858
おお、動きました。すごいな。あまりよくわからないけど、なんとなくわかりました。ありがとうございました。
とにかく、「動いた」のが素晴らしい。あと、できれば、前述のコードが意図したとおりにならない理由を
教えていただけるとありがたいです。
0860デフォルトの名無しさん
2016/09/17(土) 21:27:40.73ID:owPS/qUicase symbol
when 'S'
s << numeric
......
まあこの場合は when 'S' then s << numeric と1行で書くのもアリ
0861デフォルトの名無しさん
2016/09/17(土) 22:34:10.05ID:/l22qB3WRubyやめてPythonへ行けばいい
0862デフォルトの名無しさん
2016/09/17(土) 23:58:36.86ID:owPS/qUiclass Foo
def self.[](a)
new(a)
end
end
foo = Foo[0]
p foo.class #=> Foo
0863デフォルトの名無しさん
2016/09/18(日) 09:35:45.27ID:MJhMf8Puなるほど!書かれるまで全く気付かなかった・・・確かに書き方がおかしい
ありがとうございます。
0864デフォルトの名無しさん
2016/09/18(日) 17:41:19.27ID:aAaRWXxI0865デフォルトの名無しさん
2016/09/18(日) 17:53:33.43ID:hCSpHgBW0866デフォルトの名無しさん
2016/09/18(日) 20:19:58.81ID:arvHcK2+0867デフォルトの名無しさん
2016/09/18(日) 21:46:51.64ID:zoqzORWfcase symbol を
case だけにすれば、if 〜 elsif 〜 elsif 〜 相当のことが出来る。
条件式の位置が揃うので、if,elsif より良い感じ。
0868デフォルトの名無しさん
2016/09/18(日) 23:03:18.09ID:7E6Tur9dありがとうございました
やはり記憶違いのようでした
ですが、ググッている時に[]=のオーバーロード(?)に関する話を見つけられました
下の感じのコードです
class Foo
def []=(a,b,c,d)
p a,b,c,d
end
end
Foo.new()[1,2,3]=4
0869デフォルトの名無しさん
2016/09/18(日) 23:41:47.34ID:oCekGsiM0870デフォルトの名無しさん
2016/09/19(月) 12:13:31.03ID:iIvzjj/tトランプのカードでは、カード[マーク][数字]のように、
2次元配列で管理すると、うっとおしいから、1次元配列にした方がいい
それで幾つか、変換関数を作っておく
0871デフォルトの名無しさん
2016/09/19(月) 13:04:45.74ID:GqLEG2EIいろいろな表現の仕方があるんですねー
>>870
なるほど…自分はまで全然経験値が足りないので、とにかく動きさえすればいいやと思って
コードを組んでるのですが、これがまた見事に動かないという…
とにかく数をこなそうと思います。ありがとうございました。
0872デフォルトの名無しさん
2016/09/19(月) 16:36:48.51ID:H3IN7nVePythonじゃあ駄目なの?
利点と差別化を教えて
0873デフォルトの名無しさん
2016/09/19(月) 16:40:16.95ID:fIqWe4kn特に無名関数、クロージャーがすごく書きづらい。
あとデバッグ用にわざと目立つように行頭にprintくのが出来なかったり
行を入れ替えたりするだけでインデントを揃えさせられるのが面倒。
0874デフォルトの名無しさん
2016/09/19(月) 18:19:57.44ID:jZTV89ee使ってるのはRubyじゃなくてRails
単体でバッチ処理書いたりするときはPython使うわ
RoRと同等の使い勝手のPython on Railsがあれば迷わず乗り換えるけど、
やっぱりRubyはフレームワークのDSLとして使うには最適な言語なんだと思うよ
0875デフォルトの名無しさん
2016/09/19(月) 18:22:24.29ID:EdcTl4fm> なんであらゆる面でPythonに劣っていると言われる
どこでその情報を手に入れたのか知らんが、「あらゆる面で」とかいうdisり
ワードをぶっこんでるような記事に論理性はほぼないから質の低さを笑うぐらいしか
読む価値ないよそれ
0876デフォルトの名無しさん
2016/09/19(月) 19:49:24.51ID:FmjNH1Zy0877デフォルトの名無しさん
2016/09/20(火) 00:19:19.79ID:w6mPkDpe時代遅れの言語よ
0878デフォルトの名無しさん
2016/09/20(火) 01:37:58.83ID:fS5Ni7aU0879デフォルトの名無しさん
2016/09/20(火) 08:18:08.16ID:9l0NUqqbキッシュイーターよ
0880デフォルトの名無しさん
2016/09/20(火) 09:49:01.89ID:Xg0W+RA8Pythonに乗り換えます
0881デフォルトの名無しさん
2016/09/21(水) 16:10:02.25ID:zFZPh8Mh頂点(xyzの3要素)を列ベクトルとして、4x4の変換マトリクスに掛け合わせると
:in `*': Matrix dimension mismatch (ExceptionForMatrix::ErrDimensionMismatch)
というエラーがでちゃう
これ、頂点側にもw要素必要ってことなの?
0882デフォルトの名無しさん
2016/09/21(水) 16:18:10.30ID:23vZJdQL0883デフォルトの名無しさん
2016/09/21(水) 16:30:40.93ID:zFZPh8Mh列ベクトルじゃなくて行ベクトルかけてた
ほんとごめんなさい
0884デフォルトの名無しさん
2016/09/21(水) 17:18:28.43ID:23vZJdQL0885デフォルトの名無しさん
2016/09/21(水) 17:23:40.85ID:ib8am8Zc馬鹿には無理
0886デフォルトの名無しさん
2016/09/21(水) 21:50:37.29ID:PZB1d7j5http://vipprog.net/とpaiza見てるんだけど、前者はちょっと問題が難しくて、paizaはBまでやったけど結果が出ないのでわかりにくい
便利なサイト、分かりやすいのがあれば嬉しい
0887デフォルトの名無しさん
2016/09/21(水) 21:55:25.11ID:23vZJdQL0888デフォルトの名無しさん
2016/09/21(水) 22:36:45.56ID:lN+U+lYoyukicoder がいいと思うよ
0889デフォルトの名無しさん
2016/09/21(水) 23:23:10.02ID:lMM9KPqs0890デフォルトの名無しさん
2016/09/21(水) 23:27:54.15ID:lN+U+lYoそう思う人はわざわざ書き込まないよ
なぜなら時代遅れなものに興味は持たないからねw
0891デフォルトの名無しさん
2016/09/22(木) 00:55:23.81ID:gXd2kX85ユキコーダーを下からぽちぽちやっていきます
ありがとう
0892デフォルトの名無しさん
2016/09/22(木) 01:31:58.64ID:XjtOZmELそのまま競技プログラミングの世界においでw
この世界で使う英語はパターンも対して多くないから、yukicoder で問題パターンをある程度把握できたら
海外の問題文もそれほど苦もなく読めるようになるよ
0893デフォルトの名無しさん
2016/09/23(金) 00:04:42.79ID:sc2fhvDP進めるべき参考書を入門書からフローチャートで教えてくれたら入信しようと思ってるんだが教えてくれない?
0894デフォルトの名無しさん
2016/09/23(金) 00:07:59.29ID:jTBVehdT入信とか考えてたらロクなことないよ
どっちも使えるようになるぐらいの気概を持たなきゃ
■ このスレッドは過去ログ倉庫に格納されています