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

Ruby 初心者スレッド Part 56©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net2014/12/13(土) 09:29:12.93ID:DLY4IovQ
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、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/
0756デフォルトの名無しさん2015/02/19(木) 08:45:11.80ID:oS1fF8P8
>>755
シングルクォートとか関係ない
せめて2つ上のレスくらい読んでから発言しよう
0757デフォルトの名無しさん2015/02/19(木) 11:18:05.36ID:iGdP7Vg9
target = "55 25659565564 56"

reg = /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)/
結果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:00AGhhL1
厳密には違うが、除外はするが点は動かないのが先読み
0761デフォルトの名無しさん2015/02/19(木) 14:29:02.05ID:fdKBoaCS
言葉での表現は微妙だけど
たぶん考え方はあってると思うよ
先読みの場合は、点(・)の先に65があることを確認するだけで、点の位置は動かない
なので、その後に\d*とマッチする部分に65が含まれる

だからマッチに使われる(点が進む)ことを除外というのなら、先読みでは除外しないっていうことになると思う
0762デフォルトの名無しさん2015/02/19(木) 16:18:09.18ID:Q7B3YZ4l
http://qiita.com/a_ishidaaa/items/47a8459aa5fe5512871a
ほんとセマンティックバージョニングの意味ねえな
パッチアップデートで壊したわけじゃないだけマシか?
マシって何と比べてマシなんだ(自問)
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:Xd3keHXW
丸投げはいかんよ
0765デフォルトの名無しさん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:ra0CCNS1
後ろを切るのは前の位置動かさないで済むけど、前を詰めるのに後ろを動かさないわけにはいかないって話
0768デフォルトの名無しさん2015/02/19(木) 17:17:55.65ID:00AGhhL1
なるほど、thx!
0769デフォルトの名無しさん2015/02/19(木) 23:24:09.47ID:/rXoqLFu
>>763
https://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:2YGngXGF
バグあり注意
0771デフォルトの名無しさん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 | tee hoge.txt
$ tail -n +3 hoge.txt | sponge hoge.txt
0773デフォルトの名無しさん2015/02/20(金) 07:53:47.32ID:fEal40kx
こんなどうでもいいことに小細工して満足感以外の何が得られるんだ
0774デフォルトの名無しさん2015/02/20(金) 08:04:39.98ID:Qj8W36XI
rubyのブロックを引数にする関数がよくわかりません。
単に実行するだけのものを定義する時は
def my_func
  yield
end
みたいにしたり&blockというような引数を使うことはわかったのですが
open( "aa.txt", "r" ){ |file|
}

のopen関数のような、他の値も引数にもっていて、ブロックも引数を持っているような関数はどうやって作れば良いのでしょうか
もし良ければ教えて下さい
0775デフォルトの名無しさん2015/02/20(金) 08:11:05.65ID:pk2QnuVc
$ ruby -i -ne 'BEGIN{2.times{gets}}; print' hoge.txt
0776デフォルトの名無しさん2015/02/20(金) 08:26:35.79ID:KoZ8UZGe
>>774
普通にmy_funcf(普通の引数)にするだけ
ブロック引数は暗黙的に渡るので引数として明示的に宣言する必要はない
0777デフォルトの名無しさん2015/02/20(金) 09:40:29.75ID:2q5bsCKh
>>776
ありがとうございます。
さっそくためしてみます!
0778デフォルトの名無しさん2015/02/20(金) 13:47:34.06ID:NRgYnesQ
>>769
PythonスレになぜかRubyコード投下してたときも同じだったが
関数化して書くのならちゃんとFile.closeするかcloseが必要ないようにしなよ
再利用したときにハマるよ
0779デフォルトの名無しさん2015/02/20(金) 17:58:04.38ID:NOsWQdQa
>>769じゃないけど、File.openってブロック渡さないとcloseしないんだな
なんか変な動きするなーって思ってたらこれが原因だったわ
ためになった
07807692015/02/20(金) 19:50:56.52ID:8OUkX7Zl
>>778
指摘ありがとん
ということで、訂正してみた

