Ruby 初心者スレッド Part 56©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net
2014/12/13(土) 09:29:12.93ID:DLY4IovQ質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 55
http://peace.2ch.net/test/read.cgi/tech/1403361584/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
0698デフォルトの名無しさん
2015/02/11(水) 15:32:08.71ID:u2Y4u6H8>もしも「右辺と左辺を取り替えて評価しても結果が同じになる」ことを期待しているならば、
代入じゃないんだから、等号の前後で意味が変わるってのは間違いを呼び込みやすい
良くない仕様だと思う。
こういうのに違和感を感じない奴って数学的センスがないんだろうなあ、と思う。
0699デフォルトの名無しさん
2015/02/11(水) 15:46:18.57ID:uxm1HOmWRubyにこだわらず正規表現の資料に当たるのがいいと思うよ
(?=〜)は肯定先読み
0700デフォルトの名無しさん
2015/02/11(水) 15:52:52.72ID:73gQVPeZ数学的センスとは一体……w
0701デフォルトの名無しさん
2015/02/11(水) 15:54:49.91ID:r3BddX0b横からだけどこれの「先読み、後読み」のところ
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fregexp.html
詳説正規表現って本が定番で三章ぐらいまで読めば普段使いには十分
0702デフォルトの名無しさん
2015/02/11(水) 15:55:06.55ID:73gQVPeZとりあえずこれ読んでおけば良いと思う
ttp://docs.ruby-lang.org/ja/2.2.0/doc/spec=2fregexp.html
0703デフォルトの名無しさん
2015/02/11(水) 15:56:45.20ID:73gQVPeZ0704デフォルトの名無しさん
2015/02/11(水) 16:01:09.99ID:sK01Ui9b数学的に違和感があっても
Rubyの仕組み的に違和感がない(むしろ全てレシーバのメソッドで統一されてる)
Rubyは数学じゃなくてプログラミング言語だからそんなにおかしな仕様じゃないと思うけど
0705693
2015/02/11(水) 16:15:37.27ID:cDpEjOcI早速読んでみましたが、何となくでしか理解できないので
紹介された書籍を今からポチってきます
皆さん、ありがとう
0706デフォルトの名無しさん
2015/02/11(水) 16:25:36.31ID:PYSPfi0Q0707デフォルトの名無しさん
2015/02/11(水) 16:50:02.25ID:r3BddX0b0708デフォルトの名無しさん
2015/02/11(水) 16:56:43.99ID:sDJf85Ja∃f∃g s.t. ¬( o(f) = o(g) ⇔ o(g) = o(f) ).
と言おうとしたら既出だった
0709デフォルトの名無しさん
2015/02/11(水) 17:03:48.99ID:X7wVt/Fu「詳説正規表現」を買うのか?
漏れなんか、「たのしいRuby」で正規表現を覚えたけど、
ちょっと使うには十分だよ
それ以上のことは、2chの正規表現スレで、聞けばよい。
一々、買わなくてもよいだろう。
もし買うのなら、そいつのリンクから買ってやれ
0710デフォルトの名無しさん
2015/02/11(水) 17:06:47.22ID:HV6QGBu90711デフォルトの名無しさん
2015/02/11(水) 17:54:07.50ID:xOldc4y+gem install mysql2
すると
ruby/thread.hが無い
と言われるのですが、
thread.hはどうすればインストールされるのでしょうか?
Debianのaptで
ruby
ruby-dev
は入ってます。(1.9.3)
0712デフォルトの名無しさん
2015/02/11(水) 17:58:59.39ID:PYSPfi0Q0713デフォルトの名無しさん
2015/02/12(木) 07:46:08.52ID:9gMH9uw0>>711
https://github.com/brianmario/mysql2#linux-and-other-unixes
libmysqlclient-devかmysql-devel入れろって書いてあるけど入れた?
0714デフォルトの名無しさん
2015/02/12(木) 12:03:09.39ID:gfPr4M9Iクラスで定義したメソッドを.なんちゃらで呼び出せますってはずなのに
メソッド作ってもいないnewが使えてしまうのが謎
0715デフォルトの名無しさん
2015/02/12(木) 12:11:42.06ID:oLOcoqWqCalls allocate to create a new object of
class's class, then invokes that object's
initialize method, passing it args.
This is the method that ends up getting called whenever
an object is constructed using .new.
0716デフォルトの名無しさん
2015/02/12(木) 13:50:20.19ID:pmmZp4nIputs z # →2
こんなことが出来るのを知った
いままでいちいち
if 3==4 then x=1 else x=2 end
puts x # →2
などとやっていた
0717デフォルトの名無しさん
2015/02/12(木) 13:56:04.42ID:oLOcoqWqa = 3 == 4 ? 1 : 2
0718デフォルトの名無しさん
2015/02/12(木) 14:03:01.16ID:vZuNWRuz0719デフォルトの名無しさん
2015/02/12(木) 14:12:14.17ID:pmmZp4nIありがとうございます
知らないことアバカン(=多いの熊本語)
0720デフォルトの名無しさん
2015/02/12(木) 16:27:53.76ID:qdUt/p4n勝手にObjectクラスを継承するから、何も書いてなくてもObjectクラスのメソッドは使える
0721デフォルトの名無しさん
2015/02/12(木) 21:01:46.12ID:ACguu+ql0722デフォルトの名無しさん
2015/02/13(金) 00:21:20.42ID:qAadHGJaRubyではifも式だからね
たぶんLISP由来だろう
最近の言語ではScalaもそうだね
0723デフォルトの名無しさん
2015/02/13(金) 00:21:39.71ID:CzCNKwo/何かいい方法はないでしょうか?
一応Shell::teeというのを見つけたのですがリファレンスマニュアルが
投げやりな感じで困っています・・・
0724デフォルトの名無しさん
2015/02/13(金) 00:28:06.47ID:qAadHGJaログファイルに出しておいて、tail -F でコンソールで見ればいいんじゃない?
0725デフォルトの名無しさん
2015/02/13(金) 01:20:51.80ID:SVZa3gOzif 式だけでなく、 case 式もある
color_num = case color
when :blue; 0
when :red; 1
when :Yellow; 2
else; -1
これらは「関数型プログラミング」と呼ばれるプログラミング・スタイルのひとつ
詳しくは、以下を参照:
・Rubyによる関数型プログラミング
http://www.h6.dion.ne.jp/~machan/misc/FPwithRuby.html
Ruby は「オブジェクト指向な手続き型スクリプト言語」であるけれど、
「関数型プログラミング」にも(他の手続き型言語と比較すれば)極めて適している性質がある
状況に応じて、常識的な「手続き型プログラミング」と簡潔な「関数型プログラミング」とを
自在に使い分けることができるようになることが望ましい
0726デフォルトの名無しさん
2015/02/13(金) 02:16:33.14ID:Hocs4IwUこのスレみているような人は必読の良書だった。
0727デフォルトの名無しさん
2015/02/13(金) 05:54:31.12ID:3tmdVICO個人的に一行whenの場合、文の前はthenだな
何つーか、汎用的な文区切りになっちゃうセミコロンより
whenの一部である以上そうとしか解釈されないthenのが安心感あるというか
…まあ、どうせ複数行whenのときはthen書かずに改行しちゃうから同じっちゃ同じか
0728デフォルトの名無しさん
2015/02/13(金) 13:42:31.60ID:W6lKBquTcaseが値を返すのは関数型で必要とされることの多い性質ではあるけど
それ自体は別に関数型でも何でもないぞ
0729デフォルトの名無しさん
2015/02/13(金) 23:29:34.48ID:v7o1vyZw0730デフォルトの名無しさん
2015/02/13(金) 23:35:16.88ID:qAadHGJaいっそのことLISPぐらいまでいってしまえば、整形はあまり悩まなくてすむのになw
emacs lisp はたまに書くが、整形で悩んだことはほぼない
0731デフォルトの名無しさん
2015/02/14(土) 00:12:54.67ID:/i+i2oPj0732693
2015/02/14(土) 00:27:23.04ID:ng5YU6yI趣味の範疇でruby始めたのですが、
独学の悪いくせで好きなものしかやらない・・・ し覚えない・・。
そこで全体的な知識不足の指標となるかな?
この試験も目指してみようかなと思い立ったしだいです。
別のruby参考資料を買おうか、こっちにしようか悩み中
0733デフォルトの名無しさん
2015/02/14(土) 01:07:33.88ID:ISQup94G広く知識を身につけたいなら基本情報にでも挑戦したほうがRubyプログラミングにおいてもよっぽど役に立つし
Rubyを「使う」スキルが欲しいならRailsでWebサービスでも運営すれば嫌でも身に付く
言語の重箱の隅をつつくのは時間の無駄
0734デフォルトの名無しさん
2015/02/14(土) 01:37:38.64ID:4ueOEeTW変に思えるかもしれないけど他の言語を2つくらい覚えるといいよ
言語の違いなんて大したことではないというのが理解できるとすごく視野が広がる
あんまり特定の言語に執着しないほうがいい
0735デフォルトの名無しさん
2015/02/14(土) 10:04:33.41ID:3EPsJ3bRエディタの対括弧表示見てりゃ間違えないよ
と言うか、括弧を足したり削ったりするときは
現在カーソル位置でなくてそっち見てるかも
0736デフォルトの名無しさん
2015/02/14(土) 13:40:26.34ID:dTMvU3xTRubyのcaseはパターンマッチ(正規表現じゃないぞ)が使えないから、
関数型としては全くもって不足
0737デフォルトの名無しさん
2015/02/14(土) 15:28:57.41ID:15MsuvIHまあ複数できないことが大きな差かもしれんが
0738デフォルトの名無しさん
2015/02/15(日) 10:28:43.99ID:SklWaN/q教えていただけると助かります。
0739デフォルトの名無しさん
2015/02/15(日) 10:46:38.75ID:ABT28a22DSLガ〜とかメタプログラミングが〜とか言ってるのは真似しないほうがいい
元々そんな変態言語ではない
0740デフォルトの名無しさん
2015/02/15(日) 11:28:16.40ID:SklWaN/qありがとうございます。
Nokogiri読みやすそうなので参考になりそうです。
0741デフォルトの名無しさん
2015/02/15(日) 12:50:33.82ID:wv9Dnfvm正解でした、ありがとう。
なにしろRubyは始めたばかりで、ドキュメントの在り処も手探りなんですワ。
0742デフォルトの名無しさん
2015/02/16(月) 03:56:38.95ID:Zn9bWbFW年末に出た外人の翻訳本で、
Rubyの実装系、Ruby1.9のRuby仮想マシンの本。
内容は新しく、Ruby2.0のキーワード引数まで含む
RubyVMは、笹田という日本人が作っていたんだね
2 + 3
2が主体となる数値オブジェクト(レシーバ)
'+'がそのオブジェクトのメソッド
3がそのメソッドの引数
左がオブジェクトで、演算子の左右で、意味が違うんだね。
つまり、関数の糖衣構文
(A + B + C + D).to_s
漏れが、あればよい機能と思うのは、
型の異なるオブジェクトを、幾つかつなげて、
簡単に文字列に変換できるもの
0743デフォルトの名無しさん
2015/02/16(月) 04:44:23.59ID:cj2/WV/Rダウンロードしたフォルダに.rbばかりで.gemが入っていない場合、
どうすればよいですか?
0744デフォルトの名無しさん
2015/02/16(月) 07:44:02.00ID:2rxNb6Sn>(A + B + C + D).to_s
>漏れが、あればよい機能と思うのは、
>型の異なるオブジェクトを、幾つかつなげて、
>簡単に文字列に変換できるもの
'%s%s%s%s' % [A, B, C, D]
"#{A}#{B}#{C}#{D}"
0745デフォルトの名無しさん
2015/02/16(月) 21:06:14.75ID:/Le2iIgbせめて、OracleとLPICにしとけ
0746693
2015/02/16(月) 23:10:02.23ID:aIhcyWTgそれなりに書けるようになってきたのに、以前として読みが厳しい・・・
自分で書いた正規表現も数日立つと・・読めないこともあったり
なにかコツありますか? 演算子の優先順位みたいなコツあるのかしら
0747デフォルトの名無しさん
2015/02/16(月) 23:25:17.19ID:GiwwQ3NFフクロウ本ポチったんじゃなかったのか
0748デフォルトの名無しさん
2015/02/16(月) 23:32:23.50ID:bsos2N+l0749693
2015/02/16(月) 23:34:38.96ID:aIhcyWTgふくろうはちょっと重い(書きぶり)ので
別冊のドリル解きながらふくろうチラ見してる段階です。
0750デフォルトの名無しさん
2015/02/17(火) 00:02:23.67ID:K0RsylMY0751デフォルトの名無しさん
2015/02/17(火) 01:22:40.02ID:Jv+uJpkb[A, B, C, D].join
0752デフォルトの名無しさん
2015/02/18(水) 09:40:42.56ID:49+iv0KkWindowsでsassをコンパイルすると、"\f012"のような文字を収めた変数が文字化けしたようになります。
変数を使用せずに直接スタイルに記述するとちゃんと"\f012"と出力されます。
私の環境のせいかもしれませんが、バックスラッシュがある文字に原因があるように思えます。
これを解消したいのですが、どうしたら良いでしょうか?
Rubyは1.9.3を使っています。
-- test.ssss
$test : "\f012";
.test {
content : $test;
}
-- compile.bat
set LANG=ja_JP.utf8
cmd /c C:\Ruby193\bin\sass %SCSS%\test.scss:%CSS%\test.css --style compressed --sourcemap=none
出力結果 => .test{content:"?"} // ←これを content:"\f012" としたい
0753デフォルトの名無しさん
2015/02/18(水) 15:17:15.21ID:KMXsePc+https://github.com/sass/sass/issues/1395
unquoteを使えばいいらしい
$test1 : \f012;
$test2 : unquote(\f012);
$test11 : unquote('"') + \f012 + '"';
$test22 : unquote('"') + unquote(\f012) + '"';
.test {
content : "\f012";
content : unquote('"') + $test1 + '"';
content : unquote('"') + $test2 + '"';
content : $test11;
content : $test22;
}
文字化けの原因は
$test : "\f012"
をutf16leと解釈されるからみたい
たまらなんなこりゃ
0754デフォルトの名無しさん
2015/02/18(水) 18:49:22.02ID:49+iv0Kkありがとうございます!
色々と試行錯誤してたのですが解決できなくて泣きそうでした。
無事に解決できました、本当に感謝です!
0755デフォルトの名無しさん
2015/02/19(木) 02:24:04.45ID:lDFiAK4+特別に解釈されるんでしょ?
' シングルクォートか、ヒアドキュメントを使えば?
0756デフォルトの名無しさん
2015/02/19(木) 08:45:11.80ID:oS1fF8P8シングルクォートとか関係ない
せめて2つ上のレスくらい読んでから発言しよう
0757デフォルトの名無しさん
2015/02/19(木) 11:18:05.36ID:iGdP7Vg9reg = /25(?=65)/,
/25(?=65)\d*/,
/(?=65)\d*/
reg.each{|ex|
puts target.match(ex)
}
結果
25
25659565564
659565564
先読みのあとに記述があると
この結果になるのはなぜでしょうか
0758デフォルトの名無しさん
2015/02/19(木) 12:57:30.27ID:fdKBoaCSそのreg3つはそれぞれ以下のような意味だよ
・/25/ただし25まで読み込んだ時点でその先に65が続くもの
・/25\d*/ただし25まで読み込んだ時点でその先に65が続くもの
・/\d*/ただし先頭が65であるもの
先読みした部分は結果には入らないし、読み飛ばされもしない
あとは先読み以外の部分が結果として表示されてる
0759デフォルトの名無しさん
2015/02/19(木) 13:32:07.49ID:iGdP7Vg9結果25で、65が除外されるのは理解できるのですが
/(?=65)\d*/ な場合
65が除外されずに 65....とマッチします
評価として点(・)を用いいます
(?=65)の時点で
25・659565564
25・6595.....
(?=65)の時点で一度65を除外してるが
\dにより 6595が読み込まれるので 65除外のあとから6595がヒットする 2565・95ではなく、25・6595の理由からって意味でしょうか
0760デフォルトの名無しさん
2015/02/19(木) 14:10:36.73ID:00AGhhL10761デフォルトの名無しさん
2015/02/19(木) 14:29:02.05ID:fdKBoaCSたぶん考え方はあってると思うよ
先読みの場合は、点(・)の先に65があることを確認するだけで、点の位置は動かない
なので、その後に\d*とマッチする部分に65が含まれる
だからマッチに使われる(点が進む)ことを除外というのなら、先読みでは除外しないっていうことになると思う
0762デフォルトの名無しさん
2015/02/19(木) 16:18:09.18ID:Q7B3YZ4lほんとセマンティックバージョニングの意味ねえな
パッチアップデートで壊したわけじゃないだけマシか?
マシって何と比べてマシなんだ(自問)
0763デフォルトの名無しさん
2015/02/19(木) 16:20:42.35ID:DC8iLU1Gそのあと同じファイルに、読み込んだ行数分を削除したいのですが、何かいい方法ありませんか?
例えば、
hoge.txt
1.れもん
2.いちご
3.りんご
4.ばなな
5.パイナップル
を2行分読み込んで削除
hoge.txt
1.りんご
2.ばなな
3.パイナップル
0764デフォルトの名無しさん
2015/02/19(木) 16:43:02.17ID:Xd3keHXW0765デフォルトの名無しさん
2015/02/19(木) 16:50:15.33ID:ra0CCNS1各行をリンクや配列にして新たに書くかシークしてまるまるコピーか
0766デフォルトの名無しさん
2015/02/19(木) 17:03:30.07ID:00AGhhL1>構造上前を詰めるのはそのままじゃ無理なのはわかるべ
ってどういうこと?
0767デフォルトの名無しさん
2015/02/19(木) 17:08:06.98ID:ra0CCNS10768デフォルトの名無しさん
2015/02/19(木) 17:17:55.65ID:00AGhhL10769デフォルトの名無しさん
2015/02/19(木) 23:24:09.47ID:/rXoqLFuhttps://ideone.com/pyWQL9
実行例:
$ ruby enum-drop.rb hoge.txt
3.りんご
4.ばなな
5.パイナップル
$
28行目のメソッド Enumerable#drop(n) を利用することがポイント
http://docs.ruby-lang.org/ja/2.2.0/method/Enumerable/i/drop.html
なお Enumerable#drop はリターン値として配列(Array オブジェクト)を返すから、
入力データ(の行数)が膨大になるとメモリ効率が悪くなる
この問題は代わりに Enumerator::Lazy#drop(n) を使うと、行単位にオブジェクトが
生産/消費されるようになるから、メモリ効率を改善できる
http://docs.ruby-lang.org/ja/2.2.0/method/Enumerator=3a=3aLazy/i/drop.html
具体的には、28行目のメソッドチェーンで drop の前に lazy を挿入するだけで終わる:
....(前略).... .each_line.lazy.drop(num). ....(後略)....
ただし Enumerator::Lazy は Ruby 2.0 で追加された組込みモジュールだから、
Ruby 1.8/1.9 で利用するなら enumerable-lazy という Gems パッケージが必要になる
0770デフォルトの名無しさん
2015/02/20(金) 02:35:25.81ID:2YGngXGF0771デフォルトの名無しさん
2015/02/20(金) 02:46:11.83ID:EBONnwDBいったん違うファイルに書いて、
元のファイルを削除してから、renameする方が安全
行1,2,3,4 とあれば、上から順に、1行ずつ処理していく。
行1 → 読み込むだけで、データは捨てる
2 → 同様に捨てる
3 → 書き込む
4 → 書き込む
0772デフォルトの名無しさん
2015/02/20(金) 03:04:50.52ID:h4oRuNjd$ tail -n +3 hoge.txt | sponge hoge.txt
0773デフォルトの名無しさん
2015/02/20(金) 07:53:47.32ID:fEal40kx0774デフォルトの名無しさん
2015/02/20(金) 08:04:39.98ID:Qj8W36XI単に実行するだけのものを定義する時は
def my_func
yield
end
みたいにしたり&blockというような引数を使うことはわかったのですが
open( "aa.txt", "r" ){ |file|
}
のopen関数のような、他の値も引数にもっていて、ブロックも引数を持っているような関数はどうやって作れば良いのでしょうか
もし良ければ教えて下さい
0775デフォルトの名無しさん
2015/02/20(金) 08:11:05.65ID:pk2QnuVc0776デフォルトの名無しさん
2015/02/20(金) 08:26:35.79ID:KoZ8UZGe普通にmy_funcf(普通の引数)にするだけ
ブロック引数は暗黙的に渡るので引数として明示的に宣言する必要はない
0777デフォルトの名無しさん
2015/02/20(金) 09:40:29.75ID:2q5bsCKhありがとうございます。
さっそくためしてみます!
0778デフォルトの名無しさん
2015/02/20(金) 13:47:34.06ID:NRgYnesQPythonスレになぜかRubyコード投下してたときも同じだったが
関数化して書くのならちゃんとFile.closeするかcloseが必要ないようにしなよ
再利用したときにハマるよ
0779デフォルトの名無しさん
2015/02/20(金) 17:58:04.38ID:NOsWQdQaなんか変な動きするなーって思ってたらこれが原因だったわ
ためになった
0780769
2015/02/20(金) 19:50:56.52ID:8OUkX7Zl指摘ありがとん
ということで、訂正してみた
https://ideone.com/0IemVC
0781デフォルトの名無しさん
2015/02/21(土) 11:19:24.57ID:zv91iaBv# CR・CRLF 改行を、LF 改行に置き換える
str = str_ary[0].encode(:universal_newline => true)
str.each_line do |line|
end
漏れはこんな風に、File.read で、
1行ずつ処理しているが、なぜ、File.open を使うの?
0782デフォルトの名無しさん
2015/02/21(土) 11:57:28.42ID:YnThFa9Sメモリ所要量がファイルサイズに依存しないとか
小っさい小っさいファイルしか使わないんなら気にしなくていいよ
0783デフォルトの名無しさん
2015/02/21(土) 15:44:56.37ID:K/x//vvW0784デフォルトの名無しさん
2015/02/21(土) 16:20:01.62ID:kawK2KK0そういうのは分割しろとは思うがDBに入れるべきかといわれるとそうじゃないと思う
0785デフォルトの名無しさん
2015/02/21(土) 16:37:36.72ID:1ts2mUR/この程度の用事にメモリ効率とか考える方が時間の無駄
いまある用事に対してできることを最小限の労力でやるのが一番
「こういう用事もあるかも」を考えて設計するのは愚の骨頂、とDHHあたりも言ってた気がする
0786デフォルトの名無しさん
2015/02/21(土) 17:05:47.11ID:T2DgAzdTRuby以前にコマンドやそういったものに関しても初心者で、このVpkツールをインストールするだけで一週間ほどかかりました…
VPKファイルフォーマットのパーサー
https://github.com/kimoto/vpk
本来Linux用に作られたものらしいのですが、Macでも使用できるとツールの作者が書いていました
まずVPKファイルの生成よりも展開のほうが簡単かと思い、試しにデスクトップにVPKファイルを置いて
require 'vpk'を書いてエンターを押すと-bash: require: command not foundと出ました
これは別に入力する必要のないものなのでしょうか?
続いてVPK::VPKFile.new("./path_to.vpk").extract_to("./")をやってみましたが
MacName:Desktop UserName$ VPK::VPKFile.new("./Users/UserName/Desktop/test.vpk ")を実行すると
-bash: syntax error near unexpected token `" /Users/UserName/Desktop/test.vpk "'と出て駄目でした
ちなみに、このツールを作った人は日本人でどのように使うかも日本語で説明しています
VPKファイルの展開
require 'vpk'
vpk = VPK::VPKFile.new("./VPKのパス.vpk")
vpk.extract_to("./どこに解凍するか")
VPKファイルをディレクトリから生成する
require 'vpk'
vpk = VPK::VPKFile.archive("./ディレクトリのパス")
vpk.write_to("./生成後のVPKのパス")
ここまで書かれていてまだ理解できません…誰か馬鹿にも分かるように説明して下さるかたいらっしゃいませんか…
0787デフォルトの名無しさん
2015/02/21(土) 17:28:20.44ID:sa43Zcnrrequire 'vpk'
VPK::VPKFile.new(ARGV[0]).extract_to("./")
と書いたファイルをvpktest.rbって名前でデスクトップに保存したらターミナルを起動して
$ cd Desktop
$ ruby vpktest.rb test.vpk
とかする(もちろんtest.vpkがDesktopにあるのが前提)
できればRubyとBashの入門書を一冊ずつ入手して勉強したほうがいい
0788デフォルトの名無しさん
2015/02/21(土) 17:31:41.15ID:sa43ZcnrRubyスクリプト書かなくてもターミナルから次でいけるらいし
$ vpk -x ~/Desktop/test.vpk
0789デフォルトの名無しさん
2015/02/21(土) 18:09:59.96ID:T2DgAzdT$ cd Desktop
$ ruby vpktest.rb test.vpk
をするとvpktest.rb:1: syntax error, unexpected $undefined, expecting '}'
{\rtf1\ansi\ansicpg932\cocoartf1187\cocoasubrtf400
^
と出ました
$ vpk -x ~/Desktop/test.vpkのほうは
/Library/Ruby/Gems/1.8/gems/vpk-0.0.2/lib/vpk.rb:162:in `extract_to': undefined method `write' for File:Class (NoMethodError)
from /Library/Ruby/Gems/1.8/gems/vpk-0.0.2/lib/vpk.rb:156:in `each'
from /Library/Ruby/Gems/1.8/gems/vpk-0.0.2/lib/vpk.rb:156:in `extract_to'
from /Library/Ruby/Gems/1.8/gems/vpk-0.0.2/bin/vpk:40
from /usr/bin/vpk:23:in `load'
from /usr/bin/vpk:23
これは成功してたのでしょうか…!? しかし展開後のフォルダのようなものはデスクトップに見当たりませんでした
787さんがおっしゃるように、最初に本を買って勉強しようと思います
それでも分からなかったらまた質問しにきます
ありがとうございました
0790デフォルトの名無しさん
2015/02/21(土) 18:50:52.11ID:lQiGN8keパスの概念が分かってないようだから
gemを使って入れたらいいのでは?
$ sudo gem install vpk
// $ gem install vpk
$ mkdir -p ~/tmp/vpktest
$ cd ~/tmp/vpktest
$ mkdir hoge
$ touch hoge/testfile_{01..5}.txt
$ ls hoge
testfile_01.txt testfile_02.txt testfile_03.txt testfile_04.txt testfile_05.txt
$ vpk -c hoge
compressed hoge -> hoge.vpk
$ mkdir hoge_out && cd hoge_out
$ vpk -x ../hoge.vpk
extracted!: ../hoge.vpk
$ sudo gem uninstall vpk
$ gem uninstall vpk
0791デフォルトの名無しさん
2015/02/21(土) 19:01:34.99ID:sa43Zcnrそれはおそらくライブラリ側でtest.vpkに対応できなくてエラーを吐いてる
そのライブラリのリリース後にフォーマットが変更されたりしてない?
test.vpkか他のvpkファイルをうpしてもらえれば調べてみるけど
0792デフォルトの名無しさん
2015/02/21(土) 19:21:53.03ID:T2DgAzdTありがとうございます!
vpkツールのインストールはgemを使って入れました、後は教えてもらった通りにやってみましたが未知の世界すぎて…
MacName:~ UserName$ mkdir -p ~/tmp/vpktest
MacName:~ UserName$ cd ~tmp/vpktest
-bash: cd: ~tmp/vpktest: No such file or directory
MacName:~ UserName$ mkdir hoge
MacName:~ UserName$ touch hoge/testfile_{01..5}.txt
MacName:~ UserName$ ls hoge
testfile_1.txt testfile_2.txt testfile_3.txt testfile_4.txt testfile_5.txt
MacName:~UserName$ vpk -c hoge
compressed hoge -> hoge.vpk
/Library/Ruby/Gems/1.8/gems/vpk-0.0.2/lib/vpk.rb:178:in `archive': undefined method `binread' for File:Class (NoMethodError)
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/find.rb:39:in `find'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/find.rb:38:in `catch'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/find.rb:38:in `find'
from /Library/Ruby/Gems/1.8/gems/vpk-0.0.2/lib/vpk.rb:174:in `archive'
from /Library/Ruby/Gems/1.8/gems/vpk-0.0.2/bin/vpk:31
from /usr/bin/vpk:23:in `load'
from /usr/bin/vpk:23
0793デフォルトの名無しさん
2015/02/21(土) 19:27:58.61ID:T2DgAzdTMacName:~ UserName$ mkdir hoge_out && cd hoge_out
MacName:hoge_out UserName$ vpk -x ../hoge.vpk
not found specified file: ../hoge.vpk
MacName:hoge_out UserName$ vpk -x ../hoge.vpk
not found specified file: ../hoge.vpk
MacName:hoge_out UserName$ extracted!: ../hoge.vpk
-bash: : unrecognized history modifier
この文字列を保存しておいて、後でゆっくりどういうことか調べてみようと思います
>>791
ライブラリのリリース後にフォーマットが変更というのがよく分かりませんでした…すみません
このVPKツール自体2012年あたりに作られたものみたいなので、バージョンが古くて対応していないということもあるのかもしれません
ファイルはこれです
元々はvocalizev8.vpkというL4D2というゲーム用ファイルを、分かりやすいようにtest.vpkに名前だけ変えたものです
http://www1.axfc.net/u/3416997
0794デフォルトの名無しさん
2015/02/21(土) 19:50:06.41ID:sa43Zcnrうpしてもらったファイルは問題なく解凍できるみたい
RubyよりもBashの使い方勉強したほうがいいと思う
Amazonでシェルスクリプトで検索するとそれ系の本が出てくる
$ ls
test.vpk test.vpk.zip
$ vpk -x test.vpk
extracted!: test.vpk
$ ls
addonimage.jpg addoninfo.txt scripts test.vpk test.vpk.zip
$ irb
irb(main):001:0> require 'vpk'
=> true
irb(main):002:0> VPK::VPKFile.new('./test.vpk').extract_to('testdir')
[Ctrl+D]
$ ls testdir
addonimage.jpg addoninfo.txt scripts
0795デフォルトの名無しさん
2015/02/21(土) 20:08:10.84ID:T2DgAzdTわざわざ試してくれたんですか…ありがとうございます
Bashを先に学んだ方がいいのですね、頑張って勉強します
他の方も親切に教えてくださってありがとうございました
0796デフォルトの名無しさん
2015/02/21(土) 21:00:28.05ID:sa43Zcnr勉強するなら手始めにこことかよさそう(ぐぐったら出てきた)
http://www.pxt.jp/ja/diary/article/292/
がんばってねー
0797デフォルトの名無しさん
2015/02/21(土) 23:01:02.82ID:sa43Zcnr>>792でFile.binread(Ruby1.9から)ってメソッドがないって言われてるので
Rubyのバージョン上げたらあっさり動くかも
■ このスレッドは過去ログ倉庫に格納されています