Ruby 初心者スレッド Part 23
at TECH
[前50を表示]
400:デフォルトの名無しさん
08/12/11 23:01:48
端末エミュレータが自動で標準出力に nkf -端末エンコード をかませばいいじゃん
nkf 自動認識が失敗したらなにか出力バッファに対して再試行できる仕組みにしてさ
Emacs が 文字コード指定して開き直せるのと同じような感じで
こういうときは us-ascii で済んでる人間が憎いなあ
401:デフォルトの名無しさん
08/12/11 23:21:56
>>399
どんなデータでもその自動認識が正しく動作するならおまえは天才だ
402:デフォルトの名無しさん
08/12/12 01:25:25
>>389
ありがとうございます。
でもこの場合、引数のほうが長ければ>>389のようにする、ということですよね。
そういうのが面倒だったので、zipにオプションがないかなーと思って質問してみました。
ないようならあきらめて>>389のようにします。
403:デフォルトの名無しさん
08/12/12 02:19:09
>>402
先頭の要素が不足する配列って、明示的にnil入れてあることが多いしね。
zipが複数の配列を引数に取ることを思い出して作り替えてみた。
眠いから間違ってるかも。
def Array.zip2(*ary)
size = ary.map{|i| i.length}.max
top = ary.shift.dup
top[size-1] = nil
if block_givin?
top.zip(*ary){|a| yield a}
else
top.zip(*ary)
end
end
404:デフォルトの名無しさん
08/12/12 02:31:14
>def Array.zip2(*ary)
やっぱ間違ってた、self使ってないorz
def zip2(*ary)ということでひとつ・・・。
405:デフォルトの名無しさん
08/12/12 02:36:23
配列の全内容を変数(String)に入れる簡単な方法はありますか?。
gsubの結果を1つの変数にまとめてgsubにかけようとしたら、
aa = bb.scan(/.+/)
*as = aa
cc = as.gsub(/m/,"")
こんな感じにしても「配列Array」だといわれてエラーで止まってしまいました。
406:デフォルトの名無しさん
08/12/12 02:37:05
訂正
scanの結果を1つの変数にまとめてgsubにかけようとしたら、
407:デフォルトの名無しさん
08/12/12 03:16:27
to_s
408:デフォルトの名無しさん
08/12/12 07:11:21
>>405
joinでいいような。
['aaa', 'bbb', 'ccc'].join #=> "aaabbbccc"
409:デフォルトの名無しさん
08/12/12 07:12:17
to_sは1.9系からinspectっぽくなるからおすすめしない。
410:デフォルトの名無しさん
08/12/12 07:37:25
ブロックの存在忘れ去られている scan (´・ω・) カワイソス
aa = bb.scan(/.+/){|match| match.gsub(/m/,"")}
411:デフォルトの名無しさん
08/12/12 12:39:25
tDiaryとHikiを使ってるんですけど、これはRuby1.9に対応していますか。
412:デフォルトの名無しさん
08/12/12 12:59:52
Ruby1.9はまだ使わないでください。
413:デフォルトの名無しさん
08/12/12 13:04:54
エラーが出ても自力で対処できないしな…
Ruby側が修正されるかライブラリ側が修正されるかするまで全く動作しないとかいうのは
ただ利用したいだけの一般ユーザーの身ではやってられん
が、開発とか覗いてみたいなーと考えてる人なら、1.9上で動かしてみてエラーのレポートとかしてみるといいかも
1ヶ月くらいじーっとROMってれば雰囲気はわかるしさ
414:デフォルトの名無しさん
08/12/12 13:05:51
>>412
いやいや、rc2なんだから使ってもらうべきだろ。
415:デフォルトの名無しさん
08/12/12 13:06:24
>>405
一つの変数には一つのオブジェクトしか入れられない。
だから複数のオブジェクトを入れられるArrayオブジェクトを器にするか
結合して一つのStringオブジェクトにするしかない(>>408)。
gsubしたあとにまたバラバラの文字列である必要があるなら
結合すると分割がめんどうだから
aa = bb.scan(/.+/)
cc = aa.map{|s| s.gsub(/m/,"")}
で配列の各要素に対してgsubをする。
やってることは結果的に>>410と同じだけど、Array#map(Enumerable.map)は
覚えておいて損はない。
416:デフォルトの名無しさん
08/12/12 13:19:55
>>414
お前のような奴がいるからFirefoxは
417:デフォルトの名無しさん
08/12/12 13:22:09
Rubyはバグ報告サポートがまだヘナチョコだからなー
SEGVが出た時点でエラー情報送信ウィンドウが出るくらいじゃないと開発者以外に勧めたらあかんと思う
418:デフォルトの名無しさん
08/12/12 13:35:43
一般ユーザーは偶数安定バージョンの2.0待ちが無難だよ。
419:デフォルトの名無しさん
08/12/12 13:59:05
>>417
dumb端末で使ってるやつもいるんだぞ!
420:デフォルトの名無しさん
08/12/12 14:03:05
>>419
本当? ふつう端末エミュレータかコンソールじゃないの?
今どきシリアル端末なんて管理者だって使わないだろ。
つうか vt100 だって、ダム端じゃねーぞ。
421:デフォルトの名無しさん
08/12/12 14:10:07
cursesが動かない環境はとりあえず切り捨てていい
そんなの使ってる人は自力で何とかすると思われ
422:デフォルトの名無しさん
08/12/12 15:56:53
「44133」を「12時間15分33秒」(の表示に必要な数値)に直してくれるライブラリとかないですかね
423:デフォルトの名無しさん
08/12/12 16:09:20
>>422
標準でありそうだが、ないな
というか時間オブジェクトってないよね
Time::Period クラスとかになるのかな
424:デフォルトの名無しさん
08/12/12 16:16:30
>>422
難しく考えなくても、Time.at(44133)のTimeオブジェクトからhms拾えばおk。
425:デフォルトの名無しさん
08/12/12 16:21:13
あ、タイムゾーン影響を受けるからTime#utcを忘れずに。
426:デフォルトの名無しさん
08/12/12 16:23:19
こんな感じかな?
Time.at(44133).getgm.strftime("%H:%M:%S")
427:デフォルトの名無しさん
08/12/12 16:40:14
24時間を超えたらどうすんの。
428:デフォルトの名無しさん
08/12/12 16:51:05
>>427
どうしようもないな
日の部分が1を超すかどうかをチェックするしかあんめえ
429:デフォルトの名無しさん
08/12/12 16:54:14
そうなると秒数を割り算したほうがわかりやすそうだ
430:デフォルトの名無しさん
08/12/12 16:57:59
>>407
>>408
>>410
joinで解決しました。ありがとうございます。
aa = bb.scan(/.+/){|match| match.gsub(/m/,"")} もいいですが、今一ブロック処理って理解しきれない部分があって。
431:デフォルトの名無しさん
08/12/12 17:02:03
>>415
勉強してみます。ありがとうございます。
432:デフォルトの名無しさん
08/12/12 19:18:43
あるオブジェクトのインスタンス変数に File オブジェクトがセットされてるとして、
そのオブジェクトが GC されるタイミングでその File オブジェクトは close される?
433:デフォルトの名無しさん
08/12/12 19:22:38
あ、それで、もし close されてくれないとして、その場合に、
GC のタイミングで close する
finalizer のようなことをする方法があれば教えてください。
434:デフォルトの名無しさん
08/12/12 19:30:47
>>432
URLリンク(www.ruby-lang.org)
> 参照されなくなったFileオブジェクトは、GCで自動的にクローズされます
>>433
URLリンク(blade.nagaokaut.ac.jp)
require 'finalize'
Finalizer.add(obj)
でobjがGCされるときにobj.finalizeがコールされる
はずだけど使ったこと無いw
435:デフォルトの名無しさん
08/12/12 19:37:48
忘れてた。これも参照のこと。
URLリンク(www.ruby-lang.org)
それと「objがGCされたとき」にobj.finalizeを呼ぶことはできないのか。
Finalizer.add(file, obj)
436:デフォルトの名無しさん
08/12/12 19:48:00
>>434 >>435
ありがとうございます。
明示的に close しないのはあまり行儀が良くないとは思いますが、
それほど扱うファイルが多くない場合には GC に期待しても良さそうですかね。
Finalizer はリファレンスマニュアルに説明が無いですが、
これは使うなという無言の圧力でしょうか・・・
437:デフォルトの名無しさん
08/12/12 19:50:26
いや、明示的に閉じろよ
なんでこの機能に依存するんだよ
438:デフォルトの名無しさん
08/12/12 20:00:19
「ガベコレされる時のフック」はいろいろとヤバい代物だから、
使うのは本当に必要なとき(ってどんなときだろ)のみにすべき。
ファイルのクローズのような処理はガベコレに頼るべきではない。
439:デフォルトの名無しさん
08/12/12 20:19:45
ガベージコレクションはプログラム作成者が意識したらダメよ
いい意味でも悪い意味でもな
オブジェクトの自動回収だけをさせるべき
440:デフォルトの名無しさん
08/12/12 20:28:12
>>437 >>438
自分が一から設計するならそうしたいんですけどね。
hash_table.delete obj
みたいなコードがあって、今まで obj はメモリ内で完結するオブジェクトでしたが、
あるとき機能追加で File を持つ obj も扱うようになりました。
これを真面目に close するとすると delete する直前の箇所で、
obj.close if obj.respond_to? :close
hash_table.delete obj
としたり、 hash_table の初期化をする箇所で
class << hash_table = Hash.new
alias :__delete :delete
def delete obj
obj.close if obj.respond_to? :close
self.__delete obj
end
end
...
hash_table.delete obj
と hash_table を拡張するのは思い付いたんですが、
hash_table 側のコードを変更するよりは、
機能追加する側の obj の方でどうにか (あわよくば GC で勝手に) close できれば
そっちの方が変更としてはスマートかな、と思いました。
何か良い方法ありますかね?
441:デフォルトの名無しさん
08/12/12 20:31:31
いや、だから、openが終わったときにcloseするか、ユーザーのcloseを受け付けるように作れよ
442:デフォルトの名無しさん
08/12/12 20:42:56
Fileオブジェクトを使う人が、そのファイルオブジェクトの責任を持つ
ということで、この場合は勝手に消していいと思う
obj.open だけして放置する人がいたのなら、それはその人が悪いんじゃないかな
443:デフォルトの名無しさん
08/12/12 20:48:32
ど田舎富山DQN男の家族消えろ ど田舎富山DQN男の親消えろ ど田舎富山DQN男の子供消えろ ど田舎富山DQN男の親戚消えろ
ど田舎富山DQN男の家族消えろ ど田舎富山DQN男の親消えろ ど田舎富山DQN男の子供消えろ ど田舎富山DQN男の親戚消えろ
ど田舎富山DQN男の家族消えろ ど田舎富山DQN男の親消えろ ど田舎富山DQN男の子供消えろ ど田舎富山DQN男の親戚消えろ
ど田舎富山DQN男の家族消えろ ど田舎富山DQN男の親消えろ ど田舎富山DQN男の子供消えろ ど田舎富山DQN男の親戚消えろ
ニヤニヤ(・∀・) ニヤニヤ(・∀・) ニヤニヤ(・∀・) ニヤニヤ(・∀・)
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね
苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね
苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね
苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね
死ぬとき このレスの事思い出してから地獄へ行けよ
ニヤ(・∀・)ニヤ(・∀・)
444:デフォルトの名無しさん
08/12/12 20:59:19
Rubyで特定のファイル群を、
OSで関連付けされたアプリケーションで開きたいのですが、
どうすればよいでしょうか。
一種のとして使いたいのです。
445:デフォルトの名無しさん
08/12/12 21:06:56
>>444
Windowsなら、start が使えるはず
system('start hoge.txt')
cmd.exe の内部コマンドなので注意
446:デフォルトの名無しさん
08/12/12 21:14:40
>>440
> 何か良い方法ありますかね?
腐った設計を見直すのが一番いい方法だな
>>444
start とか open とか、そのOSで用意されてるコマンドを使う
447:デフォルトの名無しさん
08/12/12 21:15:44
>>445
できました!
なんという素早く的確なレス!
本当にありがとうございます。ありがとうございます!
448:デフォルトの名無しさん
08/12/12 23:47:41
rubyでcgiの掲示板みたいな物を
作ろうとしているのですが、
テンプレートとなるHTMLを別に用意して
その中の項目などを置き換えて
最終的に表示を行いたいと考えています。
Amrita2 というライブラリが良さげなんですが
サンプルなどが少ないんですよね。
(メインのページ?が404で見れない)
他に、同様な機能を持ったライブラリで
お勧めなどはありますでしょうか。
449:デフォルトの名無しさん
08/12/12 23:56:17
めんどいからrdでやっとけ
450:デフォルトの名無しさん
08/12/13 00:08:10
>>448
Tenjin ってのが速いらしいけど、使ったことないから別にお勧めってわけでもない。
URLリンク(www.kuwata-lab.com)
451:デフォルトの名無しさん
08/12/13 07:29:20
>>448
俺のオススメはTenjinだけど
この辺のライブラリはかなり数があるので、いくつか試して目的に合った奴を使うと良いんじゃないかな
Rubyist Magazine最新号あたりの記事も参考に
ちなみに普通のCGIアプリで使うなら、Amrita2はRubyGemsとHpricotを使っているためオススメできない
(というか普通のレンタルサーバ環境ではまず動かない)
amrita-alteredの方が良いと思う。ただし動作がかなり重いことには注意
452:デフォルトの名無しさん
08/12/13 07:53:50
RDとかではめんどいからテンプレートエンジンが隆盛なんだと思う
決定版がないんだよねという話は5年くらい前からしてる気がするが
453:デフォルトの名無しさん
08/12/13 08:07:15
そもそもテンプレートエンジンに「ただ一つの決定版」って要るのか?
今の状況はけっこう理想的だと思うけど
454:デフォルトの名無しさん
08/12/13 10:35:39
元のファイルを読み込んで新規にファイルを作成し、
その内容を置換する作業を一括してやりたいと思っています。
色々と実験しているのですが通常の置換はできても正規表現による置換ができません。
試している元のファイル「 in.txt 」の内容は、
|青空文庫《あおぞらぶんこ》
へのへの
です。この内容を出力して置換するために書いた「 test.rb 」の内容が次です。
open("in.txt","r"){ |元ファイル|
open("out.txt","w"){ |出力と置換後のファイル|
while line = 元ファイル.gets
line.gsub!("(|)(.+?)(《)(.+?)(》)","\4\3\2\1") #正規表現による置換。変化なし。
line.gsub!("へのへの","もへじ") #通常の置換。OK。
出力と置換後のファイル.puts line
end
}
}
これによって出力された「 out.txt 」の内容が次のものです。
|青空文庫《あおぞらぶんこ》
もへじ
通常の置換は成功していますが、正規表現による置換に変化がありません。
どうすれば良いのでしょうか。
455:デフォルトの名無しさん
08/12/13 10:41:01
あんちゃん、praggerに関するスレってないん?
456:デフォルトの名無しさん
08/12/13 10:42:49
>>454
line.gsub(/(|)(.+?)(《)(.+?)(》)/,"\4\3\2\1") じゃまいか
457:デフォルトの名無しさん
08/12/13 10:47:15
'\4\3\2\1' こうだろ
458:デフォルトの名無しさん
08/12/13 11:03:27
>>448
ふつうにERBでええやん
URLリンク(jp.rubyist.net)
Tenjinは日本語の解説がないからこのレベルの初心者にはムリだと思う
459:デフォルトの名無しさん
08/12/13 11:08:08
>>458
erb より eruby の方が手軽じゃない?
1行目に #!/usr/bin/env eruby って書いておいて、
拡張子を cgi にしておけば普通のCGIと変わらず動くし。
460:デフォルトの名無しさん
08/12/13 11:09:49
>>456
>>457
ありがとうございます。
line.gsub!(/(|)(.+?)(《)(.+?)(》)/,'\4\3\2\1')
で出来ました!
正規表現はスラッシュで、
後方参照はシングルクォートで囲む必要があるんですね。
すごく勉強になりました。
このスレの皆さんのおかげで本当に助かります。
あらためて感謝します。
461:デフォルトの名無しさん
08/12/13 11:47:48
ラ 出来ました!
懿「ォ めくらっぽう滅茶苦茶やってたらたまたま動作しました
462:デフォルトの名無しさん
08/12/13 13:05:38
gsubでブロック紹介しない時点でなあ…
463:デフォルトの名無しさん
08/12/13 13:37:05
strscanらぶ
464:デフォルトの名無しさん
08/12/13 13:42:35
>>458
今ならERbよりErubisの方が良くないか?
>>459
まず、erubyのインストールが厄介なのでは
465:デフォルトの名無しさん
08/12/13 14:00:56
各行の先頭に連番を振ることはできませんか。
「行数=挿入する数字」で良いんですが。
466:デフォルトの名無しさん
08/12/13 14:01:26
あのへんはサーバ上で動かすための設定やインストールが面倒でなあ…
ローカルでスクリプトとして使うならそれほどでもないんだが
467:デフォルトの名無しさん
08/12/13 14:03:07
>>465
各行に対して、正規表現の文頭を数字で置換しれ
改行区切りで配列にしてしまうのが簡単だと思う
joinでくっつけるときの改行コードは元の改行にしておくこと
468:デフォルトの名無しさん
08/12/13 14:09:35
str = "a
bb
ccc
dddd"
lines = Array.new
str.to_a.each_with_index do |e, n|
lines.push(e.sub(/^/){"#{n+1}: "})
end
print lines.join
結果
1: a
2: bb
3: ccc
4: dddd
このまま使うと2桁3桁のとき数字表示が汚くなるが、そのへんは自分で考えれ
469:デフォルトの名無しさん
08/12/13 17:17:48
>>467>>468
親切にありがとうございます。
>各行に対して、正規表現の文頭を数字で置換しれ
これはよく分かるのですが、
>改行区切りで配列にしてしまうのが簡単だと思う
というのがよくわからないのです。
str="●●●"の●●●の部分に連番を振りたいファイルの内容を
全部コピーして貼り付けて実行すれば良い、ということなのでしょうか?
確かにそれなら実現できました。
ただ、手間がかかるので
連番を振りたいファイルを指定して、
中身を直接書き換えられれば有難いのです。
そのような方法はありませんでしょうか。
ひょっとして初心者丸出しの質問なのかもしれませんが、
御教示頂ければ幸いです。
470:デフォルトの名無しさん
08/12/13 17:46:04
プログラミングとクラスの考え方がまだ身についてないっぽい
必要なのはString オブジェクトだ
つまり文字列
ファイルパスを指定するとファイル内容を文字列で返すメソッドを持つクラスがあるからそれ使え
ファイル内容を文字列で取得できたら文字列内を置換しれ
んで書き込みたい文字列を作れたら、同じ名前でファイルに書き込め
471:デフォルトの名無しさん
08/12/13 18:02:44
・ スクリプト内の変数の文字列を置換する
・ スクリプト内で指定したファイル内容を読み込んで表示してみる
・ 読み込んだファイル内容を置換して表示してみる
・ 置換した内容を別ファイル名で保存してみる
・ あらかじめ元ファイルをバックアップしておき、置換した内容を元と同じ名前で保存してみる
・ あるフォルダ(ディレクトリ)のファイル一覧を取得して表示してみる
・ 自分の欲しいファイル名だけを抽出する方法を考えてみる
・ 一覧のひとつひとつに対してファイル名だけを表示させてみる
・ ファイル名の表示の部分を「ファイル内容を読み込んで表示」に切り替えてみる
・ 「ファイル内容を読み込んで表示」の部分を「読み込んで置換して同名で保存」に置き換える
こんな感じ?
472:デフォルトの名無しさん
08/12/13 18:03:47
> ・ スクリプト内で指定したファイル内容を読み込んで表示してみる
スクリプト内で指定したファイル名の内容を読み込んで表示してみる、だった
473:デフォルトの名無しさん
08/12/13 18:10:45
問題を「これならできそう」って思える程度に分割する能力って大切だよね
オライリーはPragmatic Thinkingなんちゃらって本の日本語版出せばいいのに
474:デフォルトの名無しさん
08/12/13 18:28:21
>>471みたいなのは、現状、意識的に経験積むしかないんだよね
うまい本とかあればいいんだけど、あんまり聞かないな
475:デフォルトの名無しさん
08/12/13 18:33:15
>>471
そんな感じです。お手数をかけてすみません。
それを参考にして一つ一つ覚えて行きたいと思います。
何度か他の言語を覚えようとして挫折したのですが、
Rubyは簡単に結果を出力できて感動したので、
この言語を勉強することにしました。
(プログラムは素人ですが、
Rubyのコードがシンプルで美しいと思ったのも動機の一つです)
一応「たのしいRuby」と「Rubyレシピブック」は購入しましたので、
今は「15.2 基本的な入出力操作」を試しています。
プログラムとかはやったことはないのですが、頑張って覚えるつもりです。
476:デフォルトの名無しさん
08/12/13 18:37:33
すると
File.open(path, 'r'){|f| puts f.read}
ができた頃かね
f.read が文字列を返してることがわかったら、ファイルひとつを置換するのはもうすぐだな
477:デフォルトの名無しさん
08/12/13 22:18:03
ワンライナーだと
ruby -pe "printf '%4d ',$." ファイル名
でファイルに4桁の行番号をつけて標準出力に表示
ファイルを書き換えたければ -i.bak などと-i オプションにバックアップの拡張子をつけて実行
ruby -i.bak -pe "printf '%4d ',$." ファイル名
標準入力から読み込んだ場合の行番号は$.に入ってる、行番号の形式を変えたければprintfを勉強する
複数のファイルを指定しても大丈夫
Windowsだと -i の拡張子無しでの直接書き換えが出来ないのがちょっとやだな
UNIXだと ファイル開いておいて、開いたファイルを削除して、書き込み用で同名のファイルを作成するのかな?
PerlでもWindowsだと出来ないので、同じような動作してるんでしょうね
というか、Perlの動作を再現してるんでしょうけど
478:デフォルトの名無しさん
08/12/13 22:25:44
path = 'test.txt' #適当に作っといてね
outfile = 'testwrite.txt' #問答無用で上書きされるぞ
と、すると
pathファイルを開いて、全体を一気に読み込んだものを表示する
open(path, 'r'){|f| puts f.read}
pathファイルを開いて、一行読み込んで表示するのを最後まで繰り返す
open(path, 'r'){|f| f.each{|line| puts line}}
pathファイルを開いて、一行読み込んで、行番号表示して、行の内容を表示するのを最後まで繰り返す
open(path, 'r'){|f| f.each_with_index{|line,ind| printf '%3d ',ind+1;puts line}}
pathファイルを開いて、書き込み用のoutfileファイルも開いて、一行読み込んで、ファイルに行番号書き込んでから行の内容も書き込むのを最後まで繰り返す
open(path, 'r'){|f| open(outfile,'w'){|out| f.each_with_index{|line,ind| out.printf '%3d ',ind+1;out.puts line}}}
479:デフォルトの名無しさん
08/12/13 22:30:00
cat -n
480:デフォルトの名無しさん
08/12/13 22:32:30
>>479
そんなこと言ったら行番号付加ツールインストールすれば一発だぞ
481:デフォルトの名無しさん
08/12/13 23:42:38
$.
482:デフォルトの名無しさん
08/12/14 01:44:40
>>476
お恥ずかしながら io.readlines のことかと思って悪戦苦闘していました。
例文通りに打ち込んでも上手く行かないので、何かプログラムの根本的な
ところが判ってないのだと思って再び悩んでいました。
>>477
>>478
ありがとうございます。おかげさまで希望通りの動作が実現しました。
教えて君のような私にここまでして頂いて何と感謝すれば良いのか判りません。
私に何ができるわけでもありませんが、似たようなことがあったら、
私もこのスレの皆さんのような態度で困った人に接したいと思います。
このスレの皆様に心から感謝します。本当にありがとうございました。
483:デフォルトの名無しさん
08/12/14 03:03:55
馬鹿なの?
死ぬの?
484:デフォルトの名無しさん
08/12/14 05:12:40
>>482
たかが2chでそこまでバカ丁寧になる必要はない
教えてやりたい人間が教えたいように教えただけ
>>483
バカ丁寧だから、バカなんじゃない?
485:デフォルトの名無しさん
08/12/14 05:13:18
ああ忘れてた、>>477-478, 乙であります
486:デフォルトの名無しさん
08/12/14 05:40:39
>>484
たかが2chで「必要がない」ことをそんな大きく見てもしょうがない。
他の多くのレスの不必要な表現と同じように、>>482も書きたいように書いただけ。
487:デフォルトの名無しさん
08/12/14 12:37:57
>>455
ないみたいね
そもそもPlaggerのスレさえも立ってない
(理由は不明だけど、俺は人気がないんだと思っている)
話したいなら、ここや本スレでも良いと思うよ
488:デフォルトの名無しさん
08/12/14 12:47:00
ruby-ldapのインストール方法について質問です。
OSはcentos5.2を使用して
ruby本体は、 ruby-1.8.6-p287をcheckinstallにてRPM化しインストールしています。
ruby-ldap-0.9.7-1.i386.rpmを入手して、インストールを試みたところ下記のような
エラーメッセージが出力されて、二日ほど止まりっぱなしです。
どなたかアドバイスをお願いします。
# rpm -ivh ./ruby-ldap-0.9.7-1.i386.rpm
警告: ./ruby-ldap-0.9.7-1.i386.rpm: ヘッダ V3 DSA signature: NOKEY, key ID bfbaf0e8
エラー: 依存性の欠如:
libcrypto.so.5 は ruby-ldap-0.9.7-1.i386 に必要とされています
libruby.so.1.8 は ruby-ldap-0.9.7-1.i386 に必要とされています
libssl.so.5 は ruby-ldap-0.9.7-1.i386 に必要とされています
#
489:デフォルトの名無しさん
08/12/14 13:03:15
>>488
ruby-dev のようなもの、libopenssl-ruby のようなもの、openssl のようなもの、のインストールが足りない
Ruby関係ないな
490:デフォルトの名無しさん
08/12/14 13:13:04
rpm コマンドの使い方の話だね
必要なファイルを含むパッケージを表示する方法があるはずだから、それでインストールするパッケージを調べるといい
491:デフォルトの名無しさん
08/12/14 13:49:11
>>489-490
ruby-devとlibopenssl-rubyについては入っていません。。
ruby-dev`については、自ら作成したrubyのRPMファイルを入れるときに
アンインストールしちゃいました。
含んでいそうなファイルを探してみます。
ありがとうございました。
492:デフォルトの名無しさん
08/12/14 13:53:01
devは作るときのだから、バイナリを入れるだけならなくても大丈夫だと思う。
493:デフォルトの名無しさん
08/12/14 14:51:23
結局、
# rpm -qa | grep ruby
ruby-irb-1.8.6.287-1.el5.kb.1
ruby-libs-1.8.6.287-1.el5.kb.1
ruby-1.8.6.287-1.el5.kb.1
ruby-devel-1.8.6.287-1.el5.kb.1
こんな感じに拾ってきたrpmを入れてから、
#rpmbuild -ta ruby-ldap-0.9.7.tar.gz
を実行して、自分でrpmファイルを作ったら、インストールできました。
この状態だとgemが入れられなかったので、rubyのrpmファイルを自前で作成して
インストール後、上記の状態にしたのでgemがどっかで不具合を起こさないか不安ですけど。
ちなみに、gemがインストールできないのはrdocがロードできないとか怒られた。
rdocのrpmファイルってどこかに落ちてるんでしょうか?
494:デフォルトの名無しさん
08/12/14 14:56:39
ディストリビューションオフィシャルリポジトリの存在を無視するな
495:デフォルトの名無しさん
08/12/14 20:54:03
関連付けでファイルを開きたいのですが、
どうすればいいでしょうか。
path ="test.txt"
system("start path")
これだとコマンドプロンプトが立ち上がるだけで
関連付けでファイルを開いてくれません。
496:デフォルトの名無しさん
08/12/14 21:01:50
コマンドラインから「start path」という9文字を入力してEnterしてみ
それと同じことが起きてるだけ
497:デフォルトの名無しさん
08/12/14 21:03:03
system("start #{path}")
498:デフォルトの名無しさん
08/12/14 21:43:35
>>497
出来ました! ありがとうございます。 m(_ _)m
499:デフォルトの名無しさん
08/12/14 22:13:54
あと10日で1.9正式リリースなわけだが大丈夫なの?
1.9向けにライブラリ作っていい?
500:デフォルトの名無しさん
08/12/14 22:26:51
対
応
で
き
る
も
ん
が
作
れ
るなら作ってみな
という感じだ
特にEncode関連
501:デフォルトの名無しさん
08/12/14 22:29:24
文法エラーが出なくなる程度の対応は進めてもらえると
いちユーザーとしてもいきなり挫折しなくて済んでいいかも
ruby1.9 ./hoge.rb
しただけで普段見たことも無いファイルのやたら多い行数のとこでSyntaxErroroとか挫けるし
502:デフォルトの名無しさん
08/12/14 22:30:51
>>499
1月に延期されたとかなんとか
503:デフォルトの名無しさん
08/12/14 22:32:38
1.9に自作ライブラリを対応させるためのHOWTOとかそういう文書ってある?
1.9.0 features を読んで逐一チェックするしかない?
504:デフォルトの名無しさん
08/12/14 22:51:10
>>499
12月25日に予定されてるのは、1.9.1のRC(リリース候補)で正式版じゃない
といっても、現時点でもう1.9.1の仕様は固まってるはずなので、今から作り始めても良いと思うが
505:デフォルトの名無しさん
08/12/14 22:51:59
>>503
たぶんrubikitichがホッテントリ狙って書くよ。
506:デフォルトの名無しさん
08/12/14 22:58:22
ぬう
507:デフォルトの名無しさん
08/12/14 23:10:00
下の文字列がなぜ文字化けするのですが、何が原因でしょうか。
$KCODE="s"
tut = "12月28日 夢見師(プリンセスソフト、7,140円) "
p tut
508:デフォルトの名無しさん
08/12/14 23:13:46
s?
509:デフォルトの名無しさん
08/12/14 23:14:57
すいません、
#!/usr/local/bin/ruby -Ks
の1行入れてなかったことによるものでした。お騒がせしてすいません。
>>508
sjisのことです。
510:デフォルトの名無しさん
08/12/14 23:49:31
やっぱり詰まった...。
以下a1の文字列の内()とその中身を消したいのですが、
なぜか ) だけ残して全て消えてしまいます。
#!/usr/local/bin/ruby -Ks
$KCODE="s"
a1="最強 東大将棋6(毎日コミュニケーションズ、2,940円) "
a1 = a1.gsub(/.*?月.*?日 /,"")
a1 = a1.gsub(/(.*?円)/,"")
p a1
511:デフォルトの名無しさん
08/12/14 23:53:36
正規表現中のカッコは特別な意味を持つメタ文字だよ
正規表現中でカッコそのものを表すなら \( や \) のようにエスケープしなきゃだめ
512:デフォルトの名無しさん
08/12/15 01:03:05
>>511
え゛っ、そうなんですか!!
/に\/しなきゃならないのは知っていたですが、()もでしたか。
他でもポカしてそうだな。
ご解答ありがとうございます。
513:デフォルトの名無しさん
08/12/15 01:04:30
>512
英数はそのまま書くとその文字、\を付けると特別な意味になることが多い。
逆に記号はそのまま書くと特別な意味があることが多く、\を付けるとその文字ってことが多い。
514:デフォルトの名無しさん
08/12/15 01:41:29
てかマニュアルに全部書いてあるんだからきちんと読め
記号の意味そのものは必要なときに調べればいいから覚えなくてよし
エスケープが必要な文字かどうかだけを記憶すればおk
515:デフォルトの名無しさん
08/12/15 09:11:03
ピリオドも意味もってるんだけど
間違ってエスケープせずにピリオド使ってても
そのまま動いてしまって気付かないことが多い
あとで忘れた頃に問題が表面化するから初心者は注意な
516:デフォルトの名無しさん
08/12/15 09:54:50
image_paths = filepaths.find_all{|e| /.jpg\Z/ =~ e}
で99.99%くらいは普通に動作するんだよな
517:デフォルトの名無しさん
08/12/15 10:02:26
正規表現の粒度をどれくらいにするかというのは永遠の問題
わかってない人が「メールアドレスにヒットする正規表現を書け」とか課題出したりするんだが
518:デフォルトの名無しさん
08/12/15 10:27:14
"(a)"
から
/\s*\(a\)\s*/
を生成するのってどうやるんですか?
a = "(a)"
/\s*#{a.escape}\s*/
みたいに書ければいいんだけど
519:デフォルトの名無しさん
08/12/15 10:41:09
>>518
マニュアル読んどけ
Rubyの正規表現はただのオブジェクトだからRegexpクラスのメソッドで生成できる
/〜/ で書くのはただのわかりやすいエイリアスに過ぎない
あと、半角スペースと \s には直接の関係はないから、あらかじめ \s で書いておくしかないよ
個人的には半角スペースを \s で表現するようにするのは後々罠に落ちるから全くお勧めしない
半角スペースがあるのなら、どんなに正規表現の見かけがマヌケになっても半角スペースで書くべき
520:デフォルトの名無しさん
08/12/15 11:10:37
>>518
/\s*#{Regexp.escape(a)}\s*/
Regexp.quoteという別名も。
521:455
08/12/15 21:43:26
>>487
あんちゃん、ありがとう。
せつこ、このスレで日本一のpragger目指すんよ。
522:デフォルトの名無しさん
08/12/15 21:57:53
技術的には便利だけど、他のことで代替できるよね、という微妙な立ち位置がどうにも…
プラガブルであることのメリットがイマイチ生かされてないんだな
523:デフォルトの名無しさん
08/12/16 05:42:09
URLリンク(www.google.co.jp)
逆転しそう
524:デフォルトの名無しさん
08/12/16 05:46:15
URLリンク(www.tiobe.com)
逆転もなにも、世界的には10位以下に後退したダメダメ言語だけどね
(ただ、Pythonが下がってたりLogoが爆上げしてるところから見ても
かなり変な順位づけであることは間違いない)
525:デフォルトの名無しさん
08/12/16 19:07:50
D:/desktop にある、
001test.txt
002test.txt
003test.txt
という複数のファイルを、
数字の部分に正規表現を使ったパスで一度に開きたいのですが、
どうすれば良いでしょうか?
次のように書いているのですが上手く行きません。
files = /D:/desktop/[0-9]+test.txt/
system("start #{files}")
526:デフォルトの名無しさん
08/12/16 19:21:31
リファレンスマニュアルの正規表現のとこ読め
あと %r の使い方も調べとけ
527:デフォルトの名無しさん
08/12/16 19:24:19
よく見たら正規表現関係無いじゃないか
Dir.glob
528:デフォルトの名無しさん
08/12/16 21:05:12
>>527
御返事ありがとうございます。
それで調べたら Dir.glob は正規表現ではなくワイルドカード対応と書いてあるのですが、
これは正規表現には対応していないということではないでしょうか。
>>525の書き込みはあくまで勉強中の実験のものなので、
実際に使う時にはパスを正規表現で指定したいのです。
また、>>525では省略しましたが、
開きたいファイルは似たような名前が多いので、最終的には、
name = ●●
files = %r("D:/desktop/[-9]+●●.txt")
system("start #{files}")
というような形にして、●●の部分を書き換えるだけで
任意のの複数のファイルを開けるようにしたいのです。
529:デフォルトの名無しさん
08/12/16 21:28:50
>>528
そういうのだと全ファイル名から正規表現でselectせざるをえないかな。
530:デフォルトの名無しさん
08/12/16 21:50:09
Rubyではselectはあまり使わない
find_all と呼ぶ
531:デフォルトの名無しさん
08/12/16 21:59:18
>>528
まったく同じことを繰り返すことになるが、Rubyのオブジェクトについての考え方学んでくれ
返り値がただの文字列なら、それはただの文字列(String クラスのオブジェクト)で、何か特別なものがあるわけじゃない
Stringクラスのメソッドが完全に全て動作するし、文字列オブジェクトを引数にとるメソッドは全て完全に動作する
メソッドの返り値がどのクラスのオブジェクトなのかということは絶対に意識しないと駄目よ
正規表現を使いたいなら、引数…、まあ、引数の見かけしてないことが多いけど、マッチ試行対象は文字列だ
いちばん単純な状態で必要なのは、ディレクトリ中のファイルを文字列で返すメソッド
その文字列の一群の中から、正規表現にマッチする文字列を探して、その文字列をどうにかすればいい
532:デフォルトの名無しさん
08/12/16 21:59:19
>>530
ソースは?
533:デフォルトの名無しさん
08/12/16 22:43:20
target = 'D:/desktop/*'
filter = /\d+test.txt/
system(Dir.glob(target).select{|i| i =~ filter}.unshift('start').join(' '))
534:デフォルトの名無しさん
08/12/17 00:24:48
>>533
なあ、初心者スレなんだから、もっと分かりやすく書こうぜ
filenames = Dir.glob('D:/desktop/*')
filenames = filenames.grep(/^¥d+test¥.txt$/)
system "start #{filenames.join(' ')}"
535:デフォルトの名無しさん
08/12/17 00:34:21
>>534
改行が存在しない文字列に対して ^ と $ は不適
代わりに \A と \Z を使おう
536:デフォルトの名無しさん
08/12/17 00:43:57
どなたかアドバイスください。ruby1.8.7です。
require 'tk' がうまく いきません。以下のようなメッセージが表示されます。
in `require' : no such file to load --tk (LoadError)
どうすればいいでしょうか?
537:デフォルトの名無しさん
08/12/17 00:46:52
>>536
Tcl/Tkが入ってないんじゃね?
538:デフォルトの名無しさん
08/12/17 00:48:23
>>536
tkライブラリを見つけられなかった。
tkがインストールされない環境(ってなんだろ?)か
$LOAD_PATHがおかしいんじゃない?
539:536
08/12/17 01:02:12
sudo find / -name tk で検索したところ
/usr/local/lib/ruby/1.8/test/unit/ui/tk
/usr/lib/ruby/1.8/test/unit/ui/tk
が見つかったんですけどこれとは違うんでしょうか?
ちなみに echo $LOAD_PATHでは何も表示されませんでした。
540:デフォルトの名無しさん
08/12/17 01:13:10
>>534
質問者の求める「正規表現の使えるglob」が提供されて無いから別解を提示しただけ
分かりにくいってのはわざとそうしてるんだから許してよ
>>539
それ違う
OS何?tcl/tk入ってる?wishコマンド使える?
541:デフォルトの名無しさん
08/12/17 08:10:32
>>535
>改行が存在しない文字列に対して ^ と $ は不適
逆だろ。改行が存在しない文字列だからこそ ^ や $ を使っても構わない。
542:デフォルトの名無しさん
08/12/17 08:13:15
>>540
>分かりにくいってのはわざとそうしてるんだから許してよ
なんでそんなことをするの
分かりやすく書けないのをごまかしてるだけじゃねーのかよ
543:デフォルトの名無しさん
08/12/17 08:22:36
>>541
あまりRubyの正規表現に詳しくない人間が見たら
「ああ^と$は文字列先頭と末尾なんだな。Perlと同じなんだな」とか
勘違いしちゃうよ
544:デフォルトの名無しさん
08/12/17 08:44:02
>>534
>system "start #{filenames.join(' ')}"
system 'start', *filenames
でよくね?
545:デフォルトの名無しさん
08/12/17 10:21:20
>>544
そんなこと言ったら2行目はメソッドチェーンで消えるし、
対象ディレクトリが専用ディレクトリならそもそも Dir.glob のワイルドカードつき文字列でも充分だ
君が *引数 をオボエタテだからだからといってわざわざ難しくする必要はない
546:デフォルトの名無しさん
08/12/17 10:28:48
>>541
目に見えない文字や場所にマッチする正規表現は慎重に使ったほうがええぞ
半角空白にマッチさせるために \s を使ったりしないだろ
それと同じこと
547:デフォルトの名無しさん
08/12/17 10:30:19
>>545
544じゃないけど、一般にsystemの引数は ' ' でjoinするより * で渡すほうが空白を含むファイル名等の問題をより安全に回避できるので、* のほうがお勧めだけどね
548:デフォルトの名無しさん
08/12/17 10:37:16
*の引数展開はマニュアルでも辺鄙なとこにしか書いてないからな
使うなら堂々と初心者向け解説の3ページ目から使いまくるくらいの感じにして欲しいとは思う
549:デフォルトの名無しさん
08/12/17 10:45:05
`
mkdir foo
mkdir bar
`
みたいに途中でシェルスクリプトだらだら書けるようなやり方ってない?
上の書き方だとmkdir fooだけ実行されるっぽい
550:デフォルトの名無しさん
08/12/17 10:49:19
`` はシェルコマンドを実行したいときに使う記法じゃないぞ
返り値が必要なときに使うもんだ
system 使え
551:デフォルトの名無しさん
08/12/17 10:57:56
>>544 >>547
やってみた?
552:デフォルトの名無しさん
08/12/17 11:17:32
534です。
>>547
たいへん参考になりました。
ただ初心者スレで使うには説明が必要ですね。
553:デフォルトの名無しさん
08/12/17 11:21:00
>>550
system "
mkdir foo
mkdir bar
"
でも変わらなかった
554:デフォルトの名無しさん
08/12/17 11:31:24
>>553
シェルスクリプトとみなせる環境であるなら全部実行できるはず
動作しないとしたらWindowsかCygwinだな
555:デフォルトの名無しさん
08/12/17 11:33:20
渡した文字列がshに渡るんだから
mkdir foo; mkdir bar だろう。
つーかそんなことしなくても、
mkdir foo bar でいいだろう。
556:デフォルトの名無しさん
08/12/17 11:35:50
>>555
最新5レスしか読めない携帯からのご参加ですか?
557:デフォルトの名無しさん
08/12/17 11:38:56
>>555
mkdir したいって話じゃねーだろ
>>553
Windowsではでっかいひとつのスクリプトとして実行するしかなさそうだな
558:デフォルトの名無しさん
08/12/17 11:39:43
つーか、全部シェルスクリプトで書けば?
system "foo.sh"
したらいいやん
559:540
08/12/17 12:15:12
>>542
初心者にはメソッドチェーンが読みにくいかもしれない、とは思ったけど
読み解くのも勉強になるだろうと思ってそのまま書いた
grep と system(*args) は知らなかったから書き直すよ
target = 'D:/desktop/*'
filter = /\d+test.txt/
command = 'start'
system(*Dir.glob(target).grep(filter).unshift(command))
560:デフォルトの名無しさん
08/12/17 14:15:15
>>559
>system(*Dir.glob(target).grep(filter).unshift(command))
なぜわざわざunshiftを使うのか分からん。>>544の通りに
system command, *Dir.glob(target).grep(filter)
でええやん。
561:デフォルトの名無しさん
08/12/17 14:34:26
すっごい前に、配列からの抽出にpopとshiftを使う子がスレにいたな
キューじゃないものに pop とか使ったらダメよ混乱するから
562:デフォルトの名無しさん
08/12/17 15:00:35
>>530
RubyのselectはSQLのselectじゃなくて
Smallltalkのselectに由来するって知ってるか?
563:デフォルトの名無しさん
08/12/17 15:09:54
>>561
普通に使ってるし、混乱するって話もあまり聞かないぞ
そもそもpopやshiftを使わないとすると、代わりにどんな風に書くんだ?
564:デフォルトの名無しさん
08/12/17 15:14:58
>>562
「外来語」の detect と select で悩むくらいなら find と find_all を使うなあ、俺は
というかなんでそこで SQL が出てくるんだ?
565:デフォルトの名無しさん
08/12/17 15:21:17
当時の様子は知らないし、同じくキューでない配列にも普通にpop/shiftは使うけど
配列から取り除くことが作用ではなく副作用になる場合以外、
「配列から取り除く(ついでに値を得る)」ではなく
「値を得る(ついでに取り除く)」だと思ってるとミスするという話かと。
def get_first(ary)
ary.shift
end
ary = [1,2,3]
put get_first(ary) # aryが破壊される
566:デフォルトの名無しさん
08/12/17 15:35:31
>>563
同意
queue じゃなくても、popもshiftも使うよな
567:デフォルトの名無しさん
08/12/17 15:38:04
キューでもないのにpopが積極的に必要になる場面が思いつかない
イテレータ拒絶派か何かか?
568:デフォルトの名無しさん
08/12/17 15:42:26
>>567
split結果の先端や終端にゴミついてるのが確実なときに切り落とすためとか。
569:デフォルトの名無しさん
08/12/17 15:55:45
>>568
delete_at(0)
配列先頭のデータが欲しいときに
data = arr.delete(0)
と書くのが奇妙なのと同程度には
# 先頭は不要
arr.shift
と書くのは奇妙だと思う
shift に関してはコマンドライン引数を順に扱うときに shift コマンドを使った経験が後を引いてるのかもしれないが、
ここは Ruby だし shift は変
570:デフォルトの名無しさん
08/12/17 15:57:55
そろそろ誰の何の質問の答えているのかはっきりさせようか
571:デフォルトの名無しさん
08/12/17 15:58:58
じゃあどう書けばRuby的なの?
572:デフォルトの名無しさん
08/12/17 16:19:46
配列を破壊しなければうまくいかないかどうかによって違うんじゃね
573:デフォルトの名無しさん
08/12/17 16:19:54
>>570
>質問・要望・雑談などどうぞ。
>>569
奇妙なのはそのコメント文だろうw
代入操作がないことから不要なことは自明。
返値があるものは代入しないといけないなんてルールはないし。
>>565のように先頭や末尾の要素を配列から取り除くのが主の操作で、
popやshiftにそれ以上の意味(=キュー専用)はないと考えてる。
だからdelete_at使えというのは、firstやlastもat(0)やat(-1)にしろと
言っているように聞こえる。
キューでない配列に対してpopやshiftがよろしくないなら
Array#pop #shift #push #unshiftは廃止してQueueクラスを用意するべき。
運用で制限しようとするほうがおかしい。
(threadのものと名前がかぶるけどそれはさておき)
574:デフォルトの名無しさん
08/12/17 19:49:45
難しく考えたことねえな
ところでその考え方だとpopはキューに使っちゃダメだろ
あれはスタックに使うものでは?
575:デフォルトの名無しさん
08/12/17 21:13:20
>>569
切り捨てるより、shiftで切り出された結果を使う方が多い
param = ARGV.shift
line = lines.shift
とか
576:デフォルトの名無しさん
08/12/17 21:39:05
each でブン回すのが Ruby 的ではあるんだろうな
577:デフォルトの名無しさん
08/12/17 21:54:01
>>574
push⇔shift
unshift⇔pop
これでキューが出来上がる。ただし左がエンキュー、右がデキュー
578:デフォルトの名無しさん
08/12/17 21:59:30
素直にQueueクラス作れよ、というのは昔から言われてはいたな
というか、説明もないしキューの概念知らない人もそこそこいるのでは
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4283日前に更新/244 KB
担当:undef