https://ideone.com/0IemVC
0781デフォルトの名無しさん2015/02/21(土) 11:19:24.57ID:zv91iaBv
str_ary = File.read('File1').scan(/^=begin.*^=end/m)

# 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//vvW
メモリ圧迫するほど膨大なデータになったら自然とSQL使うんじゃないの?
0784デフォルトの名無しさん2015/02/21(土) 16:20:01.62ID:kawK2KK0
2~3GBのテキストファイルとかあるところにはある
そういうのは分割しろとは思うがDBに入れるべきかといわれるとそうじゃないと思う
0785デフォルトの名無しさん2015/02/21(土) 16:37:36.72ID:1ts2mUR/
そういう巨大なファイルを扱う用事ができたら、そのときに考えればいいよ
この程度の用事にメモリ効率とか考える方が時間の無駄

いまある用事に対してできることを最小限の労力でやるのが一番
「こういう用事もあるかも」を考えて設計するのは愚の骨頂、とDHHあたりも言ってた気がする
0786デフォルトの名無しさん2015/02/21(土) 17:05:47.11ID:T2DgAzdT
MacのRubyでVPKファイルが作りたいのですが、やり方が全く分かりません…
Ruby以前にコマンドやそういったものに関しても初心者で、この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:sa43Zcnr
>>786
require '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:sa43Zcnr
ここまで書いてREADMEの一番最後に気がついた
Rubyスクリプト書かなくてもターミナルから次でいけるらいし
$ vpk -x ~/Desktop/test.vpk
0789デフォルトの名無しさん2015/02/21(土) 18:09:59.96ID:T2DgAzdT
レスありがとうございます…!vpktest.rbを作成して保存後
$ 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
>>789
パスの概念が分かってないようだから
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
>>789
それはおそらくライブラリ側でtest.vpkに対応できなくてエラーを吐いてる
そのライブラリのリリース後にフォーマットが変更されたりしてない?
test.vpkか他のvpkファイルをうpしてもらえれば調べてみるけど
0792デフォルトの名無しさん2015/02/21(土) 19:21:53.03ID:T2DgAzdT
>>790
ありがとうございます!
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:T2DgAzdT
規制で一つのレスに書ききれませんでした
MacName:~ 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
>>793
う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
>>794
わざわざ試してくれたんですか…ありがとうございます
Bashを先に学んだ方がいいのですね、頑張って勉強します

他の方も親切に教えてくださってありがとうございました
0796デフォルトの名無しさん2015/02/21(土) 21:00:28.05ID:sa43Zcnr
>>795
勉強するなら手始めにこことかよさそう(ぐぐったら出てきた)
http://www.pxt.jp/ja/diary/article/292/
がんばってねー
0797デフォルトの名無しさん2015/02/21(土) 23:01:02.82ID:sa43Zcnr
>>795
>>792でFile.binread(Ruby1.9から)ってメソッドがないって言われてるので
Rubyのバージョン上げたらあっさり動くかも
0798デフォルトの名無しさん2015/02/22(日) 04:25:07.65ID:HpFGsXnK
端末(ターミナル、WindowsではコマンドプロンプトやPowerShell)
やコマンドの基本を学ぶ

端末で、pwd(positioning working directory)コマンドを実行すると、
今自分がいる(着目している)ディレクトリ(フォルダ)を表示する

端末を開くとたいてい、そのユーザのホームディレクトリから始まる
ディレクトリのパスが、~/ (チルダ)から始まっていたら、
それはそのユーザのホームディレクトリと同じ。
Linuxでは、/home/ユーザ名/ と同じ

パスには、/ (root)から始まる絶対パスと、相対パスがある
./ は相対パスで今自分がいるディレクトリ
../ は相対パスで今自分がいるディレクトリの親ディレクトリ(1階層上)

cd を使うと、今自分がいる場所を変えられる(移動できる)

コマンドを実行する際は、半角空白区切りで、
コマンド名 -オプション コマンドの引数

オプションは、- が付くことが多い。
コマンドの引数の内容に、半角空白を使っているが、
別個の引数と解釈されたくないのなら、
ダブル・シングルクォーテーションで引数を囲むと、
1つの引数とみなされる
"a b c", 'a b c'

たのしいRuby、2013、第4版を読む
0799デフォルトの名無しさん2015/02/22(日) 08:22:39.59ID:4QR1V68p
(正規表現における\bについて教えてください)
\bは単語境界を指しており、\wと\Wの隙間であると説明がありました。
\wは[a-zA-Z09_]  \Wは[^a-zA-Z09_]  なので\Wに\sが含まれます。

ニュアンスとして隙間は\sであるとの表現かな?とも思うのですが
そうであれば\bは\sの変種,何がどう違うのかピンときませんでした

string = "j abc C"
\s(abc)\s
\b(abc)\b の使い方で

「」abc「」   注「」は空白表現
abc

の結果が出ました。

1)\bは\sの「」を抜いたもの,それが「」とabcの隙間って意味でしょうか? 
「」・abc →  ・が\bであり
「」abc  →  「」が\s
であるって理解で正しいでしょうか?

2)\wと\Wの隙間とは 英数字と英数字以外の隙間

では
str = 太郎abc C で実験した結果 .... なし
太郎・abc になるかと期待したのですが・・

疑問
\wと\Wの隙間 ... 単に 前に\s相当の空白があるのが条件であるならば
「\w と \W」 の隙間の表現が理解できません。

          
0800デフォルトの名無しさん2015/02/22(日) 08:49:50.33ID:vZEo6Gpi
http://docs.ruby-lang.org/ja/2.2.0/doc/spec=2fregexp.html
>単語を成す文字、成さない文字の定義はエンコードによって 異なります。
0801デフォルトの名無しさん2015/02/22(日) 09:29:53.07ID:vZEo6Gpi
>\bは\sの「」を抜いたもの
'@abc{'.match(/\babc\b/) #=> #<MatchData "abc">
\sとはまったくの別物
0802デフォルトの名無しさん2015/02/22(日) 09:45:25.54ID:JLUSIAF5
>>799
/^foo$/ における\nの役割が\Wに変わっただけって考えれば理解できないかな?
0803デフォルトの名無しさん2015/02/22(日) 11:18:14.91ID:E5S/oWCJ
すきま
irb> 'Larry Guido Nocchi'.gsub(/¥b/, '+')
=> "+Larry+ +Guido+ +Nocchi+"
0804デフォルトの名無しさん2015/02/22(日) 11:43:43.92ID:E5S/oWCJ
>>798
pwdのpはprint
0805デフォルトの名無しさん2015/02/22(日) 12:41:40.52ID:JLUSIAF5
"positioning working directory"でググったら22件全部日本のサイト
元凶はWikipediaだなw
0806デフォルトの名無しさん2015/02/22(日) 16:24:18.83ID:PdWqOzTz
Present Working Directory やなかったんか
0807デフォルトの名無しさん2015/02/22(日) 16:30:10.94ID:tq8+HI3u
こういうのにこそ要出典を貼ってやるべきだなw
0808デフォルトの名無しさん2015/02/23(月) 02:20:47.22ID:OtsoZsN/
100人程度のプログラミングに明るくない人を含む小さいコミュニティ内で(オープン・ソースの)Rubyで作ったWindowsのexeファイルを配布しようと思っています。
配布後に(私の支持の下)個々人の要望にかなった変更が行えるようにexeファイル自体は
require_relative 'hoge'
のみから作り、同梱のhoge.rbを自由に編集できるようにしようと思っているのですが、これっておかしいでしょうか? こういう場合、普通だったらこうするよみたいな意見があればお聞かせ願います。
今まで他人に公開するといった機会がなかったのでこの辺のさじ加減がさっぱりわかりません。
0809デフォルトの名無しさん2015/02/23(月) 02:48:05.91ID:n+U4e1Dx
明るい人達はgitで管理して
明るくない人向けにWSH(VBS)で配布
0810デフォルトの名無しさん2015/02/23(月) 05:58:52.55ID:2dcX2lQG
exeで配る時点で普通じゃないので好きにしろとしか
Rubyなら普通はWebだよ
0811デフォルトの名無しさん2015/02/23(月) 22:37:30.98ID:gGy05t/r
nokogiriのインストールがどうしてもできません
インストールしようとするとこのような↓エラーがでるのですがどう
対処したら良いですか?ちなみにrubyはRuby 2.0.0-p598を使用しています

エラー
C:\Users\rock111\Downloads>gem install nokogiri-1.6.1-x86-mingw32.gem
ERROR: While executing gem ... (Gem::DependencyError)
Unable to resolve dependencies: nokogiri requires mini_portile (~> 0.5.0)
0812デフォルトの名無しさん2015/02/23(月) 22:52:41.89ID:cY48eAod
>>811
gem install nokogiriは試した?
gem list mini_portileするとどうなる?
0813デフォルトの名無しさん2015/02/23(月) 22:58:43.39ID:gGy05t/r
>>812
指示のとおりやってみました
結果は以下のようになりました


C:\Users\rock111\Downloads>gem install nokogiri
ERROR: While executing gem ... (Gem::DependencyError)
Unable to resolve dependencies: nokogiri requires mini_portile (~> 0.5.0)

C:\Users\rock111\Downloads>gem list mini_portile

*** LOCAL GEMS ***
0814デフォルトの名無しさん2015/02/23(月) 23:15:26.57ID:8Nm5wO4G
gem install mini_portile
0815デフォルトの名無しさん2015/02/23(月) 23:42:06.22ID:cY48eAod
>>813
gem install mini_portileしたら
https://rubygems.org/downloads/nokogiri-1.6.6.2-x86-mingw32.gem
をダウンロードして
gem install --local nokogiri-1.6.1-x86-mingw32.gem

それでうまくいかなかったらちょっとわからない
0816デフォルトの名無しさん2015/02/23(月) 23:43:40.34ID:cY48eAod
ごめんミスった。次に訂正
gem install --local nokogiri-1.6.6.2-x86-mingw32.gem
要は落としてきたgemファイルのパスを指定して
0817デフォルトの名無しさん2015/02/23(月) 23:50:36.48ID:gGy05t/r
>>816
こういう結果になりました。アドバイスありがとうございました
後は自分で考えて見ます。。。

C:\Users\rock111\Downloads>gem install mini_portile
ERROR: Could not find a valid gem 'mini_portile' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - SSL_connect retur
ned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (
https://rubygems.org/latest_specs.4.8.gz)

C:\Users\rock111\Downloads>gem install --local nokogiri-1.6.6.2-x86-mingw32.gem
ERROR: While executing gem ... (Gem::DependencyError)
Unable to resolve dependencies: nokogiri requires mini_portile (~> 0.6.0)
0818デフォルトの名無しさん2015/02/23(月) 23:56:49.59ID:cY48eAod
>>817
https://gist.github.com/luislavena/f064211759ee0f806c88#installing-using-update-packages-new
0819デフォルトの名無しさん2015/02/24(火) 04:55:39.99ID:hwXyjfLa
ary = []; ary[2] = []
ary[2][3] = [1, 2]

上なら突然でも設定できるのだが、
突然に下のようにすると、エラーで追加できない
ary[2][3] << [1, 2]

ary[2][i]で、iが5, 10など突然に、
ランダムなインデックスに、
次々と追加していくには、どうするの?

設定ではなく、iが同じ場合には、追加していきたい
08208192015/02/24(火) 05:20:13.18ID:hwXyjfLa
自己レス
ary = []; ary[2] = []

いったん、空配列で初期化した後なら、追加できる
ary[2][3] = []
ary[2][3] << [1, 2]

ary[2][i]で、iが5, 10など突然に、
ランダムなインデックスに、
次々と追加していくには、どうするの?

最初の1回目だけは、空配列で初期化して、
2回目以降は初期化せずに、追加のみしていきたい
0821デフォルトの名無しさん2015/02/24(火) 05:36:48.05ID:2T0G4BSR
まんまリファレンスにあるよ
0822デフォルトの名無しさん2015/02/24(火) 06:48:53.58ID:hwXyjfLa
日本語で、ログインなし、添付ファイルも読み込める
ttps://paiza.io

print RUBY_VERSION

2.2 になっている
08238192015/02/24(火) 07:04:42.78ID:hwXyjfLa
自己レス
ary = []; ary[2] = []

いったん空配列で初期化した後なら、追加できる
ary[2][3] = []
ary[2][3] << [1, 2]

一方、初期化する前は、nil だから、<< メソッドを呼べない

つまり、空配列とnilは、異なる扱い
0824デフォルトの名無しさん2015/02/24(火) 09:33:24.04ID:ztCGtY4P
fetch
0825デフォルトの名無しさん2015/02/24(火) 11:04:07.70ID:YPtW8awo
またこいつか
0826デフォルトの名無しさん2015/02/24(火) 11:18:02.66ID:CiqLyyCO
そもそも配列初期化とか言ってる時点でRuby学ぶ気も何もないのですよ
0827デフォルトの名無しさん2015/02/24(火) 11:41:50.94ID:2y9qGJ70
「Rubyによるデザインパターン」を買ったった
届くの楽しみ・・・ しかし絶版本中古しか買えなかったわ 高いよ
0828デフォルトの名無しさん2015/02/24(火) 20:23:26.10ID:+pjYUFm3
これからrubyでクローラーを開発しようと思うのですが
初心者におすすめのエディタってありますか?
いまのとこサクラエディタを考えてますが・・・
0829デフォルトの名無しさん2015/02/24(火) 20:35:47.29ID:wMWkMGk+
Atom
開発者向けじゃない普通のエディタに比べると複雑に感じるかもしれないが、
操作自体は普通でviやemacsのように熟練を要するものではない
0830デフォルトの名無しさん2015/02/24(火) 20:36:34.72ID:9OYj7FQ2
いつも使ってるエディタ一択
それがないなら適当にフリーのエディタ(サクラでよい)使ってみて気に入らなきゃ別のを探せばよい
0831デフォルトの名無しさん2015/02/24(火) 20:38:04.38ID:2T0G4BSR
初心者ならRubyMineとかのIDEがいいんじゃないの
0832デフォルトの名無しさん2015/02/24(火) 20:39:49.43ID:+pjYUFm3
アドバイスありがとうございます。
プログラミングはsasとかMQLとかしかやったことないので
自前のエディタないんですよね。
atom使ってみます。ありがとうございます。
0833デフォルトの名無しさん2015/02/24(火) 20:52:02.57ID:xSG7hOYt
>>809-810
どうもありがとうございます。
VBSについて調べてみることにします。
0834デフォルトの名無しさん2015/02/24(火) 21:01:21.70ID:uqCdmZ4l
Atom&クローラーとか、すぐにWindowsを捨てたくなるコースだなw
WindowsでRubyを使い続けたいなら、
あまり新しいものや周りに目を向けずにこういうもんだと思って地道に使うのが吉
0835デフォルトの名無しさん2015/02/24(火) 21:12:23.56ID:2y9qGJ70
sublime textが簡単かな
emacsるびきち本にお布施払って信者になる道もある

winは茨の道に同感
三ヶ月以内にwin捨ててると思う
どうしてもクローラーのお手軽GUIがいいならmacって道もあるんじゃないの
linuxだと無料だけど・・w
0836デフォルトの名無しさん2015/02/24(火) 22:22:04.69ID:C9vda/HG
Ruby捨てればいい
技術的負債だし
0837デフォルトの名無しさん2015/02/25(水) 01:37:03.71ID:e/Qay/4t
'-12345-12-123-' に対して
「-」で挟まれた部分が最小となるような正規表現って書けますでしょうか?
/-\w*?-/だと-12345-にマッチしますが、
-12-にマッチするようなものが欲しいんですけど。
0838デフォルトの名無しさん2015/02/25(水) 02:08:59.82ID:UWnGWlrp
無理です
0839デフォルトの名無しさん2015/02/25(水) 02:32:48.94ID:e/Qay/4t
>>838
ありがとうございます。
.scan(/\d+/).sort_by{|i| i.length}
で代用することにします。
0840デフォルトの名無しさん2015/02/25(水) 02:47:40.94ID:lwlbnzFN
なんでわざわざソートするん?
0841デフォルトの名無しさん2015/02/25(水) 03:05:36.04ID:e/Qay/4t
>>840
ありゃりゃ、確かに。
min_byで十分ですね。
0842デフォルトの名無しさん2015/02/25(水) 07:45:32.49ID:lwlbnzFN
長さが同じならどれでもいいのん?
0843デフォルトの名無しさん2015/02/25(水) 08:24:49.99ID:e/Qay/4t
>>842
はい、最短のものがいくつかあったときは先の方にあったもので大丈夫です。
0844デフォルトの名無しさん2015/02/25(水) 08:45:30.40ID:AHECRfew
reg = /\d+(?=-)/
arry = '-12345-12-123-'.scan(reg)
p arry.min

#puts "-#{arry.min}-"
0845デフォルトの名無しさん2015/02/25(水) 08:55:13.44ID:e/Qay/4t
>>844
初めに挙げた例が悪くて恐縮なのですが
任意の文字列に対して、ハイフンで挟まれた文字列の長さが最短になるような挙動を期待していたので
これだとちょっとマズいです。
0846デフォルトの名無しさん2015/02/25(水) 08:55:34.29ID:AHECRfew
順番が大事なら配列番号をハッシュにし、ソートすれば
配列のデータのバラつきを集計できる
0847デフォルトの名無しさん2015/02/25(水) 08:59:03.50ID:AHECRfew
\wで文字列の長さならlengthじゃないの]
08488192015/02/25(水) 09:09:27.71ID:4HjDfert
>>819-823
ary = []; ary[2] = []

結局、要素がnilなら、nil要素には追加できないため、
空配列で初期化した後に、追加する。
こういうやり方でいいの?

ary[2][3] = [] if !ary[2][3]
ary[2][3] << [1, 2]

>>828
漏れはWin8にも対応しているので、
寺尾さんのTeraPadを使っている
0849デフォルトの名無しさん2015/02/25(水) 09:18:28.42ID:e/Qay/4t
>>847
そうですね。
>>841のように目下のところは次のようにすることにしました。
.scan(/\d+/).min_by{|i| i.length}
0850デフォルトの名無しさん2015/02/25(水) 09:20:57.88ID:KXtTFTSD
ary[2][3] ||= [[1, 2]]
0851デフォルトの名無しさん2015/02/25(水) 09:39:45.36ID:g5n/F/bU
bool値についてなんだけど

> true &amp;&amp; false
false
> true || false
true

になる理由がわからない
わかる人教えてください
0852デフォルトの名無しさん2015/02/25(水) 09:42:20.61ID:g5n/F/bU
>>851なんか文字化けしてしまった
2行目は
> true && false
です
0853デフォルトの名無しさん2015/02/25(水) 09:46:55.35ID:AHECRfew
つ ベン図
0854デフォルトの名無しさん2015/02/25(水) 10:15:06.04ID:4HjDfert
|| はOR

0 OR 0 → 0
0 OR 1 → 1
1 OR 0 → 1
1 OR 1 → 1

どちらか一方が真なら、真となる。
結果が偽となるのは、入力がともに偽の場合だけ
0855デフォルトの名無しさん2015/02/25(水) 10:28:48.23ID:4HjDfert
&& はAND

0 AND 0 → 0
0 AND 1 → 0
1 AND 0 → 0
1 AND 1 → 1

どちらか一方が偽なら、偽となる。
結果が真となるのは、入力がともに真の場合だけ
■ このスレッドは過去ログ倉庫に格納されています