Ruby 初心者スレッド Part 23
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2008/11/20(木) 04:30:21【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
【最新安定版の Ruby1.8.7 の使用をお勧めします】
※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。
1.9 の新機能の一部が利用可能なので初学者にお勧めです。
※ただし十分安定しているとは言えないので
プロダクション環境での利用にはお勧めしません。
関連スレやURLは>>2-8あたりを見てください。Ruby on Railsの質問はRailsスレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・モジュール名やエラーメッセージでググる
・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0002デフォルトの名無しさん
2008/11/20(木) 06:26:43Q:
いちからRubyを始める初心者向けのRuby入門書は何がおすすめでしょうか?
A:
プログラム作成の初心者だったら
「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/dp/4797336617/
他の言語経験があるんだったら
「プログラミングRuby 第2版 言語編」
http://www.amazon.co.jp/dp/4274066428/
「初めてのRuby」
http://www.amazon.co.jp/dp/4873113679/
「Ruby Way 第2版」
http://www.amazon.co.jp/dp/4798115339/
0003デフォルトの名無しさん
2008/11/20(木) 06:32:31Ruby 初心者スレッド Part 22
http://pc11.2ch.net/test/read.cgi/tech/1221467121/
■関連スレ
Rubyについて Part 33
http://pc11.2ch.net/test/read.cgi/tech/1223709050/
Rubyの宿題教えてください。2限目
http://pc11.2ch.net/test/read.cgi/tech/1200175247/
RubyCocoa 初心者質問【Leopardバンドル記念】
http://pc11.2ch.net/test/read.cgi/mac/1193373811/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
デザパタ + Python/Ruby/Smalltalk part2
http://pc11.2ch.net/test/read.cgi/tech/1175959706/
魁け! Ruby 1.9.X
http://pc11.2ch.net/test/read.cgi/tech/1201603546/
Rubyについて(アンチ専用) Part003
http://pc11.2ch.net/test/read.cgi/tech/1207233348/
【Ruby/SDL他】Rubyでゲーム制作・総合スレッド
http://pc11.2ch.net/test/read.cgi/gamedev/1207069887/
【Ruby】RubyonRailsPart6
http://pc11.2ch.net/test/read.cgi/php/1224838013/
0004デフォルトの名無しさん
2008/11/20(木) 06:33:07http://pc11.2ch.net/test/read.cgi/tech/1216829388/
0005デフォルトの名無しさん
2008/11/20(木) 06:33:54Ruby Home Page
http://www.ruby-lang.org/ja/
Rubyリファレンス(よくサーバーエラーになります)
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ (英語)
リファレンスのHTMLヘルプ版配布
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
# Windowsで便利
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
Programming Ruby - The Pragmatic Programmer's Guide
http://www.ruby-doc.org/docs/ProgrammingRuby/
# 好評書籍をWebで公開中、ただし英語
逆引きRuby
http://www.namaraii.com/rubytips/
0006デフォルトの名無しさん
2008/11/20(木) 06:34:30http://raa.ruby-lang.org/
RubyForge
http://www.rubyforge.org/
# Rubyのアプリやライブラリが検索できる
GitHub RubyGems
http://gems.github.com/
http://github.com/
# 最近は RubyForge より GitHub が人気
日本Rubyの会 公式Wiki
http://jp.rubyist.net/
# メニューに表示されていない埋もれた情報ページ多数
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
# コードレビューが好評
Ruby hotlinks 五月雨版(日記やblogのアンテナ)
http://www.rubyist.net/~kazu/samidare/
Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2
<rubyXML/>
http://www.rubyxml.com/
Matzにっき(Ruby作者の日記)
http://www.rubyist.net/~matz/
0007デフォルトの名無しさん
2008/11/20(木) 06:38:34Ruby 初心者スレッド Hiki
http://starlet.s145.xrea.com/ruby/hiki/
Ruby Portal
http://ruby.morphball.net/portal/
■プレゼンテーション
Ruby会議2008
http://jp.rubyist.net/RubyKaigi2008/
http://www.nicovideo.jp/tag/rubykaigi2008
Ruby会議2007
http://jp.rubyist.net/RubyKaigi2007/
http://www.nicovideo.jp/tag/RubyKaigi2007
00082-7
2008/11/20(木) 06:40:230009デフォルトの名無しさん
2008/11/20(木) 08:38:130010デフォルトの名無しさん
2008/11/20(木) 08:52:17RubyのソースやCで書かれた拡張ライブラリをさっくり読むとよいかも。
それ自身が、CとRubyの連携のサンプルになってます。
0011デフォルトの名無しさん
2008/11/20(木) 09:53:52ttp://eto.com/d/EmbededRuby.html
ここからリンクされてる先を見れ
0012デフォルトの名無しさん
2008/11/20(木) 11:00:07YAMLは読み込んだらツリーな連想配列になっていて簡単に使えますよね?
そのように、XMLを読み込んだら連想配列になっていて欲しいのですが・・・
もちろん、XMLは単純な構造を想定しています。
0013デフォルトの名無しさん
2008/11/20(木) 11:05:44ttp://xml-simple.rubyforge.org/
0014デフォルトの名無しさん
2008/11/20(木) 11:48:47おお!ありがとう。検索でもそのライブラリがひっかかりました。
使ってみたいと思います。
---以下チラシのウラ---
Ruby MagazineでYAMLの説明で、
「データを配列とハッシュとスカラーだけで表現する簡易性こそが YAML 」
なんていう名言?がありまして、YAMLはデータ記述(マークアップではなく)に
向いていて感激したのですが、プログラマさん以外には
(HTMLに似ている)XMLの方が馴染み深かったりするのですよ。
それでYAML感覚でXMLを使えたら置き換えできそうと思ったしだい
0015デフォルトの名無しさん
2008/11/20(木) 22:10:43excel = WIN32OLE.new('Excel.Application')
excel.visible = false
excel.displayAlerts = false
などの定義の部分をクラス化し、使いまわそうと思っているんですが、
変数の"excel"や"sheet"辺りの変数について困っています。
というのも定義はクラスに任せ、実際の操作はメインソースでやろうと思っているのですが、
複数のインスタンスを作る際に変数をどうするかで悩んでいます。
何かうまい方法がありましたらご教授お願いします。
0016デフォルトの名無しさん
2008/11/20(木) 22:24:17定型的な初期化処理をまとめるってことだよね?
def new_excel
excel = WIN32OLE.new('Excel.Application')
excel.visible = false
excel.displayAlerts = false
return excel
end
ex1 = new_excel
ex2 = new_excel
0017デフォルトの名無しさん
2008/11/20(木) 23:30:32クラスじゃなくてモジュールだけど
module ExcelApplication
def self.new
app = WIN32OLE.new('Excel.Application')
app.visible = false
app.displayAlerts = false
app.extend(self)
return app
end
def hello ; p :hello ; end
end
excel = ExcelApplication.new
excel.hello
workbook = excel.workbooks.open(file)
sheet = workbook.sheets(1)
W32のapiは知らないんで前スレのを参考にした
001815
2008/11/21(金) 00:43:35ありがとうございます。とても参考になりました。
excel以外にもworkbookとsheetも定義する必要があり、教えていただいた方法のように個別にメソッドを定義しました。
一応WIN32OLEの定義部分のクラス化は出来たのですが、できればメインソースでインスタンスを生成するたびに
何度も(excel,workbook,sheet)を定義するのは避けたいのです。
現在↓
insname = NewExcel.new #インスタンス生成
excel1 = insname.new_excel
workbook1 = insname.new_workbook
sheet1 = insname.new_sheet
まとめて定義する方法はありません・・・よね?
試しに・・・と思って以下のような物を書いてみましたがダメでした。
def new_excel(excel,workbook,sheet)
excel = WIN32OLE.new('Excel.Application')
excel.visible = false
excel.displayAlerts = false
excel.workbooks.open(file)
workbook = excel.workbooks(1)
sheet = workbook.sheets(1)
return excel,workbook,sheet
end
>>17
ありがとうございます。モジュールですか。
メモリ節約などに役立ちそうですね。参考にさせていただきます。
0019デフォルトの名無しさん
2008/11/21(金) 04:46:10あと引数に代入しても、それはローカル変数だから意味がないよ。
def new_excel(file)
excel = WIN32OLE.new('Excel.Application')
excel.visible = false
excel.displayAlerts = false
excel.workbooks.open(file)
workbook = excel.workbooks(1)
sheet = workbook.sheets(1)
return excel, workbook, sheet
end
excel, workbook, sheet = new_excel()
002015
2008/11/21(金) 05:19:17すみません、fileは上には書かなかったんですがちゃんと渡してます^^;
なるほど、メインソースの方で定義するときにnew_excelの引数として3つ定義するんじゃなく、
左辺に並べて定義するんですね!引数と変数ってのがちゃんと分かってなかったみたいです。
ありがとうございます。
0021デフォルトの名無しさん
2008/11/21(金) 14:18:55webフレームワークを使おうとするとやっぱり、Railsとかになってしまうんでしょうか?
Railsはちょっと重そうだなーと思っていたのですが・・・
イメージとしてはベイジアンフィルタのPopFileのようなものです。
窓の杜 - POPFile
http://www.forest.impress.co.jp/lib/inet/mail/antispam/popfile.html
参考になるページはありませんでしょうか?
こういうのをやっている人っていないのかな・・・?
0022デフォルトの名無しさん
2008/11/21(金) 18:40:270023デフォルトの名無しさん
2008/11/21(金) 19:14:41>>21
その程度なら、Railsとか使わず、素のCGIでいいと思う。
サーバはWEBrickを使えば、Apacheとかいらないし。
つうか、現状ではクライアントサイドアプリなら、Rails以外を考えたほうがいいんじゃないかな。
0024デフォルトの名無しさん
2008/11/21(金) 19:16:180025デフォルトの名無しさん
2008/11/21(金) 19:41:32WEBrick使うのなら、それこそ素のCGIじゃなくてwebrick/cgiとか使えば良いと思うんだが・・・
Rackを薦めたのはミドルウェアが便利なのと、後からWEBrickやFastCGI等への対応が楽だから
逆に、なぜ今あえて素のCGI(cgi.rbだよね?)を薦めるのかが疑問
0026デフォルトの名無しさん
2008/11/21(金) 21:47:13これ超オススメ。
Ruby による Win32OLE プログラミング
http://www.morijp.com/masarl/homepage3.nifty.com/masarl/article/ruby-win32ole.html
石井さんありがとう・・・
0027デフォルトの名無しさん
2008/11/21(金) 22:05:56もとの>>21を読もうよ。
>Rubyにて、デスクトップで使うツールのインターフェスを作りたいと思っています。
...
>イメージとしてはベイジアンフィルタのPopFileのようなものです。
RackとかFastCGIとかまったく関係ないよね?
002815
2008/11/21(金) 23:24:16お勧め紹介thxです。
ネットサーフィン中に偶然訪問してましたが、読みませんでした。
気合い入れて読んでみようと思います。
ありがとうございます。
0029デフォルトの名無しさん
2008/11/22(土) 00:44:54俺もそこを紹介しようとしてた。
>28
読め。
0030デフォルトの名無しさん
2008/11/22(土) 02:24:39#!/usr/bin/ruby
#html => openuriで取れた値。値が入っていることは p html で確認済み
html = "<html><head>AA 2バイト文字とか改行とかいろいろ</head><body></body></html>"
/<head>(.+)<\/head>/ =~ html
p $1
::Console::
nil
まったくわかりません。
よろしくお願いします。
0031デフォルトの名無しさん
2008/11/22(土) 02:26:29× /<head>(.+)<\/head>/ =~ html
以下どちらのパターンも同じ結果です。
○ /<head>(.+)<\/head>/imo =~ html
○ html =~ /<head>(.+)<\/head>/imo
0032デフォルトの名無しさん
2008/11/22(土) 03:11:58irbにコピペしたらちゃんと動いたよ?
irb(main):001:0> html = "<html><head>AA 2バイト文字とか改行とかいろいろ</head><body></body></html>"
=> "<html><head>AA 2バイト文字とか改行とかいろいろ</head><body></body></html>"
irb(main):002:0> /<head>(.+)<\/head>/ =~ html
=> 6
irb(main):003:0> p $1
"AA 2バイト文字とか改行とかいろいろ"
=> nil
0033デフォルトの名無しさん
2008/11/22(土) 06:15:54そうか、FastCGIの必要性はあんまり無かったな
じゃあメリットはミドルウェアだけか
0034デフォルトの名無しさん
2008/11/22(土) 09:08:58ん?>>31で動くパタンを自分で書いているけど、以下じゃ動かない理由を知りたいってこと?
/<head>(.+)<\/head>/ =~ html
答えは正規表現リテラルの m オプション。//imo の m ね。
m をつけるとピリオドが改行にマッチするようになる。
つけないと「AA 2バイト文字とか改行とかいろいろ」の「改行とか」にマッチしない。
http://www.ruby-lang.org/ja/man/html/_A5EAA5C6A5E9A5EB.html#a.c0.b5.b5.ac.c9.bd.b8.bd.a5.ea.a5.c6.a5.e9.a5.eb
Regexp.MULTILINE も参照。
003530
2008/11/22(土) 12:51:43>>32
すいません、何故かnilなんです
>>34
>>30に書いたとき、実際に付けているimoオプションを書き込み付け加えるのを忘れていて、訂正として>>31に追加しました。
>>31のプログラムでもマッチしない状態です。
こんな感じで動かしても、htmlには取得したHTMLがちゃんと表示されていますが、$1はnilになります。
#!/usr/bin/ruby
response = (〜net/httpで取得したやつ〜)
html = response.body #net/httpのbody部分を取得
p html #取得したURL先のHTMLファイルが正常に表示される
html =~ /<head>(.+)<\/head>/imo
header = $1
p header #-> nil
なんです。改行とか文字コードの違いとかって落ちかなと思っているのですが
不特定多数な文字コードからUTF8に統一する、ってことできますか?
0036デフォルトの名無しさん
2008/11/22(土) 13:15:28require 'net/http'
html = ""
Net::HTTP.start("www.yahoo.co.jp", 80){|http|
html = http.get("/").body
}
html =~ /<head>(.+)<\/head>/imo
header = $1
やっぱ動くって。
ruby -vと、変な省略をしない最小のコードを提示して。
ちなみにこっちは
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
003730
2008/11/22(土) 14:07:35#ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
website ={
"protocol" => "http",
"hostname" => "e-words.jp",
"parameter" => "",
"pathname" => "/w/EZweb.html"
}
require 'net/http'
Net::HTTP.version_1_2
port = 80
resp = ""
Net::HTTP.start(website["hostname"], port) {|http|
resp = http.head(website["pathname"] + website["parameter"])
if resp['content-type'] =~ /text/i
resp = http.get(website["pathname"] + website["parameter"])
end
}
p resp.body
resp.body =~ /<head>(.+)<\/head>/imo
head = "<html><head>#{$1}</head></html>"
p head #-> "<html><head></head></html>"
0038デフォルトの名無しさん
2008/11/22(土) 14:08:16hostname => "www.yahoo.co.jp",
pathname => "/"
では正常に動きます。
0039デフォルトの名無しさん
2008/11/22(土) 14:10:57どうも正規表現にとらわれすぎて視野が一直線になってしまっていたようです。
すいません。
0040デフォルトの名無しさん
2008/11/25(火) 01:03:09じゃあ、sortメソッドは何の為に存在するのでしょうか?
0041デフォルトの名無しさん
2008/11/25(火) 01:21:310042デフォルトの名無しさん
2008/11/25(火) 02:20:09とか。
0043デフォルトの名無しさん
2008/11/25(火) 02:28:07x.foo==y.foo ? x.bar<=>y.bar : x.foo<=>y.foo
とかも書くね
0044デフォルトの名無しさん
2008/11/25(火) 03:19:53map{|e| [e,yield(e)]}.sort{|a,b|a.last<=>b.last}.map(&:first)
end
0045デフォルトの名無しさん
2008/11/25(火) 12:07:52Rubyって1000分の1秒単位でsleepするにはどのように書くのでしょうか?
0046デフォルトの名無しさん
2008/11/25(火) 12:29:51じゃあPOSIXな環境ではselectのようなタイムアウトを
ミリ秒などで指定できるシステムコールを使うのが
常套手段かな。
Windowsだとどうするのか知らないけど。
0047デフォルトの名無しさん
2008/11/25(火) 12:42:17とかじゃダメ?
0048デフォルトの名無しさん
2008/11/25(火) 17:27:58配列をCSVに書き込む際、配列の要素数がわかっていて例えば3個の場合は
csv << [ array[0], array[1], array[2] ]
とすれば大丈夫だったのですが、
要素数がその時々で変わる場合はどうすればいいんでしょうか?
0049デフォルトの名無しさん
2008/11/25(火) 17:54:49難しく考えちゃってるんだろうけど、Arrayクラスで渡せばいいんだから
csv << array
0050デフォルトの名無しさん
2008/11/25(火) 18:19:17そのまま渡せばいいだけだったんですね
場所指定が必要なものだと思い込んでいました。
ご返答ありがとうございました。
0051デフォルトの名無しさん
2008/11/25(火) 22:53:39100分の1の指定はできるですね。
1000分の1の指定は出来ないですね。
>>46
無料のレン鯖で動かす時に使うつもりです。
0052デフォルトの名無しさん
2008/11/25(火) 23:22:19いや、普通に指定できるでしょ?
ただ、期待した長さで帰ってこないだけじゃないの?
1000分の1秒単位で正確にsleepさせたいときはOS選びから始めるしかないよ。
0053デフォルトの名無しさん
2008/11/26(水) 00:04:030054デフォルトの名無しさん
2008/11/26(水) 00:07:160055デフォルトの名無しさん
2008/11/26(水) 06:53:361000分の1秒単位でCPUのタイムスライスもらえるわけないでしょ。
ざらに1秒返ってこない。
0056デフォルトの名無しさん
2008/11/26(水) 10:12:580057デフォルトの名無しさん
2008/11/26(水) 16:16:51NotImplementedErrorで突っ返される。代替案はないの?
0058デフォルトの名無しさん
2008/11/26(水) 18:20:050059デフォルトの名無しさん
2008/11/26(水) 19:29:07Win32APIの使い方がまったく分からんorz
MSDNを読むとOpenProcessのプロトタイプ宣言がこれだから
HANDLE OpenProcess(
DWORD dwDesiredAccess, // アクセスフラグ
BOOL bInheritHandle, // ハンドルの継承オプション
DWORD dwProcessId // プロセス識別子
);
どう指定しろと
0060デフォルトの名無しさん
2008/11/26(水) 19:45:54あとは根性で
0061デフォルトの名無しさん
2008/11/26(水) 20:04:12定数の値が分からん\(^o^)/
0062デフォルトの名無しさん
2008/11/26(水) 20:23:46Platform SDKを手に入れてヘッダの中を探すんだ
0063デフォルトの名無しさん
2008/11/26(水) 21:36:30ぐぐれ
0064デフォルトの名無しさん
2008/11/27(木) 10:43:40http://gist.github.com/29658
0065デフォルトの名無しさん
2008/11/27(木) 13:13:54CSVのエンコーディングを明示的に指定したいときは、
一回KConvかまして$KCODEで指定したエンコードに変換後に
CSVクラスへ渡すしかないかな?
0066デフォルトの名無しさん
2008/11/27(木) 18:42:36http://www.moongift.jp/2008/11/ruby_on_rails_portable/
からダウンロードした RailsPortable っていうフォルダを
PCのハードディスクに展開すると170MB程度の大きさなのですが
そのフォルダをUSBメモリにコピーすると900MBを超える大きさになります
なぜでしょう?
ちなみにこのアプリでRubyの勉強をすることは可能ですよね?
自宅外(自分専用のPC持ってません)のPCを使って学習出来ればと思いまして
0067デフォルトの名無しさん
2008/11/27(木) 18:44:13見てないけどクラスタギャップじゃないの?
0068デフォルトの名無しさん
2008/11/27(木) 18:56:22本体は1KBしかなくてもディスク上は4KB占有するとかそんなんだろ
あとRubyの勉強をしたいならRailsには触れたら駄目
RailsはRubyの機能を使っただけの全くの別物
0069デフォルトの名無しさん
2008/11/27(木) 19:02:37強力だがRuby的には怖いフレームワーク
入門に勧められるかは微妙な所
0070デフォルトの名無しさん
2008/11/27(木) 20:31:46それがRubyなのかRailsなのか分けることができない
Rubyを知っている人間がRailsをやるからパワフルに使えるんだ
素直にRubyだけを使っておけ
Ruby + rubygems でたいていの用事は済む
0071デフォルトの名無しさん
2008/11/27(木) 20:35:550072デフォルトの名無しさん
2008/11/27(木) 20:37:16ありがとうございます
0073デフォルトの名無しさん
2008/11/27(木) 20:45:320074デフォルトの名無しさん
2008/11/27(木) 20:47:45今どの辺まで作業が進んでるのか分からないから
余計に待ちが長く感じてしまう
0075デフォルトの名無しさん
2008/11/27(木) 20:51:140076デフォルトの名無しさん
2008/11/27(木) 20:51:19無理してでも最新版入れれ
一晩経っても終わらなかったインストールが1分で終わるぞ
0077デフォルトの名無しさん
2008/11/27(木) 20:54:160078デフォルトの名無しさん
2008/11/27(木) 21:04:340079デフォルトの名無しさん
2008/11/27(木) 21:08:21ほんとだ。
Ubuntu Hardyのaptで入れられるrubygemsパッケージのは
0.9.4とかで糞重かった。
1.3.1だと軽かった。
けど、>>74の言う通りなーんも進行状況がでなかった。
合ってるかどうかはほっといて
http://0xcc.net/ruby-progressbar/
これとかでプログレスバーでも出してくれればいいかもかも。
0080デフォルトの名無しさん
2008/11/27(木) 21:10:36展開のために必要なメモリのないパソコンでは動作しない極悪仕様
しかもrubygem開発者たちのモンスターマシンではさくさく動いてるから誰も問題に気づけなかった
>>77
原理上は動いてはいたはず
メモリとスワップ全部使い切ってるから動いてるように見えないだけで
>>78
だから rubygems のバージョン 1.1 だか 1.2 だかで解消されたって
あの最初の YAML 展開時間を待てないパソコンはスペック的に重症だぞ
0081デフォルトの名無しさん
2008/11/27(木) 21:28:14メモリ200M台の古いノートでgemが実質上使い物にならなくて
パッケージインストールめんどくさいなと思ってたんだけど
oneclick installer 186-26も0.9.4で古いものだったんだなぁ。
0082デフォルトの名無しさん
2008/11/27(木) 21:35:10俺のPCだと、今のrubygemsでもパッケージインストールまで20秒〜30秒くらい
デカい奴だと1分ぐらいかかることもある(RDocやriのインストール時間は除く)
その間、ほとんど進行表示がないのは辛い
008366
2008/11/28(金) 06:51:49遅くなりましたが
レスありがとうございます
自分はプログラムの初心者なのでRails(フレームワーク?)のことは
よく解らないのですが、RailsPortableって言うのはPCにインストールせずに
Rubyが動くみたい?な事と、実際に起動してRubyのコマンドを入力すると
Rubyが返ってきてる気がするので、素直にRubyの構文の勉強に使う事も
可能なのかなと思いまして それにUSBメモリ安いですし
それにしても『黒魔術の塊』ってのはカッコ良いですね
0084デフォルトの名無しさん
2008/11/28(金) 11:03:56カッコイイ響きかも知れんが、その意味するところは
「あまり良くない方法を沢山使っちゃってる」
って話だと思う
0085デフォルトの名無しさん
2008/11/28(金) 11:41:04Rubyライブラリとしては最低の作りだろ。
0086デフォルトの名無しさん
2008/11/28(金) 15:28:58たとえば Array#collect は Array ではなく Enumerable で定義されているということを、
Ruby の機能を使って検出したいです。
ここで、もし Array#collect が Array クラスで再定義されていたら、もちろん「Arrayで定義されている」ということを検出します。
0087デフォルトの名無しさん
2008/11/28(金) 16:07:300088デフォルトの名無しさん
2008/11/28(金) 16:31:11自分ならancestorsを一つ一つinstance_methods(false)で検査すると思う
もうオブジェクトがあるならObject#methodのinspect見るのも楽
0089デフォルトの名無しさん
2008/11/28(金) 16:33:25ほかの方法を検討するほうがうまくいくかもしんない
0090デフォルトの名無しさん
2008/11/28(金) 17:41:18ほんとにただ名前を知ってるだけっていうなら、それこそ同名のメソッドなんてあちこちにあるわけで。
MethodとかUnboundMethodオブジェクトしてもう既に手元にあるなら、
RUBY_VERSION >= '1.8.7' なら #owner っていうメソッドがある。
0091デフォルトの名無しさん
2008/11/28(金) 18:29:50と入力すると、「ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。」
というエラーが出力されるのですが、原因は何でしょうか?jrubyは普通に使えて
コンパイルもできます。
0092デフォルトの名無しさん
2008/11/28(金) 19:43:07instance_methods() にfalseを渡すと、親クラスをたどらないようになるんですね。
知らなかったです。
これで希望のことができそうです。
ありがとうございました。
009383
2008/11/29(土) 07:41:48自分がやろうとしているのは、核ミサイルさえ搭載可能な
ジェット戦闘機を使って 自動車(AT)の運転を学ぼうとしている
ようなものなのかな?と思いました
けどRailsPortable以外に
RubyをPCにインストールせずに動かすアプリとか
環境とか無いですよね?
0094デフォルトの名無しさん
2008/11/29(土) 08:19:34Railsガン無視でRuby部分だけ使うことは可能だから、意識してRubyだけ使うぶんには問題なかろう
0095デフォルトの名無しさん
2008/11/29(土) 08:59:07ドライブ文字が決め打ちできるなら
USBメモリにruby本体を入れて、NYAOSなんかのコマンドラインシェルから
PATH環境変数を上書きするように設定すれば
RubyPortable的なこと(=インストールなしで動かすこと)ができる
俺はこの方法で実際にRubyPortableを作ろうとしたけど、ドライブ文字の検出方法が思いつかずに断念した
0096デフォルトの名無しさん
2008/11/29(土) 09:01:33ttp://tryruby.hobix.com/
0097デフォルトの名無しさん
2008/11/29(土) 09:43:33ディレクトリ構成は既知なんだからNYAOSを使わなくても、バッチで Ruby 自体を立ち上げて
system 'cd \\'
drive_name = `cd`
とかすればいいんでないの?
0098デフォルトの名無しさん
2008/11/29(土) 09:56:37%~d0 でバッチファイルがあるドライブ文字が取れるよ。
ちなみに %~p0 でバッチファイルがあるディレクトリ
%~dp0 でドライブ文字+ディレクトリ
0099デフォルトの名無しさん
2008/11/29(土) 16:29:14path.gsub!(/\//, "\\")
とやると、/が\\になってしまうのですが。
\になるようにするにはどうすれば良いんでしょうか?
0100デフォルトの名無しさん
2008/11/29(土) 16:31:09ありがとう、おかげで念願のRubyPortableが完成した
(ファイルサイズを軽くするために、98のバッチファイル方式を採用させてもらいました)
0101デフォルトの名無しさん
2008/11/29(土) 16:32:10> puts "path/file".gsub("/", "\\")
path\file
0102デフォルトの名無しさん
2008/11/29(土) 16:34:49obj = 'j:/test/obj'
obj.gsub!("/", "\\")
p obj
"j:\\test\\obj"
となってしまいます。\\でも良いのかなぁ?コンソールの仕様?
0103デフォルトの名無しさん
2008/11/29(土) 16:36:59ダブルクォーテーションもついてるぞ
0104デフォルトの名無しさん
2008/11/29(土) 16:37:100105デフォルトの名無しさん
2008/11/29(土) 16:37:19"j:\test\obj"
なんてソースに書いたら問題あるのはわかるよね?
pの出力っていうのはそういう仕様、だから>>101ではputs使ってる。
0106デフォルトの名無しさん
2008/11/29(土) 16:38:530107デフォルトの名無しさん
2008/11/29(土) 19:18:03具体的には
def hoge
p 自分のメソッド
end
hoge #=> "hoge"
というのが欲しいんですが
0108デフォルトの名無しさん
2008/11/29(土) 19:25:100109デフォルトの名無しさん
2008/11/29(土) 19:30:46class Object
def current_method
begin
raise StandardError
rescue StandardError => e
e.backtrace[1].scan(/`(.*)'/).to_s
end
end
end
ぐぐってみたらこんなので可能ではあるけど
標準ではできないかなぁ
0110デフォルトの名無しさん
2008/11/29(土) 20:26:14Yコンビネータでぐぐるとよろし。
0111デフォルトの名無しさん
2008/11/29(土) 21:45:32__method__というのが。
0112デフォルトの名無しさん
2008/11/30(日) 00:39:570113デフォルトの名無しさん
2008/11/30(日) 07:17:47ブログから本文のみを抜き取りたいのですが・・・・。
gemで入れたんですけど、作者のブログにあるサンプルが実行できません。
ttp://labs.cybozu.co.jp/blog/nakatani/2008/03/_rubyforge.html
エラーは
extract.rb:7: uninitialized constant ExtractContent::Extractor (NameError)
なんですけども。
0114デフォルトの名無しさん
2008/11/30(日) 11:42:01rubyのHashはどのぐらいの容量を保持できるのでしょうか?
メモリが許す限りの容量を代入していけるのでしょうか?
環境:MacOSX10.4
ruby 1.8.7
よろしくお願いいたします。
0115デフォルトの名無しさん
2008/11/30(日) 15:46:52サンプルコード動いたけど。
$ ruby -v
ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux]
$ gem -v
1.2.0
$ gem list | grep extractcontent
extractcontent (0.0.1)
>>114
メモリが許す限りだけど、どのくらいメモリがあるかは感知しないので、
物理メモリを超えて使おうとすればスラッシングして涙目に。
0116デフォルトの名無しさん
2008/11/30(日) 19:34:07$ ruby --version
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]
$ gem --version
1.3.1
でも動作した。
エラーからして、ExtractContentは定義されてるけどExtractorまでは定義されてないってことになるが
妙だな。1ファイルに収まるライブラリなのに。
0117デフォルトの名無しさん
2008/11/30(日) 19:57:180118113
2008/11/30(日) 19:58:20自分も動きました。
一度間違ってrootでないアカウントでgemインストールしてしまい、
それを消して、再度rootで入れました。そのときに~/.gemができてそれ以下を読みに行こうとしてたっぽいです。
どこの設定に.gem以下を読みに行くかわからないのでユーザ作り直して、そこで実行するときちんと動作しました。
0119デフォルトの名無しさん
2008/12/01(月) 10:57:38結果がちょっとおかしいです。
class Numeric
def round_n(nth)
num = self*(10**(-nth))
return num.round()*(10**nth)
end
end
num = 438.1728
p num.round_n(-3) #=> 438.173
結果は↓
Rational(438173, 1000)
何がいけないんでしょうか?よろしくお願いします。
0120デフォルトの名無しさん
2008/12/01(月) 11:14:40何がどうおかしいと思うの?
0121119
2008/12/01(月) 11:26:11本来"438.173"と表示されるはずが"Rational(438173, 1000)"と表示される辺りです。
Rational(438173, 1000)と表示されるのが正しいのでしょうか?
0122デフォルトの名無しさん
2008/12/01(月) 12:08:37それは、実行前のどこか
(irbで前に実行したスクリプトか、あるいはrequireで読み込んだ野良ライブラリのどこか)で
require 'rational'
をしている
何もしてない状態ではFloatが返る
0123デフォルトの名無しさん
2008/12/01(月) 12:26:28raise XxxError.new("message") と
raise XxxError の
違いがわかりません。どう使い分けるべきでしょうか。
0124デフォルトの名無しさん
2008/12/01(月) 12:28:03なるほどそう読むのか。
Rational で返ってくるということはどこかで Rarional を require してるんだよな?
そうすると、こんな具合↓に演算子が再定義されるとのこと。
http://doc.loveruby.net/refm/api/view/library/rational
0125デフォルトの名無しさん
2008/12/01(月) 13:39:45見たままそのまんまです
例外というシステムはユーザーに情報を伝えることだけが主目的じゃないわけで
ユーザーに情報を伝えるだけなら旧来の
「スクリプト○○行目の○○メソッドで引数○○がエラー起こしましたので終了します(・ε・)プップクプー」
と表示して即終了するだけでいいんだしさ
1行目は捕捉しても意味がないエラー(エラーが出たこと自体がまずいとき)
2行目は捕捉して回復処理を行えうる例外
3行目は捕捉可能でユーザーにも情報を与えたいとき
組み込みの例外のうちどんなものをどんなときに使うか、というのは特に定まってないので好きに悩め
引数が間違ってるからといって必ず組み込みの ArgumentError を使わなければならない
(オリジナル例外もこれを継承しなければならない)というわけではない
0126デフォルトの名無しさん
2008/12/01(月) 13:49:58作ってる最中は全部 raise "message" になってる
中間的な一時的変数の名前考えるのめんどくさいという話に少し似ている
0127119
2008/12/01(月) 14:58:03rubyを始めた頃にirbでやったみたいです。(単品で動かしてもRationalになるため)
戻し方が分からないので.to_fで対応しておきました。
ありがとうございました。
0128デフォルトの名無しさん
2008/12/01(月) 15:33:05例外を使いこなすのははセンスが要るねえ
0129デフォルトの名無しさん
2008/12/01(月) 15:38:30C#の中の人だとこういうのがあるんだけど
ttp://www.artima.com/intv/handcuffs2.html
0130デフォルトの名無しさん
2008/12/01(月) 16:23:28例外機構については適当に導入したんだと思う
0131デフォルトの名無しさん
2008/12/01(月) 16:54:010132デフォルトの名無しさん
2008/12/01(月) 19:08:35raise "message"
-> raise RuntimeError, "message"
raise XxxError.new
-> raise XxxError
raise XxxError
-> raise XxxError
2番目は例外オブジェクトを渡す形式。
なんかどっかに取っておいてある例外を raise @ex みたいに挙げるとか。
例外を挙げる前にアクセサを呼んで情報をセットするときとか。
一番使われてるのは3番目じゃね?
raise XxxError, "message"
-> raise XxxError.new("message")
と同じ。
1番目の形式は3番目の形式の省略形と言えるけど、これに合わせて
rescueでも例外クラスを省略するとRuntimeError以下を捕捉する。
捕捉するな、ヤバいことになったぞ、ってときはExceptionとかRuntimeErrorよりスーパークラスな
もの挙げたほうがいいと思う。
0133デフォルトの名無しさん
2008/12/01(月) 21:50:27>1行目は捕捉しても意味がないエラー(エラーが出たこと自体がまずいとき)
うそつけ。
raise "message" は単にエラークラスを省略しただけであり、「捕捉しても意味がない」なんてことはない。
>2行目は捕捉して回復処理を行えうる例外
>3行目は捕捉可能でユーザーにも情報を与えたいとき
逆だろ。
ユーザに情報を与えるなら raise XxxError じゃなくて raise XxxError.new("message") のほう。
初心者スレでこんなウソを垂れ流さんでくれ。初心者が間違って覚えてしまうだろうが。
それともなんかの工作員か?
0134デフォルトの名無しさん
2008/12/01(月) 21:59:28>rescueでも例外クラスを省略するとRuntimeError以下を捕捉する。
ウソつけ。
rescue =< ex
で捕捉されるのはStandardErrorだ。
>捕捉するな、ヤバいことになったぞ、ってときはExceptionとかRuntimeErrorよりスーパークラスな
>もの挙げたほうがいいと思う。
ひどい日本語だな。「ExceptionやRuntimeErrorより...」と読み間違えてしまうじゃないか。
「捕捉するな、ヤバいことになったぞ、ってときは、Exceptionのような
StandardErrorよりスーパークラスなものをあげたほうがいいと思う。」
「捕捉するな、ヤバいことになったぞ、ってときは、StandardErrorより上位の例外クラスを使ったほうがいいと思う。」
自分の日本語力のなさを「2chだからどうこう」と言い訳すんなよ?
0135デフォルトの名無しさん
2008/12/01(月) 22:15:390136デフォルトの名無しさん
2008/12/01(月) 22:55:540137132
2008/12/02(火) 01:54:41>rescue =< ex
>で捕捉されるのはStandardErrorだ。
フォローthx、ふつーに間違えた。
でもrescue => ex だと思う。肩の力抜けよ。
>ひどい日本語だな。「ExceptionやRuntimeErrorより...」と読み間違えてしまうじゃないか。
いいじゃん、Exceptionより上の例外クラスないし。
0138デフォルトの名無しさん
2008/12/02(火) 02:18:02rescue Exception => ex とか書く奴が絶対出てくると思うんだが
0139デフォルトの名無しさん
2008/12/02(火) 02:27:28Rubyスクリプトからfatal触れないし。
JavaでError(だっけ?)系統の例外を捕捉するのがいい顔されないみたいに、やったら叱るしか
ないんじゃないのかなぁ…
irbみたいなのを書けるように、そう書けること自体は多分必要だし。
0140デフォルトの名無しさん
2008/12/02(火) 06:04:02その人にとってRubyは神聖なものでRubyしか取り柄がないのですよ
だから普通の指摘ができない
0141デフォルトの名無しさん
2008/12/02(火) 11:16:080142デフォルトの名無しさん
2008/12/02(火) 11:22:58間違ったことをしたり顔で書いてる人にいわれてもなあ・・・
0143デフォルトの名無しさん
2008/12/02(火) 11:24:47>けどライブラリのバグとかを教えるのにException挙げるぐらいしか手がないんだもんよん。
どういう意味?
0144デフォルトの名無しさん
2008/12/02(火) 11:39:19MLでも時々見る
記名でできるのはある意味凄いが真似したいとも思わん
0145デフォルトの名無しさん
2008/12/02(火) 15:54:47Cではassertマクロを使うような場所というか…
case value
when :hoge
...
when :piyo
...
when :foo
...
else
#絶対に来ないはずの分岐
raise Exception, 'must not happen'
end
みたいな。るびまで読んで使い出した。
0146デフォルトの名無しさん
2008/12/02(火) 16:35:17get_elementsで要素ごとに引っ張り出すようにしたら
その数が20個くらいに膨れ上がりました。
その処理が終わるまでものすごく遅くなる(終了まで10秒程度)ですが、
何か高速に行なう方法とかないですか?
通常要素ね具体的には特定のタグ名ごとに特定の変数に入れる処理を一番高速にやるにはどのようにするのが一番いいでしょうか。
0147デフォルトの名無しさん
2008/12/02(火) 16:45:40REXML は「全部 Ruby で書かれてる! Ruby 最高!」という人が使うライブラリ
遅いなと思ったら(そしてプログラムのインストールが可能な環境なら)即っと乗り換えてよし
0148デフォルトの名無しさん
2008/12/02(火) 17:12:48in seconds libxml rexml
opening 0.003954 0.104750
attribute_add 0.001895 0.011114
subelems 0.000585 0.004729
xpath 0.013269 2.981499
0149デフォルトの名無しさん
2008/12/02(火) 20:11:30無料のレンサバってインストールできるでしょうか?
0150デフォルトの名無しさん
2008/12/02(火) 20:22:07>>149
そのレンタルサーバサービスでrubygemsのユーザーインストール実績があればたぶん可能
まあ、つまり、無料レンタルサーバではきっと無理だろうな
俺はRubyスクリプトを外部使用するためだけにさくらインターネットの年5千円プラン使ってる
0151デフォルトの名無しさん
2008/12/02(火) 20:29:02Ruby以外の外部プログラムにぶん投げて結果を置換してevalしたほうが速いとかマジキチ
0152デフォルトの名無しさん
2008/12/02(火) 20:42:06SAXライクなAPIがあったと思うので挑戦してみては
REXML SAX でぐぐったらそれなりに引っかかるようだ
0153デフォルトの名無しさん
2008/12/02(火) 22:21:20eval(<<EOS)
def hello(person)
eval "Hello, #{person}!"
end
EOS
これはエラーになるよね
> NameError: undefined local variable or method `person' for main:Object
0154デフォルトの名無しさん
2008/12/02(火) 22:41:36eval(<<EOS)
def hello(person)
"Hello, \#{person}!"
end
EOS
0155デフォルトの名無しさん
2008/12/02(火) 22:45:27そもそも2重evalで何がやりたいのかを詳しく
そのサンプルコードでは、意図がよく分からない
0156デフォルトの名無しさん
2008/12/02(火) 23:03:12def hello(person)
return eval("Hello, #{person}")
end
という。eval文の入ったメソッド定義そのものをeval文で書きたいのだろ
0157デフォルトの名無しさん
2008/12/02(火) 23:05:29つまり文字列全体をダブルクオートでくくったのと同じ状態になるので、展開が起きる
外側のevalに渡された文字列を評価する時点で#{person}が展開されちゃって、変なことになってる
展開を抑制するのが楽な回避法。'EOS'とすべし
helloメソッドは文字列を返したいのかもしれないけど、
それだと内側のevalにも括弧が足りない
eval <<'EOS'
def hello(person)
eval %q[ "Hello, #{person}!" ]
end
EOS
print hello("Ruby") # => Hello, Ruby!
0158デフォルトの名無しさん
2008/12/02(火) 23:08:58変数展開がないならメソッド定義をevalで書く必要なくね?
0159デフォルトの名無しさん
2008/12/02(火) 23:41:34それっぽいのがここしかないけど
http://webos-goodies.jp/archives/51357031.html
他にないですか?
やりたいのはsshで他サーバーに接続して、suでパスワードを入力し、
grep + パラメータを実行しその結果をブラウザに出力したいです
初めてrubyを使って無謀なことをしてる気もしますが、標準出力はどうにかなりましたが、
入力がどうもうまくいかず
net/sshのリファレンスページもみましたがいったいどこを探せばメソッド載ってるのかわからない
です
0160デフォルトの名無しさん
2008/12/03(水) 20:05:45http://net-ssh.rubyforge.org/ssh/v1/chapter-5.html
http://rubyforge.org/forum/message.php?msg_id=32802
0161デフォルトの名無しさん
2008/12/03(水) 22:56:25うおおありがとう!まさに求めていた物だ!
0162デフォルトの名無しさん
2008/12/04(木) 07:14:050163デフォルトの名無しさん
2008/12/04(木) 07:21:24その質問には、熟慮の末に「ない」と答えるのが妥当な気がする
0164デフォルトの名無しさん
2008/12/04(木) 07:25:21ということは、あるにはあるけど使えないとか、そんな感じですか?
0165デフォルトの名無しさん
2008/12/04(木) 07:25:57素直にPHPかPerlの使っとけ
0166デフォルトの名無しさん
2008/12/04(木) 08:37:00一応名前だけでも教えてください。
0167デフォルトの名無しさん
2008/12/04(木) 09:48:40tDiary、Pinky:blog、lily
もしかして普通に名前挙げた俺、空気読めてない?
0168デフォルトの名無しさん
2008/12/04(木) 10:00:59Rubyをやりたいんじゃなくてブログシステムが欲しいんだろうし
0169デフォルトの名無しさん
2008/12/04(木) 10:16:04日本における Perl の隆盛は Perl でカウンタと掲示板が作られたことだからな
「なんかごっつい Rails だけじゃない Ruby」を推進するなら今しかない
0170デフォルトの名無しさん
2008/12/04(木) 10:52:08はい。
['hello', 'goodbye'].each do |greeting|
eval(EOS)
def #{greeting}(person)
eval "#{greeting.capitalize}, #{person}!"
end
EOS
end
実際はこんな感じです。展開抑制されると思わなかったので…
0171デフォルトの名無しさん
2008/12/04(木) 18:56:49トップレベルにメソッドを定義するため?
0172デフォルトの名無しさん
2008/12/04(木) 21:28:23ふつーはこう書く
['hello', 'goodbye'].each do |greeting|
eval(<<-EOS)
def #{greeting}(person)
'#{greeting.capitalize} %s!'%person
end
EOS
end
0173デフォルトの名無しさん
2008/12/05(金) 12:24:58【ちゃんと動くプログラム】
if 90<=tokuten ; foo[9] += 1 ; end
if 80<=tokuten && tokuten<90 ; foo[8] += 1 ; end
if 70<=tokuten && tokuten<80 ; foo[7] += 1 ; end
if 60<=tokuten && tokuten<70 ; foo[6] += 1 ; end
if 50<=tokuten && tokuten<60 ; foo[5] += 1 ; end
if 40<=tokuten && tokuten<50 ; foo[4] += 1 ; end
if 30<=tokuten && tokuten<40 ; foo[3] += 1 ; end
if 20<=tokuten && tokuten<30 ; foo[2] += 1 ; end
if 10<=tokuten && tokuten<20 ; foo[1] += 1 ; end
if 0<=tokuten && tokuten<10 ; foo[0] += 1 ; end
【上記では長いのでイテレータで短くしたプログラム(正しく動かない)】
(1..8).each do |i|
if (90<=tokuten && tokuten<=100) ; foo[9] += 1 ; end
if (i*10)<=tokuten && tokuten<(i+1)*10 ; foo[i] += 1 ; end
if 0<=tokuten && tokuten<10 ; foo[0] += 1 ; end
end
配列はちゃんと0で初期化してあります。
短くしたプログラムはfoo[9]以外はちゃんと動いてるみたいです。
foo[9]だけが明らかにおかしい人数になるので不思議です・・・
なんとなくかっこで囲んでみたけどダメでした。もちろん上記と同じように「90<=tokuten」も試しましたがダメでした。
助言お願いします。
0174デフォルトの名無しさん
2008/12/05(金) 12:42:43それか1..8を0..9にして、10点未満も90点以上もiの一般式に組み込むかのどっちか
0175デフォルトの名無しさん
2008/12/05(金) 12:44:23頭が痛くならない解決法のひとつは、case文を使うこと
case tokuten
when 90..100 then foo[9] += 1
when 80..89 then foo[8] += 1
when 70..79 then foo[7] += 1
# 中略
when 10..19 then foo[1] += 1
when 0..9 then foo[0] += 1
end
もうひとつは、得点とカウンターの関係を冷静に見て条件を抽出すること。
「得点の 1 の位に等しい配列要素を +1 する」
「ただし、100 点の場合は 9 要素目を +1 する」
「なお、9 を 10で割ると 9 /10 = 0 である」
if tokuten == 100 then
foo[9] += 1
else
n = tokuten / 10
foo[n] +=1
end
0176デフォルトの名無しさん
2008/12/05(金) 12:55:13>うおー、初心者スレっぽいぞ
たしかにな
>「得点の 1 の位に等しい配列要素を +1 する」
10の位の間違いか?
>「ただし、100 点の場合は 9 要素目を +1 する」
これはひっかかりそうだなー
コードはもうちょっと簡潔になるな。
n = tokuten == 100 ? 9 : tokuten / 10
foo[n] += 1
または
if tokuten == 100
n = 9
else
n = tokuten / 10 # ex. 85 -> 8, 31 -> 3
end
foo[n] += 1
0177デフォルトの名無しさん
2008/12/05(金) 13:27:46こういう条件にするとそう処理する理由がそれほど明らかでない。
条件は上界により与えられるとして考える方がよくないか。
いつぞやRubyスレで話題になった Range#bound があれば
idx = (0..9).bound(tokuten / 10)
foo[idx] += 1
0178デフォルトの名無しさん
2008/12/05(金) 13:38:100179デフォルトの名無しさん
2008/12/05(金) 13:40:50100 点に関しては集計なり統計なりするときの処理に扱いを委ねるべきで、
データの時点で組み込んでしまうべきではない
0180デフォルトの名無しさん
2008/12/05(金) 13:55:20>>174 も書いてるがその「正しくないコード」の意味するところは、
i を 1 から 8 に変更しつつ do 〜 end の中のコードを実行するという事だ。
foo[9] 以外は動いているって言ってるけど foo[0] にも同じ問題がある。
「do 〜 end 中の文は tokuten の値が何であろうと 8回実行されてる」
という事を頭に入れてもう一度コードをよくみて考えてみて。
多分上手く動いていると思っている部分も、あまりよくないと気付くだろう。
0181デフォルトの名無しさん
2008/12/05(金) 13:58:12時々混乱したことはあった
0182173
2008/12/05(金) 14:17:41その通りですね。脳内で考えたときは一度条件に当てはまったら勝手にeach文から抜けてました・・・
>>175
case文だと元のfor文と対して長さが変わらないですねw
もう一つの案、とても参考になりました。ありがとうございます。
>>176
条件演算子、思いもつかなかった方法です。
短くて使いやすそうです。ありがとうございます。
>>177
む・・難しい・・・
コピペしても動かなかったので何か読み込ませるものなんですね。
レスくれたみなさま、ありがとうございました。
得点を割ってそのままインデックスとして使う方法は私にとっては斬新で勉強になりました。
重ね重ね、ありがとうございました。
0183デフォルトの名無しさん
2008/12/05(金) 18:26:56なあ、初心者にちょっと聞いてみたいんだけど、条件演算子って難しい?
n = tokuten == 100 ? 9 : tokuten / 10
とか理解できる?
世の中には条件演算子を禁止するようなプロジェクトがあって、頭おかしいと思ってるんだけど、
初心者にとっては条件演算子がほんとうに難しいのかどうか気になる。
0184デフォルトの名無しさん
2008/12/05(金) 18:30:16乱用されてソースコードが酷いことになるのを防ぐためじゃない?
0185rubyの初心者
2008/12/05(金) 18:34:240186デフォルトの名無しさん
2008/12/05(金) 18:44:57おまえ、rubyの初心者じゃなくてPython上級者だろ。
0187デフォルトの名無しさん
2008/12/05(金) 18:50:36難しいという理由からなら、こんなに一般的に禁止が広まるわけがない
0188デフォルトの名無しさん
2008/12/05(金) 18:55:02sym = n.zero? ? :hoge : :fuga
とかやられるとわけがわからない。
sym = if n.zero? then :hoge else :fuga end
ほらわかりやすい。
0189デフォルトの名無しさん
2008/12/05(金) 18:56:290190デフォルトの名無しさん
2008/12/05(金) 18:57:55変なとこで改行してカッコつけてネストする奴が出てくるのが嫌われてる理由の一つだと思う
そんなに複雑なら if 文で書くかリファクタリングしろ
0191デフォルトの名無しさん
2008/12/05(金) 19:02:21もっと2〜3文字のキーワードで区分けされていると読み落としがないんだが
0192デフォルトの名無しさん
2008/12/05(金) 19:05:210193デフォルトの名無しさん
2008/12/05(金) 19:18:320194デフォルトの名無しさん
2008/12/05(金) 19:28:41>sym = n.zero? ? :hoge : :fuga
>とかやられるとわけがわからない。
そうか、初心者はこの程度でもわけがわからなくなるのか。
>sym = if n.zero? then :hoge else :fuga end
>ほらわかりやすい。
どこがだよ。
0195デフォルトの名無しさん
2008/12/05(金) 19:45:21条件演算子で短くまとめた条件分岐はほぼ100パーセントの確率で
のちのち長い if 文に書き換える羽目になるというのがどうにも
嫌われる人はここで条件演算子使用を強行する
0196デフォルトの名無しさん
2008/12/05(金) 20:00:260197デフォルトの名無しさん
2008/12/05(金) 20:22:43ifの返す値を使うプログラムは読みにくい
0198デフォルトの名無しさん
2008/12/05(金) 21:21:19[1, 2, 3].send("[](1)") が 2 を返すような
0199デフォルトの名無しさん
2008/12/05(金) 21:23:200200173
2008/12/05(金) 21:26:57条件演算子が難しいなんて書いてませんよ・・・私・・・
n = tokuten == 100 ? 9 : tokuten / 10
「tokuten」が100ならば「9」を「n」に代入、elseなら「tokuten/10」を「n」に代入ですよね
0201デフォルトの名無しさん
2008/12/05(金) 21:32:06うおー引数2個ーめんどー
ありがとうございます
0202デフォルトの名無しさん
2008/12/05(金) 22:12:43アー、悪い、
>条件演算子、思いもつかなかった方法です。
って書いてあるから、初心者には理解するのが難しいのかと思った。
わかってるならすまんかった。気を悪くせんでくれ。
0203デフォルトの名無しさん
2008/12/06(土) 01:23:580204デフォルトの名無しさん
2008/12/06(土) 01:29:540205デフォルトの名無しさん
2008/12/06(土) 01:40:02メソッド呼び出しているだけの行で
[BUG] Segmentation faultってバグ落ちしたメッセージが表示されるですけど、
これってどこでバグっているのか原因わかりますか?
後、ルビーのバグ回避のプログラミングの仕方ってあるでしょうか?
ルビーの落とし穴というページ見ても今一バグが発生する原因や回避の方法が分からないもので。
0206デフォルトの名無しさん
2008/12/06(土) 01:42:36ルビーのバージョンは1.8.6で無料サーバでつかうため、パッチやバージョンアップ以外の方法でバグ回避方法をおしえてください。
0207デフォルトの名無しさん
2008/12/06(土) 01:44:160208デフォルトの名無しさん
2008/12/06(土) 01:44:39ruby本体のbugだから、まずは最新版で試してみて。
それでも再発するなら、出来る限り余分な部分を削った再現コードを作って
ここか本スレかruby-listに晒せばおk。そのときruby -vの提示を忘れずに。
あとは偉い人がよろしくやってくれるはず。
0209デフォルトの名無しさん
2008/12/06(土) 01:47:13・・・まあ再現コード見せて。
そのコードを作ること自体が「回避の方法」だったりするし。
0210デフォルトの名無しさん
2008/12/06(土) 01:58:16openでファイル作成やREXML::Documentとグローバル配列とメソッドだけでね。
今やったらなぜメソッド中の注釈「# DATAURL 」の行を指して
[BUG] Segmentation fault
ruby 1.8.6 (2008-08-11) [i386-mswin32]
って出ました。わけわからん。
0211デフォルトの名無しさん
2008/12/06(土) 02:00:280212デフォルトの名無しさん
2008/12/06(土) 02:05:23RDEでデバッグしながらですがけど...
鯖だとデバッグできないですから..
0213デフォルトの名無しさん
2008/12/06(土) 02:18:57再現コードがないと、なんともコメントできない。
0214デフォルトの名無しさん
2008/12/06(土) 02:19:250215デフォルトの名無しさん
2008/12/06(土) 02:19:340216デフォルトの名無しさん
2008/12/06(土) 02:52:30Segmentation faultだけでは、アドバイスする側にもわけわからん
0217デフォルトの名無しさん
2008/12/06(土) 02:53:36何かが分かる気はしないけどね。
0218デフォルトの名無しさん
2008/12/06(土) 08:57:37それ以上のことはなんもならん
0219デフォルトの名無しさん
2008/12/06(土) 10:53:07再現コード無いのは無理だなあ
0220デフォルトの名無しさん
2008/12/06(土) 14:02:120221デフォルトの名無しさん
2008/12/06(土) 14:11:450は成功、1かそれ以上は失敗
ということで、ただの例ですな
0222デフォルトの名無しさん
2008/12/06(土) 14:18:02exit(3)の3はmanのセクション番号でライブラリコールだってこと。
詳しくはman man
他にもwrite(2)とかがある
0223デフォルトの名無しさん
2008/12/06(土) 14:19:29多分それ違う
>220
exit(3) のリンク先を見れば判ると思うけど、この exit はC言語の関数の exit() のこと。
要はRubyが内部でやってる処理を説明している。
Linuxのマニュアルのセクション3にあるexit()の通りの処理をしてるよ、という意味。
0224デフォルトの名無しさん
2008/12/06(土) 15:51:10>>221-223
ありがとうございました。
0225デフォルトの名無しさん
2008/12/06(土) 16:25:24なんでだよ
Rubyってなんでもできる万能言語って聞いたんだが
0226デフォルトの名無しさん
2008/12/06(土) 16:30:20ではその人を責めてください
サンタクロースが実在しなかったからといってサンタ役のお父さんをバシバシ叩くのはやめてください
0227デフォルトの名無しさん
2008/12/06(土) 22:22:34ワロタw
0228デフォルトの名無しさん
2008/12/06(土) 23:51:21Rubyのプログラム上からエクセルに渡して動かす、みたいなことはできますか?
0229デフォルトの名無しさん
2008/12/07(日) 00:35:40呼び出す側の言語が何であろうと出来るんじゃない?
0230デフォルトの名無しさん
2008/12/07(日) 00:37:450231デフォルトの名無しさん
2008/12/07(日) 06:28:28puts とか getsがメソッドですよといわれたのは良いんですが
self.puts
とか、
100.to__s
とかはわかるのですが
gets.chompはなぜgetsの後ろにchompが付くんですか?
メソッドの前に付くのが普通だと思ってたので・・・
0232デフォルトの名無しさん
2008/12/07(日) 07:14:23self.gets.chomp
getsの結果に対してchompするということ
つーかgetsはレシーバ書かないほうが普通だと思うが…
0233デフォルトの名無しさん
2008/12/07(日) 07:36:31ありがとうございます
selfは書かないんですけど
rubyの練習に読んでる
http://www1.tf.chiba-u.jp/~shin/tutorial/index.rb?Chapter=05
でselfが出てきたので聞いてみました。
0234デフォルトの名無しさん
2008/12/07(日) 07:50:48メソッドチェーンという概念がある(あくまで概念で、文法のようなものではない)
あるメソッドの返り値のオブジェクトのクラスのメソッドを
返り値を返すメソッド.返り値のクラスのメソッド
で動作させるものだ
関数的メソッドgetsの返り値は文字列であるStringクラスのオブジェクト(=インスタンス)だから、
Stringクラスのメソッドであるchompをメソッドチェーンで記述できる
あくまでメソッドの返り値(またはオブジェクトそのもの)のクラスが重要
返り値のクラスは常に意識しておくといい
0235デフォルトの名無しさん
2008/12/07(日) 08:31:30>gets.chompはなぜgetsの後ろにchompが付くんですか?
s = gets
s.chomp
を一行でかいたら
gets.chomp
になった、というだけのこと。
0236デフォルトの名無しさん
2008/12/07(日) 08:38:01難しい・・・(>_<)
>>235
なるほど
0237デフォルトの名無しさん
2008/12/07(日) 08:53:23何だかんだでチェーンが切れるOOPLは多い気がする
0238デフォルトの名無しさん
2008/12/07(日) 09:01:12が、ブロックとして {} を使うことにすると、クラスとメソッド用途によっては異常に便利
self や目的のオブジェクトが意図的に返るように作られてるブロックつきメソッドが多いのが効いてるな
def …
ナントカ
カントカ
yield s if s
s
end
という定義が多い
0239205
2008/12/07(日) 17:03:10それで現在も分からないですが、エラーメッセージの一番大事な所を表示し忘れました。
これで何が原因かおおよそわかりますか?
C:/Ruby/lib/ruby/1.8/rexml/text.rb:312: [BUG] Segmentation fault
ruby 1.8.6 (2008-08-11) [i386-mswin32]
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Complete(3)
最初自分の命令の312行かと思い込んで読んでいたのですが、よくみるとREXMLの中の312行で死亡したぽいですが。
0240デフォルトの名無しさん
2008/12/07(日) 17:28:44>>213-219
だれも「詳細なエラー文を」とは言ってないんだ。
0241205
2008/12/07(日) 18:03:35C:/Ruby/lib/ruby/1.8/rexml/text.rb:312
このエラーメッセージが意味するのは私のかいたプログラムの312行でエラー発生したのではなくて、
ルビー側が用意している
C:/Ruby/lib/ruby/1.8/rexml/text.rb
の312行目でエラーが発生したと解釈して間違いないですよね?
0242デフォルトの名無しさん
2008/12/07(日) 18:38:00それも完全な間違いでは無いが、限りなく間違いに近い。
本来Ruby側はどんな間違ったコードでも
「Rubyの」エラーを出して、コードとしては異常な終了でありながら
Rubyとしては正常に終了しなければならない。
ところが今回RubyはSegmentationFault…つまりRuby自体が異常な終了をしている。
だからRuby制作側としてはRubyを修正すべきなんだが
そのためにはSegmentationFaultが起こる状態を再現しないと
根本的な修正が難しい。
だから、その同じ状態を再現するコードがあったほうが良いのだよ。
…で、ライブラリ由来だとしてもライブラリをどう使うと起こるのか判らない。
SegmentationFaultである限り、貴方に責任はほぼ無いが
修正するには再現コードがないとキツいだろうなあという話。
0243デフォルトの名無しさん
2008/12/07(日) 18:42:43どちらにしろセグフォ起こす時点で
貴方自身では勘ぐらいしか対抗手段は無いよ。
で、実際のコードも再現コードも出せないなら
作者も多分修正不能で「原因不明のバグ」としか言えない。
0244デフォルトの名無しさん
2008/12/07(日) 18:44:40「ここの行が悪いんでエラーにしますよ」と言ってるわけじゃないから、
その「C:/Ruby/lib/ruby/1.8/rexml/text.rb:312:」はたいした情報にならない。
問題を起こすプログラムから、そこを削っても問題が同じように起こる場所は
全部削っていって、問題を起こす最小のセットを作るしか、Rubyを作ってる
側としても対処のしようがない(普通は)。
(たまに、実は把握済みの問題で「このパッチだよ」というのが出てくることも
あるがそれは宝くじのようなものなので)
0245デフォルトの名無しさん
2008/12/07(日) 18:45:26情報が少なすぎて判断出来ないし、ここでやる内容とも思えない
問題のソースとエラーメッセージの全てを出して作者に聞け
0246デフォルトの名無しさん
2008/12/07(日) 18:45:35最新版が使えないなら原因がネット上に落ちてるかも知れない。
…で、ネット上探すのは再現コードを見れないと厳しい。
0247デフォルトの名無しさん
2008/12/07(日) 20:10:06とりあえずコードが公開可能なものならどこかのアップローダーに公開すれば
いいわけで…。公開不可能ならMatzにそのソースを送りつければいいや。
ちなみに現在の最新安定版は1.8.7-p72だからそれを導入してみて
もう一度やってみれば?もしそれでもSegmentation Faultが出るなら
もう一度ここに来て。
Rubyの公式サイト
http://www.ruby-lang.org/ja/
0248デフォルトの名無しさん
2008/12/07(日) 20:53:45おまえはキモイな。rubyなんかやるよりも死んだ方がいいんじゃないか?どうせ友達なんかいないんだろw
0249デフォルトの名無しさん
2008/12/07(日) 20:58:180250デフォルトの名無しさん
2008/12/07(日) 21:14:00ロジックで敗れたのでヒステリーで対抗ですね、わかります。
0251デフォルトの名無しさん
2008/12/07(日) 21:20:15そのようだなw
0252デフォルトの名無しさん
2008/12/07(日) 21:49:47そんなカキコミしてる暇あったら、再現コードを用意しようぜ。
SegmentationFaultのバグは、再現コードがないとエスパーしようがない。
0253デフォルトの名無しさん
2008/12/07(日) 22:03:560254デフォルトの名無しさん
2008/12/07(日) 23:37:37結構前にruby-devにあったような。
0255デフォルトの名無しさん
2008/12/08(月) 03:09:02open命令でXMLファイルをサイト経由で取得した場合、
result = open(a2)
resultには#<File:0x2c07f2c>という内容しか入っていないようなのですが、
帰ってきたサイトのHTMLデータといいますか、そのようなものを見るにはどうしたらいいのでしょうか。
色々とテストしてみたら、どうも帰ってくるXMLデータが相手サーバの都合か何かで変な状態で返されものを
REXML::Document.newで開くとコケるみたいです。
どんなファイルのときにこけているか分かれば対策の打てるような気もします。
0256デフォルトの名無しさん
2008/12/08(月) 03:20:24>質問には以下を書くこと。へたくそな質問は再提出を要求される。
> ・エラーメッセージ(自力で訳さずなるべくそのままで)
エスパーしてみると、エラーを突っ返されても構わずREXML::Document.newに渡しているせいで
XMLとしては当然解釈できずパースエラーとか。
0257デフォルトの名無しさん
2008/12/08(月) 03:32:51>result = open(a2)
a2 が何かしらんけど、open() が返すのはFileオブジェクトじゃないかな。
だから
result = open(a2) {|file| file.read }
とか
file = open(a2)
result = file.read()
file.close()
とかすればいいんじゃないかな。
0258デフォルトの名無しさん
2008/12/08(月) 06:22:33そんなどのマニュアルにもどんな解説にも書いてあるようなことで>>255さんが詰まるはずないだろ馬鹿か?
[BUG] って書いてあるんだからこっちに落ち度はなくてRubyが一方的に悪いに決まってるだろ
0259デフォルトの名無しさん
2008/12/08(月) 06:35:540260デフォルトの名無しさん
2008/12/08(月) 06:56:35>>258と言いたくなるのは今回は仕方があるまい
openを一度でも自分で使ったことがあるならわかることだからな
書き込みの際に省略してるだけだと思うしかないわ
0261デフォルトの名無しさん
2008/12/08(月) 08:46:03openつーか、require 'open-uri'した上でのopenだよな?
0262デフォルトの名無しさん
2008/12/08(月) 08:58:18君はキモイからもうこのスレに来なくていい
0263デフォルトの名無しさん
2008/12/08(月) 09:46:33お前キモいな
0264デフォルトの名無しさん
2008/12/08(月) 10:03:510265デフォルトの名無しさん
2008/12/08(月) 10:21:05ひとりでスレ参加仕切るのはキモいわな
0266デフォルトの名無しさん
2008/12/08(月) 10:55:44用語がちょい怪しいからHTTPについてあんま知らんのかも知れんけど、
open-uriで返ってきたオブジェクトに返してはFileとかの他にOpenURI::Metaについても
調べてみてくれ。
向こうのサーバがOKなレスポンスを返したかとかの調べ方がわからんのだったらまさにそれ。
0267デフォルトの名無しさん
2008/12/08(月) 11:35:170268デフォルトの名無しさん
2008/12/08(月) 11:40:130269デフォルトの名無しさん
2008/12/08(月) 11:50:240270デフォルトの名無しさん
2008/12/08(月) 14:33:22#!/usr/local/bin/ruby -Ks
# REXML宣言 XMLデータを処理するための
require 'rexml/document'
require 'open-uri'
require 'uri'
result = open("http://pc11.2ch.net/test/read.cgi/tech/1227123021/l50")
# xmlデータ化してこの場合変数docに入れる。変数名は何でも可。
toto = result.read
doc = REXML::Document.new(result)
エラーメッセージ
------------------------------
C:/Ruby/lib/ruby/1.8/rexml/source.rb:149:in `initialize': undefined method `[]' for nil:NilClass (NoMethodError)
from C:/Ruby/lib/ruby/1.8/rexml/source.rb:16:in `new'
from C:/Ruby/lib/ruby/1.8/rexml/source.rb:16:in `create_from'
from C:/Ruby/lib/ruby/1.8/rexml/parsers/baseparser.rb:133:in `stream='
from C:/Ruby/lib/ruby/1.8/rexml/parsers/baseparser.rb:110:in `initialize'
from C:/Ruby/lib/ruby/1.8/rexml/parsers/treeparser.rb:9:in `new'
from C:/Ruby/lib/ruby/1.8/rexml/parsers/treeparser.rb:9:in `initialize'
from C:/Ruby/lib/ruby/1.8/rexml/document.rb:205:in `new'
from C:/Ruby/lib/ruby/1.8/rexml/document.rb:205:in `build'
from C:/Ruby/lib/ruby/1.8/rexml/document.rb:42:in `initialize'
from C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/rbC.tmp:15:in `new'
from C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/rbC.tmp:15
Complete(1)
------------------------------
どうもresult.readした後REXML::Document.newするとエラーするぽいですけど。
0271デフォルトの名無しさん
2008/12/08(月) 14:55:36#!/usr/local/bin/ruby -Ks
require 'rexml/document'
require 'open-uri'
require 'uri'
result = open("http://10plate.blog44.fc2.com/?xml")
toto = result.read
doc = REXML::Document.new(result)
0272デフォルトの名無しさん
2008/12/08(月) 15:09:220273デフォルトの名無しさん
2008/12/08(月) 15:16:28てかREXMLでパースしたなら元のファイル別にいらないじゃんね
0274デフォルトの名無しさん
2008/12/08(月) 15:56:10OLE詳しい人Help!
require 'win32ole'
module Excel
end
excel = WIN32OLE.new('Excel.Application')
excel.visible = false
excel.displayAlerts = false
file = "適当なフォルダパス"
book1 = excel.Workbooks.open(file)
sheet1 = book1.sheets(1)
sheet1.Range('A8').Select
chart1 = excel.Charts.Add()
chart1.Type=ExcelConst::XlLine
chart1.ChartType=ExcelConst::XlLineMarkers
chart1.SetSourceData Source=sh7.Range("B96:C106")
#続く
0275デフォルトの名無しさん
2008/12/08(月) 15:57:08#chart specifications
chart1.PlotBy=ExcelConst::XlColumns
chart1.Location Where=ExcelConst::XlLocationAsNewsheet
chart1.HasTitle ="True"
chart1.ChartTitle.Characters.Text = "hoge"
chart1.Axes(ExcelConst::XlCategory, ExcelConst::XlPrimary).HasTitle = "True"
chart1.Axes(ExcelConst::XlCategory, ExcelConst::XlPrimary).AxisTitle.Characters.Text = "fuga"
chart1.Axes(ExcelConst::XlValue, ExcelConst::XlPrimary).HasTitle = "True"
chart1.Axes(ExcelConst::XlValue, ExcelConst::XlPrimary).AxisTitle.Characters.Text = "hogehoge"
book1.save
excel.quit
#コード終了 エラーメッセージが続きます
0276デフォルトの名無しさん
2008/12/08(月) 15:57:40chart1.Axes(ExcelConst::XlCategory, ExcelConst::XlPrimary).HasTitle = "True"
^
C:/ruby/mysrc/rb3C.tmp:113: Invalid char `\223' in expression
C:/ruby/mysrc/rb3C.tmp:113: Invalid char `\276' in expression
C:/ruby/mysrc/rb3C.tmp:113: Invalid char `\223' in expression
C:/ruby/mysrc/rb3C.tmp:113: syntax error, unexpected tIDENTIFIER, expecting kEND
chart1.Axes(ExcelConst::XlCategory, ExcelConst::XlPrimary).AxisTitle.Characters.Text = "fuga"
^
C:/ruby/mysrc/rb3C.tmp:114: syntax error, unexpected tCONSTANT, expecting kEND
chart1.Axes(ExcelConst::XlValue, ExcelConst::XlPrimary).HasTitle = "True"
^
C:/ruby/mysrc/rb3C.tmp:115: Invalid char `\220' in expression
C:/ruby/mysrc/rb3C.tmp:115: syntax error, unexpected tIDENTIFIER, expecting kEND
chart1.Axes(ExcelConst::XlValue, ExcelConst::XlPrimary).AxisTitle.Characters.Text = "hogehoge"
^
C:/ruby/mysrc/rb3C.tmp:115: Invalid char `\220' in expression
C:/ruby/mysrc/rb3C.tmp:115: Invalid char `\224' in expression
C:/ruby/mysrc/rb3C.tmp:115: unterminated string meets end of file
C:/ruby/mysrc/rb3C.tmp:115: syntax error, unexpected $end, expecting kEND
Complete(1)
以上です。よろしくお願いします。
0277デフォルトの名無しさん
2008/12/08(月) 16:00:03まさかRubyの知識しかないのにWin32OLE使ってるわけじゃないよね?
0278デフォルトの名無しさん
2008/12/08(月) 16:50:49いや、そのまさかです。
マクロの記録→編集でVBAのコードを作ってそれをRubyに書き換えたつもりだったんですが・・・
0279デフォルトの名無しさん
2008/12/08(月) 18:44:44> C:/ruby/mysrc/rb3C.tmp:112: syntax error, unexpected tCONSTANT, expecting kEND
これがエラーの理由、「syntax error」は文法エラー
> chart1.Axes(ExcelConst::XlCategory, ExcelConst::XlPrimary).HasTitle = "True"
これがエラーの出た行の内容
> ^
(ブラウザだとずれてるだろうけど)これが上の行のエラーの発生してる位置を示してる
rb3C.tmpの112行目より前のどこかに閉じ忘れた " がある
エラーメッセージぐらい読めるようにならないと、いつまでたっても素人のままだぜ
0280デフォルトの名無しさん
2008/12/08(月) 20:32:41どこで閉じ忘れたのかを探しにくいからね
1.9.1だとendのインデントのずれを指摘するパッチが取り込まれたので
-wオプションつければずれてるendを警告してくれて
抜けてるendの位置をちょっと絞り込める
ところで、エラーメッセージの
tCONSTANT とか kENDってなに?
YACCのトークンとかいうやつ?
構文解釈中のエラー?
そんな内部の情報を直に見せられても、初心者にはわけわからんよ
ま、わからんなりに
「endじゃなくて定数が来ちゃってる文法エラー」だなということは理解できるんだけど
0281デフォルトの名無しさん
2008/12/08(月) 20:46:15閉じ忘れた文字列から、はるか後ろのほうでエラーが出る場合があるので
やっぱり最初の頃は修正が面倒だったな
エラーが出た個所で文字列を閉じてるのが ' か " を確認して、
それより前のクォート文字を検索する
閉じ忘れたのが %記法だったら面倒だが
たまに、Windowsのディレクトリパスを書くときに 'C:\test\' とかやって閉じ忘れたりする
0282デフォルトの名無しさん
2008/12/08(月) 20:47:57でも kEND の k ってなんじゃろ
0283デフォルトの名無しさん
2008/12/08(月) 20:56:280285274
2008/12/08(月) 22:04:13レスありがとうございます。
よく見直してみたんですが、「"」の閉じ忘れはありませんでした。
グラフの部分のコードを消して試しに他の操作をさせるとちゃんと動いたので
やはりグラフのコードのどこかが悪いようです。
0286デフォルトの名無しさん
2008/12/08(月) 22:47:39>>258
>そんなどのマニュアルにもどんな解説にも書いてあるようなことで>>255さんが詰まるはずないだろ馬鹿か?
実際に詰まってるじゃん。
どのマニュアルにもどんな解説にも書いてあるようなことで詰まっているから初心者なんじゃねーの?
もう一度>>255をみてみろ。
>result = open(a2)
>resultには#<File:0x2c07f2c>という内容しか入っていないようなのですが、
そりゃ open() の戻り値を代入しているだけなんだから、result.inspect したら #<File:> が入ってるわな。
HTMLの文字列が欲しいのに、Fileオブジェクトがきたので困ってる255さん。あーら困った。
>[BUG] って書いてあるんだからこっちに落ち度はなくてRubyが一方的に悪いに決まってるだろ
え、どこ? >>255のどこに[BUG]って書いているの?
もしかして>>255は>>205と関係しているの?
なんで>>258は>>255の書き込みだけでなんでそんなことがわかるの?
もしかして205=255=258なの?
もしかしてどんな解説にも書いてあるようなことで詰まってしまったの?
0287デフォルトの名無しさん
2008/12/08(月) 22:50:020288デフォルトの名無しさん
2008/12/08(月) 22:58:26それも女の出来そこないって相場が決まってるw
0290デフォルトの名無しさん
2008/12/09(火) 01:05:07やっぱり文字列リテラルの閉じ忘れじゃないのかなぁ
\223\276 って SJISの「得」なんで
そんなのをスクリプトとして解釈しようとするなんて
文字列の閉じ忘れくらいしかない気がする
単純な文字列だけじゃなくて
'〜' とか "〜"だけじゃなくて 正規表現リテラルとか /〜/ とか
%記法の %w(〜) とか %Q(〜) %r!〜! みたいなのも有るんで
%記法だと任意の記号を使えるので注意
しかも%記法の %q!! %Q!! %r!! %x!!だと、区切り文字に空白やタブや改行も使えてしまうぞ
%q a だと'a' と同じ意味
そんなの使ったスクリプトなんて、もはや嫌がらせだが
0291デフォルトの名無しさん
2008/12/09(火) 01:40:27なんかダメもとでスクリプトの先頭に
#!ruby -Ks
と書き足してみるとか。
0292274
2008/12/09(火) 02:15:06「得」は「得点」ですね・・・
ここに載せる際にエラーコードはそのままにhogeにしたのが原因です。すみません。
ちなみにhogeにして実行しても同じでした。
>>291
なんですか!?そのおまじない!w
書き足しただけでエラーコードに変化がありました。
C:/ruby/mysrc/rb81.tmp:61:in `method_missing': save (WIN32OLERuntimeError)
OLE error code:800A03EC in Microsoft Office Excel
Workbook クラスの Save プロパティを取得できません。
HRESULT error code:0x80020009
例外が発生しました。 from C:/ruby/mysrc/rb81.tmp:61
Complete(1)
Saveがおかしい訳じゃないはずなので他に何かあるんでしょうね・・・
それと直接の関係はなさそう(上では表面化しなかっただけかも)ですが、
excel = WIN32OLE.new('Excel.Application')の下に
WIN32OLE.const_load(excel, ExcelConst)を追加しました。
これがないと「ExcelConst::」の位置でエラーになるようです。
0293274
2008/12/09(火) 02:20:35あとモジュール定義の所
module Excel
end
から
module ExcelConst
end
に変更しています。
0294291
2008/12/09(火) 02:32:05rubyに-Ksオプションを付ける(shebangっぽく>>291でもOK)と
rubyもSJISで書かれたスクリプトだと承知して字句解析する。
リファレンスを引くなら$KCODEあたりがとっかかりだろうか。
0295デフォルトの名無しさん
2008/12/09(火) 02:48:40>excel = WIN32OLE.new('Excel.Application')の下に
>WIN32OLE.const_load(excel, ExcelConst)を追加しました。
>これがないと「ExcelConst::」の位置でエラーになるようです。
それは当たり前です。ただ空のモジュールを作ったってExcelの定数を扱えるわけがありません。
なんかサンプルのスクリプトをもとに頑張ってる感じがしますが、もしそうだとしたら
もうちょっとちゃんと真似したようがよいと思います。
0296デフォルトの名無しさん
2008/12/09(火) 02:49:44./hpricot.rb:35: undefined method `Hpricot' for main:Object (NoMethodError)
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from hpri.rb:5
gem environmentでGEM PATHSの部分が
- /usr/lib/ruby/gems/1.8
- /home/XXXXX/.gem/ruby/1.8
となっていてユーザディレクトリが含まれているのが怪しいと思うのですがここの設定を変えることはできるのですか?
0297274
2008/12/09(火) 03:03:27なるほど。説明ありがとうございます。
「"#!ruby -Ks"」とググったらリファレンスのFAQがヒットしたので読んでました。
それと自己解決しました!
>>292のエラーコードの通りsaveプロパティの問題でした。
グラフを新しいシートに書き出したのが問題だったのかもしれません(勝手な予想)
saveAsで上書きしたらうまく行きました。
>>295
スミマセン。仰る通りネット上に落ちてるコードを参考にいじって書いてます。
レス、指摘くれた方々ありがとうございました。
おかげさまで無事動かせました。
0298デフォルトの名無しさん
2008/12/09(火) 03:12:30カレントディレクトリにhpricot.rbというファイルがあって
それがrequireされているのではないでしょうか。
0299デフォルトの名無しさん
2008/12/09(火) 03:30:35BINGOです!お恥ずかしい・・・・。
ファイル名で中身がわかるようにしていたらモジュール名を使っていました。
本当に初心者的なミスですいません。
0300デフォルトの名無しさん
2008/12/09(火) 03:38:05そのためのスレだよ
>>298
ナイスエスパー
きみにはエスパー初段を与える
0301デフォルトの名無しさん
2008/12/09(火) 03:43:02>>299をフォローする>>300にも和んでしまった
0302298
2008/12/09(火) 03:50:28っていうエントリを見たばっかりだったもんで。あと
./hpricot.rb:35: undefined method `Hpricot' for main:Object (NoMethodError)
^^^^^^^^^^^
ここ。
わかりやすいファイル名にしたいという趣旨は理解できる。
例えばtry_とかいうプレフィクスがいいかも。
test_だとまんまテストみたいだし、experiment_とかattempt_とか長いし。
0303デフォルトの名無しさん
2008/12/09(火) 04:01:370304デフォルトの名無しさん
2008/12/09(火) 07:00:38前スレでも同じ質問あったしな
0305デフォルトの名無しさん
2008/12/09(火) 08:38:19日本語でおk
0306デフォルトの名無しさん
2008/12/09(火) 10:25:21日本語でおkって言ってみたかっただけだろ。
0307デフォルトの名無しさん
2008/12/09(火) 11:09:260308デフォルトの名無しさん
2008/12/09(火) 13:33:21一般的
0309デフォルトの名無しさん
2008/12/09(火) 13:37:28STDIN から読み取って STDOUT に吐き出すべきなのはわかるがそれだと逆に面倒だったり
0310デフォルトの名無しさん
2008/12/09(火) 13:48:17zshなんてゴミもう捨てたい
0311デフォルトの名無しさん
2008/12/09(火) 14:04:560312デフォルトの名無しさん
2008/12/09(火) 14:11:460313デフォルトの名無しさん
2008/12/09(火) 14:38:31全部Rubyスクリプト内に入れろ
ディレクトリパスとかも直書きだ
不安ならスクリプト内1行目くらいでDir.cdしろ
0314デフォルトの名無しさん
2008/12/09(火) 16:17:01行き詰ったので再現コード晒します。
どこがまずいのか宜しく
apiの使用はアカウント制なのでurl精製工程部分は抜けていますが、アカウントをとって作成してみてください。
たいして掛からずバグエラー吐きます。コロン抜きなどもしてみましたが、だめでした。
#!/usr/local/bin/ruby -Ks
# REXML宣言 XMLデータを処理するための
require 'rexml/document'
# UR.scapeの宣言 サイトにアクセスするための
require 'open-uri'
# 文字コードを変換するための
require 'nkf'
# 文字コードをURL用にエンコード
require 'uri'
$doc
counter = 1
while counter != 0
# このキーワードでは1ページ30商品、12ページあるはずなので変数pegenoをpegeno.to_sしてurlに組み込む
result = open(楽天商品検索API (version:2008-09-01)でメタルギアをキーワードにしたurl)
$doc = REXML::Document.new(result)
pegeno = pegeno+1
sleep 1
pegeno = 1 if pegeno == 13
end
0315デフォルトの名無しさん
2008/12/09(火) 16:29:34一旦、各ページをファイルにセーブして、それを1個ずつ REXML::Document.new
して、それだと再現しないわけ?
0316デフォルトの名無しさん
2008/12/09(火) 16:37:25REXML::Document.newする前に内容を保存するようにテストプログラムもしてみたんですけど、
エラーはいた後、そのファイルの内容を改めて食わすと普通に食っちゃうですよね。
特定のページでもなくて、ファィルが保存されているので、サーバーエラーでコケているわけでもない。
初心者なので食わすプログラムにヘマてる可能性もありますけど。
0317デフォルトの名無しさん
2008/12/09(火) 16:37:52>>315も言ってるけど一度ファイルに落としてみて
それでも再現するなら、そのxmlをどっかにうpしてほしい。
ぶっちゃけて言うと、楽天商品検索APIとやらを調べるのがめんどい。
0318デフォルトの名無しさん
2008/12/09(火) 16:47:56> 特定のページでもなくて
というのは、Document.new の前に p pegeno を入れてみると、
毎回結果が違う、ということ?
0319デフォルトの名無しさん
2008/12/09(火) 17:16:21その工程をヘマっているような不安も大いにあるもので、すいませんが宜しくお願いします。
0320デフォルトの名無しさん
2008/12/09(火) 17:35:53リファレンスちゃんと読め
0321デフォルトの名無しさん
2008/12/09(火) 17:38:27doc = REXML::Document.new file
end
これだけだが
0322デフォルトの名無しさん
2008/12/09(火) 17:42:06それともeclipse?
0323デフォルトの名無しさん
2008/12/09(火) 17:43:55他人のことなんか気にするな
0324デフォルトの名無しさん
2008/12/09(火) 18:20:43まず、バグエラー吐いたファイルを
>>321 のプログラムで読み込ませて見ましたが、普通に食って
Complete(0)
って正常終了表示されました。
次にエラーを吐く前のページ(REXML::Document.newしてもエラーはかなかったページ)
もして見ましたが、やはり
Complete(0)
っと正常終了。
こうなると、xmlデータを連続してREXML::Document.newにかけた時に問題が発生している気がするのですが。
0325デフォルトの名無しさん
2008/12/09(火) 18:25:44まず、バグエラー吐いたページを保存したファイルを
0326デフォルトの名無しさん
2008/12/09(火) 18:40:57>>321 の方法で連続して1-12ページをREXML::Document.newに読ませるループを組んでみました。
すると1-12ページまで問題なく読んだのですが、2週目の11ページ目でバグエラーを吐きました。
何が原因なんでしょうか。
0327デフォルトの名無しさん
2008/12/09(火) 19:11:11・ファイルに落とすだけならエラーが出ない
・ファイルから読んでREXMLに放り込むだけならエラーが出ない
なら、二回ruby起動して別々に処理すればいいんじゃない?
0328デフォルトの名無しさん
2008/12/09(火) 22:39:42色々と試した結果、Rubyを使おうと思っています。
それで、特定のディレクトリのファイルを、
任意のディレクトリにサブディレクトリごとコピーし、
その中のファイルの内容を正規表現で置換し、
その上でファイル名も置換したいのです。
ディレクトリは数十、ファイルは数百くらいです。
こういう処理をショートカット一発でやりたいのですが可能でしょうか?
ちなみにWindowsXPです。
また、Ruby初心者でも簡単に可能かどうかお聞かせ頂ければ幸いです。
0329デフォルトの名無しさん
2008/12/09(火) 22:57:21「こういう処理」をするRubyスクリプトを書いてそのショートカットを作ればいいです。
0330デフォルトの名無しさん
2008/12/09(火) 23:58:26せっかく再現コードを載せてくれたから試そうとおもったけど、
やっぱりこれじゃわかんないや。
できれば ttp://gist.github.com/ とかにコードを載っけてくれない?
あと pegeno は page_no とかにしたほうがいいよ
pegeはカッコワルイ
0331デフォルトの名無しさん
2008/12/10(水) 00:54:41というものはありますか?
数え上げるのがどういう技術なのかわからないので検索すらできませんでした
0332デフォルトの名無しさん
2008/12/10(水) 00:57:490333デフォルトの名無しさん
2008/12/10(水) 01:07:01変数a1に内容が入っているとした場合、
a1 = a1.gsub(/a1e1ee/,"\n")
これだと
C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/rb15.tmp:412: private method `gsub' called for #<Array:0x2bb23b0> (NoMethodError)
エラーを吐くですけど。改行を別の文字に置き換えるのは問題なくできたんですが。
0334デフォルトの名無しさん
2008/12/10(水) 01:14:19`gsub' called for #<Array:0x2bb23b0>
^^^^^^^^^^^^^^^^^^^^^^^^
a1があなたの期待しているようなStringの値ではないのです。
0335デフォルトの名無しさん
2008/12/10(水) 01:17:22Stringオブジェクトにするべき操作をArrayオブジェクトに対して行ってる。
a1の由来がわからないとたしかなことは言えないけど、おそらく文字列配列だから
a1.join.gsub
で一つのStringオブジェクトにするか
a1.map{|v| v.gsub }
で中のStringオブジェクトにひとつづつアクセスしてごらん。
0336デフォルトの名無しさん
2008/12/10(水) 01:20:13レス貰いっぱなしじゃなくて礼の一つも言おうぜ>連日ageてる人
0337デフォルトの名無しさん
2008/12/10(水) 01:26:27>>335
このエラーメッセージでは分かりませんでしたw
みなさんの説明でぴんときました。
最初私はこのようにしていたのですが、
a1 = a1.gsub(/\n/,"a1e1ee")
a1 = a1.scan(/<Body>.*<\/Body>/)
a1 = a2.gsub(/a1e1ee/,"\n")
この時点でa1は配列化したのですね。>a1 = a1.scan(/<Body>.*<\/Body>/)
なのでこのように修正したらうまく行きました。
a1 = a1.gsub(/\n/,"a1e1ee")
a1 = a1.scan(/<Body>.*<\/Body>/)
a2 = a1[0]
a1 = a2.gsub(/a1e1ee/,"\n")
0338デフォルトの名無しさん
2008/12/10(水) 01:30:34すいません、みなさんありがとうございます。
0339デフォルトの名無しさん
2008/12/10(水) 01:32:50ありがとうございます
Mecabを入れてMecab-rubyも入れました。まずはMecabとHpricotを組み合わせてみようと
require 'rubygems'
require 'open-uri'
require 'kconv'
require 'hpricot'
require 'MeCab'
doc = Hpricot(open("http://ameblo.jp/staff/").read)
doc.search("div.subContents").each{|content|
content_html = content.inner_html.to_s.toutf8
content_text = content.inner_text.to_s.toutf8
puts content_html
puts content_text
puts content_html.split(//).size
puts content_text.split(//).size
chasen = content.MeCab::Tagger.new("-Ochasen")
puts chasen.parseToNode(str)
}
とやってみたのですが
mecabun.rb:17: undefined method `MeCab' for #<Hpricot::Elem:0xb6f501d4> (NoMethodError)
from test.rb:8:in `each'
from test.rb:8
となってしました。
gemでMecab周辺がそろえられなかったのでどのようなことができるのかわかりませんでした。
0340デフォルトの名無しさん
2008/12/10(水) 01:38:03>chasen = content.MeCab::Tagger.new("-Ochasen")
おちつけw
0341デフォルトの名無しさん
2008/12/10(水) 01:49:26すいません
mecab = MeCab::Tagger.new("-Ochasen")
puts mecab.parseToNode(content)
と変えてみたのですがこんどは
mecabun.rb:18:in `parseToNode': in method 'parseToNode', argument 2 of type 'char const *' (TypeError)
from mecabun.rb:18
from mecabun.rb:8:in `each'
from mecabun.rb:8
となってしまいます。
0342デフォルトの名無しさん
2008/12/10(水) 01:52:40p content
として、contentの値を確かめてみて
0343341
2008/12/10(水) 01:56:190344デフォルトの名無しさん
2008/12/10(水) 01:58:03渡すべきはcontent_textのような。
0345341
2008/12/10(水) 02:01:41"\343\202\242\343\203〜〜〜3\240\343\201\270 \342\226\240"
</a>} "\r\n " </center>} "\n" {comment <!--messageBottom-->} "\n" </div>}
という感じでした。
文字コードの設定なんでしょうか?
0347デフォルトの名無しさん
2008/12/10(水) 02:17:03p content_text の文字化けはたぶん問題ない
puts context_text.class とすれば String になっているはず
puts context_text とすれば文字列が表示されるはず
0348341
2008/12/10(水) 02:41:48ありがとうございます!文字列表示されました。
動詞や名詞の数も不格好かも知れませんが、まずは出力をカウントしていく感じでやってみます。
皆さんありがとうございます!
0349デフォルトの名無しさん
2008/12/10(水) 02:55:19hpricotより早いちゅう感じらしいが
0350デフォルトの名無しさん
2008/12/10(水) 03:14:23なんせWinだとgemでHpricot入れるのが難儀なもんで。
0351デフォルトの名無しさん
2008/12/10(水) 06:35:380352デフォルトの名無しさん
2008/12/10(水) 06:39:170353デフォルトの名無しさん
2008/12/10(水) 06:45:52難しくなかった人はたまたま最新バージョンに Win バイナリがあった人
最新バージョンに Win バイナリが無い場合、バイナリのあるバージョンを手で指定しないとインストールが終了しない
これは gem update のアップグレードが悲惨
0354350
2008/12/10(水) 07:36:46やっぱりプロジェクトが活発でなくなるとHpricotみたいにバイナリを用意してもらえず
難しくなるかなぁ…
自分は今のところgemで一発でした。
0355デフォルトの名無しさん
2008/12/10(水) 17:15:590356デフォルトの名無しさん
2008/12/10(水) 18:29:46やめさせることができますが、同じことを irb のプロンプトから
行うことはできますか。
irb を使ってて、inspect による評価を一時的にやめさせようと
しています。
irb> IRB.conf[:INSPECT_MODE] = false
とかしてみましたけど、かわりませんでした。
0357328
2008/12/10(水) 18:43:11ありがとうございます。安心しました。
あと、数百のファイルをコピーする時、
ファイル名を一つ一つ変更したいのですが、
それも可能でしょうか?
名前を一つ一つ打ち込めばできますが、
ファイルの数が数百もあるので、
正規表現で置換するような形でリネームしたいのです。
「コードが一行で済まないかな」と思っています。
0358デフォルトの名無しさん
2008/12/10(水) 19:02:26IRB.conf[:MAIN_CONTEXT].inspect_mode = false
>>357
どういうファイル名をどのように変えるのかがわからないとなんとも。
あと一行でっていうのは、やればできるんだろうけど
いわゆる玄人御用達だからオススメしない。
0359デフォルトの名無しさん
2008/12/10(水) 19:15:12やってみましたが、かわんないです。
あいかわらず inspect の結果が表示されます。
0360デフォルトの名無しさん
2008/12/10(水) 19:21:59で動くかもしれない。
0361デフォルトの名無しさん
2008/12/10(水) 19:30:59やりたいのは--noechoじゃない?
IRB.conf[:MAIN_CONTEXT].echo = false
0362デフォルトの名無しさん
2008/12/10(水) 21:21:39御返事ありがとうございます。
元ファイル名は大体このような感じです。
hoge_428_20-01.txt
hoge と数字の部分が違っているものが数百ほどあります。
それを別のディレクトリにコピーする時に、
index_428_20-01.tex
というような形に変えたいのです。
先頭と拡張子の部分を置換する格好になります。
置換を正規表現で表現すると次のようになります。
検索 [a-z]+([\d_\-])+\.txt
置換 index\1.tex
このようなリネーム処理を、
ファイル(ディレクトリ)コピー時に同時に行いたいのです。
0363デフォルトの名無しさん
2008/12/10(水) 21:24:33びんごです!
さすが特務エスパー、多謝です
0364デフォルトの名無しさん
2008/12/10(水) 21:27:48だからできるっつの
めんどくさいので、対象ファイルの指定も実際のコピーもRubyでやれ
これらを外部から読み込むように作ろうとすると敷居が微妙に高い
より正確に言うと変なものが混じったときのエラー処理がめんどい
0365デフォルトの名無しさん
2008/12/11(木) 09:33:52これを参考にしてみて。
require 'fileutils'
from = /[a-z]+(¥d_¥-])+¥.txt$/
to = 'index¥1.tex'
filenames.each do |filename|
new_filename = filename.sub from, to
FileUtils.mv filename, new_filename if filename != new_filename
end
>>364
役立たずなレス
初心者の相手ができないならくんなよ
0366デフォルトの名無しさん
2008/12/11(木) 15:31:12a = ["hage","hoge","hage"]
a.each{|elem|
return true if elem="hoge"
}
return false
end
上記のようなコードを書くと、funcの返り値が[false,true,false]になってしまうのですが、
trueひとつにしたい場合はどのようにしたらよいでしょうか
0367デフォルトの名無しさん
2008/12/11(木) 15:36:25ごめんなさい、これ勘違いだったので見なかったことに
0368デフォルトの名無しさん
2008/12/11(木) 15:37:110369デフォルトの名無しさん
2008/12/11(木) 15:50:06他の言語の人間だ
0370デフォルトの名無しさん
2008/12/11(木) 16:19:310371デフォルトの名無しさん
2008/12/11(木) 16:23:39タグ名もバラバラです。
例
<b1>殿様カエル</b1><b2>しり上がり</b2><goow>自転車</goow>
タグごと取り出す方法は分かったのですが。
0372デフォルトの名無しさん
2008/12/11(木) 16:28:04rename_rule=[..., ...]
def mkdistnme file
x.sub *rename_rule
end
def movefile from, to
...
end
filenames.map{|x| [x, mkdistnme x]}.each{|ft| movefile *ft}
0373デフォルトの名無しさん
2008/12/11(木) 16:41:37hpricotとかでパースするのをオススメしたいけど
慣れるまでが難しいかも知れない。
ネスト構造無視でいいなら
str = "<b1>殿様カエル</b1><b2>しり上がり</b2><goow>自転車</goow>"
ary = []
str.gsub(/<.+?>(.+?)<\/.+?>/){ary << $1}
gsub使うのに違和感あるから、もっといい方法があるかも?
0374デフォルトの名無しさん
2008/12/11(木) 17:02:02deleteの動作(主に返り値)に注意
str = "<b1>殿様カエル</b1><b2>しり上がり</b2><goow>自転車</goow>"
arr = str.split(/<.+?>/)
arr.delete('')
puts arr
殿様カエル
しり上がり
自転車
HTMLとしてパースするのが真っ当
0375デフォルトの名無しさん
2008/12/11(木) 17:09:31そういえばなんでArrayの一部メソッドは破壊的な操作をするのに
!がついてないんだろう。perl由来の名残のような気もするけど
ary = [].push data
[].push! data
と書きそうになることがよくある。
0376デフォルトの名無しさん
2008/12/11(木) 17:34:18b = [4,5,6]
a.each{|i| puts i}
b.each{|i| puts i}
とやると 123456 の順に表示されますが
a.calleach
b.calleach
puts "A"
a.calleach
puts "B"
b.calleach
a.calleach
puts "C"
b.calleach
のようにeachの各ループが実行されるタイミングを自分で制御してこの例では 14A2B53C6
という順で出力されるようなイテレータの書き方というか呼び方あったら教えてください。
自分でインデックス変数も合わせて用意すればいいんでしょうが
もう少し簡潔なのがあれば嬉しいです。
0377デフォルトの名無しさん
2008/12/11(木) 17:44:16それはプログラム構造そのものが間違っている
絶対にあとで破綻するから、いまのうちに書き直せ
で、その時間がないという場合は、配列をキューとみなして使う
a.shift
b.shift
puts "A"
a.shift
puts "B"
b.shift
a.shift
puts "C"
b.shift
0378デフォルトの名無しさん
2008/12/11(木) 17:47:211.8ならGenerator、1.9ならEnumeratorがそんな感じだけど
推測するにEnumerable#zipで十分なんじゃないかな
[1,2,3].zip([4,5,6], ["A","B","C"]) {|ary| puts ary }
0379デフォルトの名無しさん
2008/12/11(木) 17:47:42継続とかcall/ccとかコルーチンとかだっけ。
require 'generator'
g = Generator.new([1,2,3])
g.next
0380デフォルトの名無しさん
2008/12/11(木) 17:50:280381デフォルトの名無しさん
2008/12/11(木) 18:02:39!は「破壊的」という意味ではない。
!の意味は、それが付かない同名メソッドと比較して、注意すべき挙動の違いがある、という意味。
0382デフォルトの名無しさん
2008/12/11(木) 18:17:24二種類提供する場合のみってことか。サンクス。
ttp://shugo.net/ruby-codeconv/codeconv.html
>破壊的なメソッドと非破壊的なメソッドの両方を提供する場合、
>破壊的なメソッドには`!'を付ける。
ttp://www.ruby-lang.org/ja/man/html/FAQ_A5E1A5BDA5C3A5C9.html#a5.2e12.20.c7.cb.b2.f5.c5.aa.a5.e1.a5.bd.a5.c3.a5.c9.a4.c8.a4.cf.b2.bf.a4.c7.a4.b9.a4.ab
>同名のメソッドがあって、一方はオブジェクトのコピーを作って返し、
>もう一方は変更されたオブジェクトを返すようになっている場合、
>!のついた方が破壊的メソッドです。ただし、!がつかないメソッドの中にも
>String#concatのように破壊的なものはあります。
0383デフォルトの名無しさん
2008/12/11(木) 18:52:51ありがとうございます。
Rubyは初心者ですが、頑張って使いこなせるようになりたいです。
0384デフォルトの名無しさん
2008/12/11(木) 19:45:42正規表現まちがってる。
>from = /[a-z]+(¥d_¥-])+¥.txt$/
from = /[a-z]+([¥d_¥-]+)¥.txt$/
あるいは
from = /¥w+([-_¥d]+)¥.txt$/
とか。[a-z]+ はたぶん ¥w+ で済むんじゃないか。
>>372
十分 Ruby らしいと思うけどね。負け惜しみだと思うよ、>>368-370は。
0385デフォルトの名無しさん
2008/12/11(木) 19:59:40Rateというクラスをインスタンスにして配列にしたいのですが、
@rates = Array.new(Rate.new)
と書くと、
can't convert Rate into Integer
というエラーメッセージが帰ってきて配列に出来ません。
どのようにすれば、インスタンス化したクラスを配列に出来るのでしょうか?
0386デフォルトの名無しさん
2008/12/11(木) 20:04:42http://www.ruby-lang.org/ja/man/html/Array.html#Array.2enew
newの第一引数は整数か配列。
というわけで
@rates = [ Rate.new ]
0387デフォルトの名無しさん
2008/12/11(木) 20:06:10$は文字列末尾じゃないぞ。
0388デフォルトの名無しさん
2008/12/11(木) 20:15:42これを無視しないようなオプションとかありますか。
コード:
['A','B'].zip([1,2,3,4]) {|c, i| puts "#{c}, #{i}" }
結果:
A, 1
B, 2
希望:
A, 1
B, 2
nil, 3
nil, 4
0389デフォルトの名無しさん
2008/12/11(木) 20:20:23[1,2,3,4].zip(["A","B"]).map{|i| i.reverse}
0391デフォルトの名無しさん
2008/12/11(木) 21:18:17やっぱまだ EUC-JP? サンプルの日本語の puts のデフォルトを UTF-8 にしたいんだけど…
0392デフォルトの名無しさん
2008/12/11(木) 21:36:58本当、端末の文字コード何とかならないかな
文字化けが不便なためにrspecのit 〜を日本語で書けない
0393デフォルトの名無しさん
2008/12/11(木) 21:52:54puts html.scan(/<title>(.+?)</title>/)
では不足なんだよね
このあとに .toeuc とか .toutf8 とか書かないと化ける
化けるならまだしも、変なエスケープシーケンスがどうたらで方向キーとかが動作しなくなる
端末リセットしても直りゃしねえ
0394デフォルトの名無しさん
2008/12/11(木) 21:53:59>>373
ありがとうございます。
split(/<.+?>/) の前にgsub(/<[^\/].[^>]*>/,"")をかませたらいい感じになりました。
splitの指定が正規表現できるとは初めて知りました。
0395デフォルトの名無しさん
2008/12/11(木) 21:54:45日本語EUCでもUTF-8でも半角2バイト文字でもてきとーに表示するのが端末の仕事だろ
一緒に化けてどうする
0396デフォルトの名無しさん
2008/12/11(木) 22:41:16無茶言うなよ……。一度エンコーディング自動識別のコード書いてみろ、絶望的な気分に浸れるから。
0397デフォルトの名無しさん
2008/12/11(木) 22:47:010398デフォルトの名無しさん
2008/12/11(木) 22:50:00inspectでお茶濁していいんじゃない?
どのみちその程度の文字コード知識はないとHTMLなんて扱えないから
説明が必要になるでしょ。
0399デフォルトの名無しさん
2008/12/11(木) 22:56:38JIS, SJIS, EUC-JP, UTF16 自動認識。
0400デフォルトの名無しさん
2008/12/11(木) 23:01:48nkf 自動認識が失敗したらなにか出力バッファに対して再試行できる仕組みにしてさ
Emacs が 文字コード指定して開き直せるのと同じような感じで
こういうときは us-ascii で済んでる人間が憎いなあ
0401デフォルトの名無しさん
2008/12/11(木) 23:21:56どんなデータでもその自動認識が正しく動作するならおまえは天才だ
0402デフォルトの名無しさん
2008/12/12(金) 01:25:25ありがとうございます。
でもこの場合、引数のほうが長ければ>>389のようにする、ということですよね。
そういうのが面倒だったので、zipにオプションがないかなーと思って質問してみました。
ないようならあきらめて>>389のようにします。
0403デフォルトの名無しさん
2008/12/12(金) 02:19:09先頭の要素が不足する配列って、明示的に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
0404デフォルトの名無しさん
2008/12/12(金) 02:31:14やっぱ間違ってた、self使ってないorz
def zip2(*ary)ということでひとつ・・・。
0405デフォルトの名無しさん
2008/12/12(金) 02:36:23gsubの結果を1つの変数にまとめてgsubにかけようとしたら、
aa = bb.scan(/.+/)
*as = aa
cc = as.gsub(/m/,"")
こんな感じにしても「配列Array」だといわれてエラーで止まってしまいました。
0406デフォルトの名無しさん
2008/12/12(金) 02:37:05scanの結果を1つの変数にまとめてgsubにかけようとしたら、
0407デフォルトの名無しさん
2008/12/12(金) 03:16:270408デフォルトの名無しさん
2008/12/12(金) 07:11:21joinでいいような。
['aaa', 'bbb', 'ccc'].join #=> "aaabbbccc"
0409デフォルトの名無しさん
2008/12/12(金) 07:12:170410デフォルトの名無しさん
2008/12/12(金) 07:37:25aa = bb.scan(/.+/){|match| match.gsub(/m/,"")}
0411デフォルトの名無しさん
2008/12/12(金) 12:39:250412デフォルトの名無しさん
2008/12/12(金) 12:59:520413デフォルトの名無しさん
2008/12/12(金) 13:04:54Ruby側が修正されるかライブラリ側が修正されるかするまで全く動作しないとかいうのは
ただ利用したいだけの一般ユーザーの身ではやってられん
が、開発とか覗いてみたいなーと考えてる人なら、1.9上で動かしてみてエラーのレポートとかしてみるといいかも
1ヶ月くらいじーっとROMってれば雰囲気はわかるしさ
0414デフォルトの名無しさん
2008/12/12(金) 13:05:51いやいや、rc2なんだから使ってもらうべきだろ。
0415デフォルトの名無しさん
2008/12/12(金) 13:06:24一つの変数には一つのオブジェクトしか入れられない。
だから複数のオブジェクトを入れられるArrayオブジェクトを器にするか
結合して一つのStringオブジェクトにするしかない(>>408)。
gsubしたあとにまたバラバラの文字列である必要があるなら
結合すると分割がめんどうだから
aa = bb.scan(/.+/)
cc = aa.map{|s| s.gsub(/m/,"")}
で配列の各要素に対してgsubをする。
やってることは結果的に>>410と同じだけど、Array#map(Enumerable.map)は
覚えておいて損はない。
0416デフォルトの名無しさん
2008/12/12(金) 13:19:55お前のような奴がいるからFirefoxは
0417デフォルトの名無しさん
2008/12/12(金) 13:22:09SEGVが出た時点でエラー情報送信ウィンドウが出るくらいじゃないと開発者以外に勧めたらあかんと思う
0418デフォルトの名無しさん
2008/12/12(金) 13:35:430419デフォルトの名無しさん
2008/12/12(金) 13:59:05dumb端末で使ってるやつもいるんだぞ!
0420デフォルトの名無しさん
2008/12/12(金) 14:03:05本当? ふつう端末エミュレータかコンソールじゃないの?
今どきシリアル端末なんて管理者だって使わないだろ。
つうか vt100 だって、ダム端じゃねーぞ。
0421デフォルトの名無しさん
2008/12/12(金) 14:10:07そんなの使ってる人は自力で何とかすると思われ
0422デフォルトの名無しさん
2008/12/12(金) 15:56:530423デフォルトの名無しさん
2008/12/12(金) 16:09:20標準でありそうだが、ないな
というか時間オブジェクトってないよね
Time::Period クラスとかになるのかな
0424デフォルトの名無しさん
2008/12/12(金) 16:16:30難しく考えなくても、Time.at(44133)のTimeオブジェクトからhms拾えばおk。
0425デフォルトの名無しさん
2008/12/12(金) 16:21:130426デフォルトの名無しさん
2008/12/12(金) 16:23:19Time.at(44133).getgm.strftime("%H:%M:%S")
0427デフォルトの名無しさん
2008/12/12(金) 16:40:140428デフォルトの名無しさん
2008/12/12(金) 16:51:05どうしようもないな
日の部分が1を超すかどうかをチェックするしかあんめえ
0429デフォルトの名無しさん
2008/12/12(金) 16:54:140430デフォルトの名無しさん
2008/12/12(金) 16:57:59>>408
>>410
joinで解決しました。ありがとうございます。
aa = bb.scan(/.+/){|match| match.gsub(/m/,"")} もいいですが、今一ブロック処理って理解しきれない部分があって。
0431デフォルトの名無しさん
2008/12/12(金) 17:02:03勉強してみます。ありがとうございます。
0432デフォルトの名無しさん
2008/12/12(金) 19:18:43そのオブジェクトが GC されるタイミングでその File オブジェクトは close される?
0433デフォルトの名無しさん
2008/12/12(金) 19:22:38GC のタイミングで close する
finalizer のようなことをする方法があれば教えてください。
0434デフォルトの名無しさん
2008/12/12(金) 19:30:47http://www.ruby-lang.org/ja/man/html/FAQ_C1C8A4DFB9FEA4DFA5E9A5A4A5D6A5E9A5EA.html#a7.2e11.20.a5.d5.a5.a1.a5.a4.a5.eb.a4.f2close.a4.b7.a4.ca.a4.a4.a4.ce.a4.cf.b5.a4.bb.fd.a4.c1.a4.ac.b0.ad.a4.a4.a4.ce.a4.c7.a4.b9.a4.ac
> 参照されなくなったFileオブジェクトは、GCで自動的にクローズされます
>>433
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/3465
require 'finalize'
Finalizer.add(obj)
でobjがGCされるときにobj.finalizeがコールされる
はずだけど使ったこと無いw
0435デフォルトの名無しさん
2008/12/12(金) 19:37:48http://www.ruby-lang.org/ja/man/html/trap_IO.html
それと「objがGCされたとき」にobj.finalizeを呼ぶことはできないのか。
Finalizer.add(file, obj)
0436デフォルトの名無しさん
2008/12/12(金) 19:48:00ありがとうございます。
明示的に close しないのはあまり行儀が良くないとは思いますが、
それほど扱うファイルが多くない場合には GC に期待しても良さそうですかね。
Finalizer はリファレンスマニュアルに説明が無いですが、
これは使うなという無言の圧力でしょうか・・・
0437デフォルトの名無しさん
2008/12/12(金) 19:50:26なんでこの機能に依存するんだよ
0438デフォルトの名無しさん
2008/12/12(金) 20:00:19使うのは本当に必要なとき(ってどんなときだろ)のみにすべき。
ファイルのクローズのような処理はガベコレに頼るべきではない。
0439デフォルトの名無しさん
2008/12/12(金) 20:19:45いい意味でも悪い意味でもな
オブジェクトの自動回収だけをさせるべき
0440デフォルトの名無しさん
2008/12/12(金) 20:28:12自分が一から設計するならそうしたいんですけどね。
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 できれば
そっちの方が変更としてはスマートかな、と思いました。
何か良い方法ありますかね?
0441デフォルトの名無しさん
2008/12/12(金) 20:31:310442デフォルトの名無しさん
2008/12/12(金) 20:42:56ということで、この場合は勝手に消していいと思う
obj.open だけして放置する人がいたのなら、それはその人が悪いんじゃないかな
0443デフォルトの名無しさん
2008/12/12(金) 20:48:32ど田舎富山DQN男の家族消えろ ど田舎富山DQN男の親消えろ ど田舎富山DQN男の子供消えろ ど田舎富山DQN男の親戚消えろ
ど田舎富山DQN男の家族消えろ ど田舎富山DQN男の親消えろ ど田舎富山DQN男の子供消えろ ど田舎富山DQN男の親戚消えろ
ど田舎富山DQN男の家族消えろ ど田舎富山DQN男の親消えろ ど田舎富山DQN男の子供消えろ ど田舎富山DQN男の親戚消えろ
ニヤニヤ(・∀・) ニヤニヤ(・∀・) ニヤニヤ(・∀・) ニヤニヤ(・∀・)
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね
苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね
苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね
苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね
死ぬとき このレスの事思い出してから地獄へ行けよ
ニヤ(・∀・)ニヤ(・∀・)
0444デフォルトの名無しさん
2008/12/12(金) 20:59:19OSで関連付けされたアプリケーションで開きたいのですが、
どうすればよいでしょうか。
一種のとして使いたいのです。
0445デフォルトの名無しさん
2008/12/12(金) 21:06:56Windowsなら、start が使えるはず
system('start hoge.txt')
cmd.exe の内部コマンドなので注意
0446デフォルトの名無しさん
2008/12/12(金) 21:14:40> 何か良い方法ありますかね?
腐った設計を見直すのが一番いい方法だな
>>444
start とか open とか、そのOSで用意されてるコマンドを使う
0447デフォルトの名無しさん
2008/12/12(金) 21:15:44できました!
なんという素早く的確なレス!
本当にありがとうございます。ありがとうございます!
0448デフォルトの名無しさん
2008/12/12(金) 23:47:41作ろうとしているのですが、
テンプレートとなるHTMLを別に用意して
その中の項目などを置き換えて
最終的に表示を行いたいと考えています。
Amrita2 というライブラリが良さげなんですが
サンプルなどが少ないんですよね。
(メインのページ?が404で見れない)
他に、同様な機能を持ったライブラリで
お勧めなどはありますでしょうか。
0449デフォルトの名無しさん
2008/12/12(金) 23:56:170450デフォルトの名無しさん
2008/12/13(土) 00:08:10Tenjin ってのが速いらしいけど、使ったことないから別にお勧めってわけでもない。
http://www.kuwata-lab.com/tenjin/
0451デフォルトの名無しさん
2008/12/13(土) 07:29:20俺のオススメはTenjinだけど
この辺のライブラリはかなり数があるので、いくつか試して目的に合った奴を使うと良いんじゃないかな
Rubyist Magazine最新号あたりの記事も参考に
ちなみに普通のCGIアプリで使うなら、Amrita2はRubyGemsとHpricotを使っているためオススメできない
(というか普通のレンタルサーバ環境ではまず動かない)
amrita-alteredの方が良いと思う。ただし動作がかなり重いことには注意
0452デフォルトの名無しさん
2008/12/13(土) 07:53:50決定版がないんだよねという話は5年くらい前からしてる気がするが
0453デフォルトの名無しさん
2008/12/13(土) 08:07:15今の状況はけっこう理想的だと思うけど
0454デフォルトの名無しさん
2008/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 」の内容が次のものです。
|青空文庫《あおぞらぶんこ》
もへじ
通常の置換は成功していますが、正規表現による置換に変化がありません。
どうすれば良いのでしょうか。
0455デフォルトの名無しさん
2008/12/13(土) 10:41:010456デフォルトの名無しさん
2008/12/13(土) 10:42:49line.gsub(/(|)(.+?)(《)(.+?)(》)/,"\4\3\2\1") じゃまいか
0457デフォルトの名無しさん
2008/12/13(土) 10:47:150458デフォルトの名無しさん
2008/12/13(土) 11:03:27ふつうにERBでええやん
ttp://jp.rubyist.net/magazine/?0017-BundledLibraries
Tenjinは日本語の解説がないからこのレベルの初心者にはムリだと思う
0459デフォルトの名無しさん
2008/12/13(土) 11:08:08erb より eruby の方が手軽じゃない?
1行目に #!/usr/bin/env eruby って書いておいて、
拡張子を cgi にしておけば普通のCGIと変わらず動くし。
0460デフォルトの名無しさん
2008/12/13(土) 11:09:49>>457
ありがとうございます。
line.gsub!(/(|)(.+?)(《)(.+?)(》)/,'\4\3\2\1')
で出来ました!
正規表現はスラッシュで、
後方参照はシングルクォートで囲む必要があるんですね。
すごく勉強になりました。
このスレの皆さんのおかげで本当に助かります。
あらためて感謝します。
0461デフォルトの名無しさん
2008/12/13(土) 11:47:48懿「ォ めくらっぽう滅茶苦茶やってたらたまたま動作しました
0462デフォルトの名無しさん
2008/12/13(土) 13:05:380463デフォルトの名無しさん
2008/12/13(土) 13:37:050464デフォルトの名無しさん
2008/12/13(土) 13:42:35今ならERbよりErubisの方が良くないか?
>>459
まず、erubyのインストールが厄介なのでは
0465デフォルトの名無しさん
2008/12/13(土) 14:00:56「行数=挿入する数字」で良いんですが。
0466デフォルトの名無しさん
2008/12/13(土) 14:01:26ローカルでスクリプトとして使うならそれほどでもないんだが
0467デフォルトの名無しさん
2008/12/13(土) 14:03:07各行に対して、正規表現の文頭を数字で置換しれ
改行区切りで配列にしてしまうのが簡単だと思う
joinでくっつけるときの改行コードは元の改行にしておくこと
0468デフォルトの名無しさん
2008/12/13(土) 14:09:35bb
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桁のとき数字表示が汚くなるが、そのへんは自分で考えれ
0469デフォルトの名無しさん
2008/12/13(土) 17:17:48親切にありがとうございます。
>各行に対して、正規表現の文頭を数字で置換しれ
これはよく分かるのですが、
>改行区切りで配列にしてしまうのが簡単だと思う
というのがよくわからないのです。
str="●●●"の●●●の部分に連番を振りたいファイルの内容を
全部コピーして貼り付けて実行すれば良い、ということなのでしょうか?
確かにそれなら実現できました。
ただ、手間がかかるので
連番を振りたいファイルを指定して、
中身を直接書き換えられれば有難いのです。
そのような方法はありませんでしょうか。
ひょっとして初心者丸出しの質問なのかもしれませんが、
御教示頂ければ幸いです。
0470デフォルトの名無しさん
2008/12/13(土) 17:46:04必要なのはString オブジェクトだ
つまり文字列
ファイルパスを指定するとファイル内容を文字列で返すメソッドを持つクラスがあるからそれ使え
ファイル内容を文字列で取得できたら文字列内を置換しれ
んで書き込みたい文字列を作れたら、同じ名前でファイルに書き込め
0471デフォルトの名無しさん
2008/12/13(土) 18:02:44・ スクリプト内で指定したファイル内容を読み込んで表示してみる
・ 読み込んだファイル内容を置換して表示してみる
・ 置換した内容を別ファイル名で保存してみる
・ あらかじめ元ファイルをバックアップしておき、置換した内容を元と同じ名前で保存してみる
・ あるフォルダ(ディレクトリ)のファイル一覧を取得して表示してみる
・ 自分の欲しいファイル名だけを抽出する方法を考えてみる
・ 一覧のひとつひとつに対してファイル名だけを表示させてみる
・ ファイル名の表示の部分を「ファイル内容を読み込んで表示」に切り替えてみる
・ 「ファイル内容を読み込んで表示」の部分を「読み込んで置換して同名で保存」に置き換える
こんな感じ?
0472デフォルトの名無しさん
2008/12/13(土) 18:03:47スクリプト内で指定したファイル名の内容を読み込んで表示してみる、だった
0473デフォルトの名無しさん
2008/12/13(土) 18:10:45オライリーはPragmatic Thinkingなんちゃらって本の日本語版出せばいいのに
0474デフォルトの名無しさん
2008/12/13(土) 18:28:21うまい本とかあればいいんだけど、あんまり聞かないな
0475デフォルトの名無しさん
2008/12/13(土) 18:33:15そんな感じです。お手数をかけてすみません。
それを参考にして一つ一つ覚えて行きたいと思います。
何度か他の言語を覚えようとして挫折したのですが、
Rubyは簡単に結果を出力できて感動したので、
この言語を勉強することにしました。
(プログラムは素人ですが、
Rubyのコードがシンプルで美しいと思ったのも動機の一つです)
一応「たのしいRuby」と「Rubyレシピブック」は購入しましたので、
今は「15.2 基本的な入出力操作」を試しています。
プログラムとかはやったことはないのですが、頑張って覚えるつもりです。
0476デフォルトの名無しさん
2008/12/13(土) 18:37:33File.open(path, 'r'){|f| puts f.read}
ができた頃かね
f.read が文字列を返してることがわかったら、ファイルひとつを置換するのはもうすぐだな
0477デフォルトの名無しさん
2008/12/13(土) 22:18:03ruby -pe "printf '%4d ',$." ファイル名
でファイルに4桁の行番号をつけて標準出力に表示
ファイルを書き換えたければ -i.bak などと-i オプションにバックアップの拡張子をつけて実行
ruby -i.bak -pe "printf '%4d ',$." ファイル名
標準入力から読み込んだ場合の行番号は$.に入ってる、行番号の形式を変えたければprintfを勉強する
複数のファイルを指定しても大丈夫
Windowsだと -i の拡張子無しでの直接書き換えが出来ないのがちょっとやだな
UNIXだと ファイル開いておいて、開いたファイルを削除して、書き込み用で同名のファイルを作成するのかな?
PerlでもWindowsだと出来ないので、同じような動作してるんでしょうね
というか、Perlの動作を再現してるんでしょうけど
0478デフォルトの名無しさん
2008/12/13(土) 22:25:44outfile = '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}}}
0479デフォルトの名無しさん
2008/12/13(土) 22:30:000480デフォルトの名無しさん
2008/12/13(土) 22:32:30そんなこと言ったら行番号付加ツールインストールすれば一発だぞ
0481デフォルトの名無しさん
2008/12/13(土) 23:42:380482デフォルトの名無しさん
2008/12/14(日) 01:44:40お恥ずかしながら io.readlines のことかと思って悪戦苦闘していました。
例文通りに打ち込んでも上手く行かないので、何かプログラムの根本的な
ところが判ってないのだと思って再び悩んでいました。
>>477
>>478
ありがとうございます。おかげさまで希望通りの動作が実現しました。
教えて君のような私にここまでして頂いて何と感謝すれば良いのか判りません。
私に何ができるわけでもありませんが、似たようなことがあったら、
私もこのスレの皆さんのような態度で困った人に接したいと思います。
このスレの皆様に心から感謝します。本当にありがとうございました。
0483デフォルトの名無しさん
2008/12/14(日) 03:03:55死ぬの?
0484デフォルトの名無しさん
2008/12/14(日) 05:12:40たかが2chでそこまでバカ丁寧になる必要はない
教えてやりたい人間が教えたいように教えただけ
>>483
バカ丁寧だから、バカなんじゃない?
0485デフォルトの名無しさん
2008/12/14(日) 05:13:180486デフォルトの名無しさん
2008/12/14(日) 05:40:39たかが2chで「必要がない」ことをそんな大きく見てもしょうがない。
他の多くのレスの不必要な表現と同じように、>>482も書きたいように書いただけ。
0487デフォルトの名無しさん
2008/12/14(日) 12:37:57ないみたいね
そもそもPlaggerのスレさえも立ってない
(理由は不明だけど、俺は人気がないんだと思っている)
話したいなら、ここや本スレでも良いと思うよ
0488デフォルトの名無しさん
2008/12/14(日) 12:47:00OSは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 に必要とされています
#
0489デフォルトの名無しさん
2008/12/14(日) 13:03:15ruby-dev のようなもの、libopenssl-ruby のようなもの、openssl のようなもの、のインストールが足りない
Ruby関係ないな
0490デフォルトの名無しさん
2008/12/14(日) 13:13:04必要なファイルを含むパッケージを表示する方法があるはずだから、それでインストールするパッケージを調べるといい
0491デフォルトの名無しさん
2008/12/14(日) 13:49:11ruby-devとlibopenssl-rubyについては入っていません。。
ruby-dev`については、自ら作成したrubyのRPMファイルを入れるときに
アンインストールしちゃいました。
含んでいそうなファイルを探してみます。
ありがとうございました。
0492デフォルトの名無しさん
2008/12/14(日) 13:53:010493デフォルトの名無しさん
2008/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ファイルってどこかに落ちてるんでしょうか?
0494デフォルトの名無しさん
2008/12/14(日) 14:56:390495デフォルトの名無しさん
2008/12/14(日) 20:54:03どうすればいいでしょうか。
path ="test.txt"
system("start path")
これだとコマンドプロンプトが立ち上がるだけで
関連付けでファイルを開いてくれません。
0496デフォルトの名無しさん
2008/12/14(日) 21:01:50それと同じことが起きてるだけ
0497デフォルトの名無しさん
2008/12/14(日) 21:03:030498デフォルトの名無しさん
2008/12/14(日) 21:43:35出来ました! ありがとうございます。 m(_ _)m
0499デフォルトの名無しさん
2008/12/14(日) 22:13:541.9向けにライブラリ作っていい?
0500デフォルトの名無しさん
2008/12/14(日) 22:26:51応
で
き
る
も
ん
が
作
れ
るなら作ってみな
という感じだ
特にEncode関連
0501デフォルトの名無しさん
2008/12/14(日) 22:29:24いちユーザーとしてもいきなり挫折しなくて済んでいいかも
ruby1.9 ./hoge.rb
しただけで普段見たことも無いファイルのやたら多い行数のとこでSyntaxErroroとか挫けるし
0502デフォルトの名無しさん
2008/12/14(日) 22:30:511月に延期されたとかなんとか
0503デフォルトの名無しさん
2008/12/14(日) 22:32:381.9.0 features を読んで逐一チェックするしかない?
0504デフォルトの名無しさん
2008/12/14(日) 22:51:1012月25日に予定されてるのは、1.9.1のRC(リリース候補)で正式版じゃない
といっても、現時点でもう1.9.1の仕様は固まってるはずなので、今から作り始めても良いと思うが
0505デフォルトの名無しさん
2008/12/14(日) 22:51:59たぶんrubikitichがホッテントリ狙って書くよ。
0506デフォルトの名無しさん
2008/12/14(日) 22:58:220507デフォルトの名無しさん
2008/12/14(日) 23:10:00$KCODE="s"
tut = "12月28日 夢見師(プリンセスソフト、7,140円) "
p tut
0508デフォルトの名無しさん
2008/12/14(日) 23:13:460509デフォルトの名無しさん
2008/12/14(日) 23:14:57#!/usr/local/bin/ruby -Ks
の1行入れてなかったことによるものでした。お騒がせしてすいません。
>>508
sjisのことです。
0510デフォルトの名無しさん
2008/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
0511デフォルトの名無しさん
2008/12/14(日) 23:53:36正規表現中でカッコそのものを表すなら \( や \) のようにエスケープしなきゃだめ
0512デフォルトの名無しさん
2008/12/15(月) 01:03:05え゛っ、そうなんですか!!
/に\/しなきゃならないのは知っていたですが、()もでしたか。
他でもポカしてそうだな。
ご解答ありがとうございます。
0513デフォルトの名無しさん
2008/12/15(月) 01:04:30英数はそのまま書くとその文字、\を付けると特別な意味になることが多い。
逆に記号はそのまま書くと特別な意味があることが多く、\を付けるとその文字ってことが多い。
0514デフォルトの名無しさん
2008/12/15(月) 01:41:29記号の意味そのものは必要なときに調べればいいから覚えなくてよし
エスケープが必要な文字かどうかだけを記憶すればおk
0515デフォルトの名無しさん
2008/12/15(月) 09:11:03間違ってエスケープせずにピリオド使ってても
そのまま動いてしまって気付かないことが多い
あとで忘れた頃に問題が表面化するから初心者は注意な
0516デフォルトの名無しさん
2008/12/15(月) 09:54:50で99.99%くらいは普通に動作するんだよな
0517デフォルトの名無しさん
2008/12/15(月) 10:02:26わかってない人が「メールアドレスにヒットする正規表現を書け」とか課題出したりするんだが
0518デフォルトの名無しさん
2008/12/15(月) 10:27:14から
/\s*\(a\)\s*/
を生成するのってどうやるんですか?
a = "(a)"
/\s*#{a.escape}\s*/
みたいに書ければいいんだけど
0519デフォルトの名無しさん
2008/12/15(月) 10:41:09マニュアル読んどけ
Rubyの正規表現はただのオブジェクトだからRegexpクラスのメソッドで生成できる
/〜/ で書くのはただのわかりやすいエイリアスに過ぎない
あと、半角スペースと \s には直接の関係はないから、あらかじめ \s で書いておくしかないよ
個人的には半角スペースを \s で表現するようにするのは後々罠に落ちるから全くお勧めしない
半角スペースがあるのなら、どんなに正規表現の見かけがマヌケになっても半角スペースで書くべき
0520デフォルトの名無しさん
2008/12/15(月) 11:10:37/\s*#{Regexp.escape(a)}\s*/
Regexp.quoteという別名も。
0522デフォルトの名無しさん
2008/12/15(月) 21:57:53プラガブルであることのメリットがイマイチ生かされてないんだな
0523デフォルトの名無しさん
2008/12/16(火) 05:42:09逆転しそう
0524デフォルトの名無しさん
2008/12/16(火) 05:46:15逆転もなにも、世界的には10位以下に後退したダメダメ言語だけどね
(ただ、Pythonが下がってたりLogoが爆上げしてるところから見ても
かなり変な順位づけであることは間違いない)
0525デフォルトの名無しさん
2008/12/16(火) 19:07:50001test.txt
002test.txt
003test.txt
という複数のファイルを、
数字の部分に正規表現を使ったパスで一度に開きたいのですが、
どうすれば良いでしょうか?
次のように書いているのですが上手く行きません。
files = /D:/desktop/[0-9]+test.txt/
system("start #{files}")
0526デフォルトの名無しさん
2008/12/16(火) 19:21:31あと %r の使い方も調べとけ
0527デフォルトの名無しさん
2008/12/16(火) 19:24:19Dir.glob
0528デフォルトの名無しさん
2008/12/16(火) 21:05:12御返事ありがとうございます。
それで調べたら Dir.glob は正規表現ではなくワイルドカード対応と書いてあるのですが、
これは正規表現には対応していないということではないでしょうか。
>>525の書き込みはあくまで勉強中の実験のものなので、
実際に使う時にはパスを正規表現で指定したいのです。
また、>>525では省略しましたが、
開きたいファイルは似たような名前が多いので、最終的には、
name = ●●
files = %r("D:/desktop/[-9]+●●.txt")
system("start #{files}")
というような形にして、●●の部分を書き換えるだけで
任意のの複数のファイルを開けるようにしたいのです。
0529デフォルトの名無しさん
2008/12/16(火) 21:28:50そういうのだと全ファイル名から正規表現でselectせざるをえないかな。
0530デフォルトの名無しさん
2008/12/16(火) 21:50:09find_all と呼ぶ
0531デフォルトの名無しさん
2008/12/16(火) 21:59:18まったく同じことを繰り返すことになるが、Rubyのオブジェクトについての考え方学んでくれ
返り値がただの文字列なら、それはただの文字列(String クラスのオブジェクト)で、何か特別なものがあるわけじゃない
Stringクラスのメソッドが完全に全て動作するし、文字列オブジェクトを引数にとるメソッドは全て完全に動作する
メソッドの返り値がどのクラスのオブジェクトなのかということは絶対に意識しないと駄目よ
正規表現を使いたいなら、引数…、まあ、引数の見かけしてないことが多いけど、マッチ試行対象は文字列だ
いちばん単純な状態で必要なのは、ディレクトリ中のファイルを文字列で返すメソッド
その文字列の一群の中から、正規表現にマッチする文字列を探して、その文字列をどうにかすればいい
0532デフォルトの名無しさん
2008/12/16(火) 21:59:19ソースは?
0533デフォルトの名無しさん
2008/12/16(火) 22:43:20filter = /\d+test.txt/
system(Dir.glob(target).select{|i| i =~ filter}.unshift('start').join(' '))
0534デフォルトの名無しさん
2008/12/17(水) 00:24:48なあ、初心者スレなんだから、もっと分かりやすく書こうぜ
filenames = Dir.glob('D:/desktop/*')
filenames = filenames.grep(/^¥d+test¥.txt$/)
system "start #{filenames.join(' ')}"
0535デフォルトの名無しさん
2008/12/17(水) 00:34:21改行が存在しない文字列に対して ^ と $ は不適
代わりに \A と \Z を使おう
0536デフォルトの名無しさん
2008/12/17(水) 00:43:57require 'tk' がうまく いきません。以下のようなメッセージが表示されます。
in `require' : no such file to load --tk (LoadError)
どうすればいいでしょうか?
0537デフォルトの名無しさん
2008/12/17(水) 00:46:52Tcl/Tkが入ってないんじゃね?
0538デフォルトの名無しさん
2008/12/17(水) 00:48:23tkライブラリを見つけられなかった。
tkがインストールされない環境(ってなんだろ?)か
$LOAD_PATHがおかしいんじゃない?
0539536
2008/12/17(水) 01:02:12/usr/local/lib/ruby/1.8/test/unit/ui/tk
/usr/lib/ruby/1.8/test/unit/ui/tk
が見つかったんですけどこれとは違うんでしょうか?
ちなみに echo $LOAD_PATHでは何も表示されませんでした。
0540デフォルトの名無しさん
2008/12/17(水) 01:13:10質問者の求める「正規表現の使えるglob」が提供されて無いから別解を提示しただけ
分かりにくいってのはわざとそうしてるんだから許してよ
>>539
それ違う
OS何?tcl/tk入ってる?wishコマンド使える?
0541デフォルトの名無しさん
2008/12/17(水) 08:10:32>改行が存在しない文字列に対して ^ と $ は不適
逆だろ。改行が存在しない文字列だからこそ ^ や $ を使っても構わない。
0542デフォルトの名無しさん
2008/12/17(水) 08:13:15>分かりにくいってのはわざとそうしてるんだから許してよ
なんでそんなことをするの
分かりやすく書けないのをごまかしてるだけじゃねーのかよ
0543デフォルトの名無しさん
2008/12/17(水) 08:22:36あまりRubyの正規表現に詳しくない人間が見たら
「ああ^と$は文字列先頭と末尾なんだな。Perlと同じなんだな」とか
勘違いしちゃうよ
0544デフォルトの名無しさん
2008/12/17(水) 08:44:02>system "start #{filenames.join(' ')}"
system 'start', *filenames
でよくね?
0545デフォルトの名無しさん
2008/12/17(水) 10:21:20そんなこと言ったら2行目はメソッドチェーンで消えるし、
対象ディレクトリが専用ディレクトリならそもそも Dir.glob のワイルドカードつき文字列でも充分だ
君が *引数 をオボエタテだからだからといってわざわざ難しくする必要はない
0546デフォルトの名無しさん
2008/12/17(水) 10:28:48目に見えない文字や場所にマッチする正規表現は慎重に使ったほうがええぞ
半角空白にマッチさせるために \s を使ったりしないだろ
それと同じこと
0547デフォルトの名無しさん
2008/12/17(水) 10:30:19544じゃないけど、一般にsystemの引数は ' ' でjoinするより * で渡すほうが空白を含むファイル名等の問題をより安全に回避できるので、* のほうがお勧めだけどね
0548デフォルトの名無しさん
2008/12/17(水) 10:37:16使うなら堂々と初心者向け解説の3ページ目から使いまくるくらいの感じにして欲しいとは思う
0549デフォルトの名無しさん
2008/12/17(水) 10:45:05mkdir foo
mkdir bar
`
みたいに途中でシェルスクリプトだらだら書けるようなやり方ってない?
上の書き方だとmkdir fooだけ実行されるっぽい
0550デフォルトの名無しさん
2008/12/17(水) 10:49:19返り値が必要なときに使うもんだ
system 使え
0551デフォルトの名無しさん
2008/12/17(水) 10:57:56やってみた?
0552デフォルトの名無しさん
2008/12/17(水) 11:17:32>>547
たいへん参考になりました。
ただ初心者スレで使うには説明が必要ですね。
0553デフォルトの名無しさん
2008/12/17(水) 11:21:00system "
mkdir foo
mkdir bar
"
でも変わらなかった
0554デフォルトの名無しさん
2008/12/17(水) 11:31:24シェルスクリプトとみなせる環境であるなら全部実行できるはず
動作しないとしたらWindowsかCygwinだな
0555デフォルトの名無しさん
2008/12/17(水) 11:33:20mkdir foo; mkdir bar だろう。
つーかそんなことしなくても、
mkdir foo bar でいいだろう。
0556デフォルトの名無しさん
2008/12/17(水) 11:35:50最新5レスしか読めない携帯からのご参加ですか?
0557デフォルトの名無しさん
2008/12/17(水) 11:38:56mkdir したいって話じゃねーだろ
>>553
Windowsではでっかいひとつのスクリプトとして実行するしかなさそうだな
0558デフォルトの名無しさん
2008/12/17(水) 11:39:43system "foo.sh"
したらいいやん
0559540
2008/12/17(水) 12:15:12初心者にはメソッドチェーンが読みにくいかもしれない、とは思ったけど
読み解くのも勉強になるだろうと思ってそのまま書いた
grep と system(*args) は知らなかったから書き直すよ
target = 'D:/desktop/*'
filter = /\d+test.txt/
command = 'start'
system(*Dir.glob(target).grep(filter).unshift(command))
0560デフォルトの名無しさん
2008/12/17(水) 14:15:15>system(*Dir.glob(target).grep(filter).unshift(command))
なぜわざわざunshiftを使うのか分からん。>>544の通りに
system command, *Dir.glob(target).grep(filter)
でええやん。
0561デフォルトの名無しさん
2008/12/17(水) 14:34:26キューじゃないものに pop とか使ったらダメよ混乱するから
0562デフォルトの名無しさん
2008/12/17(水) 15:00:35RubyのselectはSQLのselectじゃなくて
Smallltalkのselectに由来するって知ってるか?
0563デフォルトの名無しさん
2008/12/17(水) 15:09:54普通に使ってるし、混乱するって話もあまり聞かないぞ
そもそもpopやshiftを使わないとすると、代わりにどんな風に書くんだ?
0564デフォルトの名無しさん
2008/12/17(水) 15:14:58「外来語」の detect と select で悩むくらいなら find と find_all を使うなあ、俺は
というかなんでそこで SQL が出てくるんだ?
0565デフォルトの名無しさん
2008/12/17(水) 15:21:17配列から取り除くことが作用ではなく副作用になる場合以外、
「配列から取り除く(ついでに値を得る)」ではなく
「値を得る(ついでに取り除く)」だと思ってるとミスするという話かと。
def get_first(ary)
ary.shift
end
ary = [1,2,3]
put get_first(ary) # aryが破壊される
0566デフォルトの名無しさん
2008/12/17(水) 15:35:31同意
queue じゃなくても、popもshiftも使うよな
0567デフォルトの名無しさん
2008/12/17(水) 15:38:04イテレータ拒絶派か何かか?
0568デフォルトの名無しさん
2008/12/17(水) 15:42:26split結果の先端や終端にゴミついてるのが確実なときに切り落とすためとか。
0569デフォルトの名無しさん
2008/12/17(水) 15:55:45delete_at(0)
配列先頭のデータが欲しいときに
data = arr.delete(0)
と書くのが奇妙なのと同程度には
# 先頭は不要
arr.shift
と書くのは奇妙だと思う
shift に関してはコマンドライン引数を順に扱うときに shift コマンドを使った経験が後を引いてるのかもしれないが、
ここは Ruby だし shift は変
0570デフォルトの名無しさん
2008/12/17(水) 15:57:550571デフォルトの名無しさん
2008/12/17(水) 15:58:580572デフォルトの名無しさん
2008/12/17(水) 16:19:460573デフォルトの名無しさん
2008/12/17(水) 16:19:54>質問・要望・雑談などどうぞ。
>>569
奇妙なのはそのコメント文だろうw
代入操作がないことから不要なことは自明。
返値があるものは代入しないといけないなんてルールはないし。
>>565のように先頭や末尾の要素を配列から取り除くのが主の操作で、
popやshiftにそれ以上の意味(=キュー専用)はないと考えてる。
だからdelete_at使えというのは、firstやlastもat(0)やat(-1)にしろと
言っているように聞こえる。
キューでない配列に対してpopやshiftがよろしくないなら
Array#pop #shift #push #unshiftは廃止してQueueクラスを用意するべき。
運用で制限しようとするほうがおかしい。
(threadのものと名前がかぶるけどそれはさておき)
0574デフォルトの名無しさん
2008/12/17(水) 19:49:45ところでその考え方だとpopはキューに使っちゃダメだろ
あれはスタックに使うものでは?
0575デフォルトの名無しさん
2008/12/17(水) 21:13:20切り捨てるより、shiftで切り出された結果を使う方が多い
param = ARGV.shift
line = lines.shift
とか
0576デフォルトの名無しさん
2008/12/17(水) 21:39:050577デフォルトの名無しさん
2008/12/17(水) 21:54:01push⇔shift
unshift⇔pop
これでキューが出来上がる。ただし左がエンキュー、右がデキュー
0578デフォルトの名無しさん
2008/12/17(水) 21:59:30というか、説明もないしキューの概念知らない人もそこそこいるのでは
0579デフォルトの名無しさん
2008/12/17(水) 22:02:020580デフォルトの名無しさん
2008/12/17(水) 22:26:230581デフォルトの名無しさん
2008/12/17(水) 22:33:43自慢だが知らん
popやshiftは配列から1個取る便利メソッドだと思ってる
0582デフォルトの名無しさん
2008/12/17(水) 23:47:16丁寧な解説をありがとうございます。
Rubyの「オブジェクト指向」という考え方が何となく判って来た気がします。
つまり、文字列などの何らかのデータをオブジェクトとして扱い、
その内容に変更を加えたデータ(や当該コード)もオブジェクトにでき、
更にそのオブジェクトに変更を加えたデータも・・・・・
という事が限りなくできる、ということなんですね。
つまり「全てがオブジェクト」なんですよね?
そして、そのあらゆる段階でのオブジェクト(データ)に自分で名前を付けることによって、
任意の段階でのデータ(オブジェクト)をコードのどこでも簡単に使い回しできるようにしたものが、
Rubyのオブジェクト指向、だと理解しました。
そして、初心者が常に気を付けるべき点は、
データを処理するためのメソッドが「どのオブジェクトを対象としているのか」という点にある、
というのが>>531でのアドバイスの要点だと思いました。
基本的な理解はこれで合っているでしょうか? (^^;)
0583デフォルトの名無しさん
2008/12/17(水) 23:53:26肯定(否定)先読みには対応しているようですが。
使っているエディターがPerl準拠の正規表現なので
今までは戻り読みが使えて便利だったのです。
0584デフォルトの名無しさん
2008/12/18(木) 00:02:130585デフォルトの名無しさん
2008/12/18(木) 00:29:31a = []; 50000.times { a.push(0) }
と
a = []; 50000.times { a.unshift(0) }
を比べてみな
0586デフォルトの名無しさん
2008/12/18(木) 00:33:160587デフォルトの名無しさん
2008/12/18(木) 00:57:28ほほう。こういうものがあるんですね。
次期Rubyに搭載予定だそうで凄そうです。
それで鬼車のホームページには、
>* 5.xはUnicode Property/Scriptを提供
>* 2.xはRuby1.6/1.8組込みライブラリとして動作する。 (2006年末で保守を終了)
と書いてありますが、どちらをインストールしたら良いんでしょうか。
詳しい方がいらっしゃったら御教示願います。
0588デフォルトの名無しさん
2008/12/18(木) 08:51:3250000 は絶妙なとこだな。(celeron 1.3GHz)
0589デフォルトの名無しさん
2008/12/18(木) 09:31:250590デフォルトの名無しさん
2008/12/18(木) 09:47:36自分でちょっと重い処理するライブラリとか公開したときちょっと気になる
0591デフォルトの名無しさん
2008/12/18(木) 09:51:40Core2Duoでも相当差が付くぞ
0592デフォルトの名無しさん
2008/12/18(木) 09:59:23そのご立派なCPUで500000とか試してみなよ。
0593デフォルトの名無しさん
2008/12/18(木) 10:05:520594デフォルトの名無しさん
2008/12/18(木) 10:09:492GHzくらいじゃね
0595デフォルトの名無しさん
2008/12/18(木) 10:17:430596デフォルトの名無しさん
2008/12/18(木) 11:26:59使う人次第で負荷なんて桁で変わるんだし。
軽く使えるノウハウでもついでに書いとけば喜ばれると思うけど。
0597デフォルトの名無しさん
2008/12/18(木) 12:02:34pushと違ってunshiftは必ずメモリのコピーが発生するから
ってことかな>速度差
0598デフォルトの名無しさん
2008/12/18(木) 12:34:380599デフォルトの名無しさん
2008/12/18(木) 15:12:50どちらもインストールしないでrubyの1.9.1をインストールする。
まだリリースされてないけど。
0600デフォルトの名無しさん
2008/12/18(木) 15:13:58終わったというか、まだ始まってない。
そもそもIronRubyの動作基盤であるDLRがまだリリースされてないし。
0601デフォルトの名無しさん
2008/12/18(木) 15:19:49* で始めると見出しとか、 - で始めるとリストとか、そういうので適当な日記的 HTML を楽に書きたいです
日記や Wiki みたいな動的機能はいらないです
サーバにアップロードするときに Ruby スクリプトで変換して FTP するとか、そんな感じなんですが
0602デフォルトの名無しさん
2008/12/18(木) 15:36:51は死んでる?
gem でイイのないもんかね
0603デフォルトの名無しさん
2008/12/18(木) 15:41:450604デフォルトの名無しさん
2008/12/18(木) 15:42:53あるかどうか知らんけど。
0605デフォルトの名無しさん
2008/12/18(木) 15:48:25日本語がちゃんと扱えるかどうかは知らないけど。
0606デフォルトの名無しさん
2008/12/18(木) 16:08:25使いやすいとは言えないがかなり面白い。
これとTenjin組み合わせれば・・・とか妄想してる。
0607デフォルトの名無しさん
2008/12/18(木) 16:09:43どんなコマンドが実行されているか表示されてほしいんですけど。
0608デフォルトの名無しさん
2008/12/18(木) 17:18:08Installing rdoc documentation
これでバカみたいに遅いのはなぜ?
中で何やってこんなに遅いの?
0609デフォルトの名無しさん
2008/12/18(木) 17:21:520610デフォルトの名無しさん
2008/12/18(木) 17:29:060611デフォルトの名無しさん
2008/12/18(木) 17:30:06環境によって出力結果変わったりするもの?
0612デフォルトの名無しさん
2008/12/18(木) 17:31:55できるものがでかいから。
0613デフォルトの名無しさん
2008/12/18(木) 17:35:48実際のドキュメントを見るとわかるがまあ結構デカい
デフォルトデザインのドキュメントくらい添付してもいいと思うんだが、
まあ、全パッケージの全バージョンを保持してるわけだし、
それぞれに2種類のドキュメントをさらに保持というのは確かに辛いかもしれず
0614デフォルトの名無しさん
2008/12/18(木) 17:53:36パッケージはgzipとかしてるだろうし、試しにzipアーカイブに・・・
rubygems-1.3.1/rdoc/ 2,425,167byte -> zipped 820,211byte
把握したw
0615デフォルトの名無しさん
2008/12/18(木) 18:16:020616デフォルトの名無しさん
2008/12/18(木) 18:45:30HikiDocか。
>>601
Hikiのは古いから、HikiDocでぐぐって(単体で保守されてる)
あとはRakeと連携して細かいところを自分で書けばおっけーじゃね。
0617デフォルトの名無しさん
2008/12/18(木) 19:17:03Marukuもあるよ
高機能な割に、いまいち安定しないが
0618デフォルトの名無しさん
2008/12/18(木) 19:26:32>あれってなんで事前作成してないんだろ。
事前に作成できるよう指定できるよ。
ようは各gem作者がそれを指定してないだけ。
0619デフォルトの名無しさん
2008/12/18(木) 20:10:37鬼車のを今の1.86で組み込んで使うことはできないんでしょうか?
戻り読みの正規表現が使えないと非常に困るのです。
ネットで調べたら「VC++で鬼車をコンパイル云々」と出て来ましたが、
プログラミングはRubyから始めたばかりなので、
別のプログラムが必要とかになるとお手上げなのです。
何とかならないものでしょうか。鬼車の2.x系で構わないので。
0620デフォルトの名無しさん
2008/12/18(木) 20:18:19決まっちゃうので、自分でコンパイルがお手上げなら、鬼車を有効に
してあるバイナリを探すしかない。あるかどうか知らないけど。
駄目ならRubyでやるのを諦めるしかないと思うけど。
0621デフォルトの名無しさん
2008/12/18(木) 21:13:29リテラルの/.../だと組込の正規表現クラスを使ってしまうので、
全部明示的にメソッド呼んで組み立てる必要があるが。
0622デフォルトの名無しさん
2008/12/18(木) 21:29:29gem 'package_name', '=1.0.0'
でバージョンを指定してるはずなんだけど、
/usr/lib/ruby/1.8/rubygems.rb:142:in `activate':
can't activate package_name (>= 1.0.1, runtime),
already activated package_name-1.0.0 (Gem::Exception)
という例外が出て動作しない
1.0.0 を指定してるんだから 1.0.0 だけ読んでくれよ
っていうかバージョン指定でインストールさせるライブラリの作者は安易に require だけすんな氏ね
0623デフォルトの名無しさん
2008/12/18(木) 21:32:02レスありがとうございます。
戻り読みが使えないのは大変に困るので、
素人でもコンパイルと言うものができるなら挑戦してみようと思います。
ええと、ネットで調べたのですが、
Rubyと鬼車のソースを手に入れて解凍し、
鬼車の解凍フォルダをRubyの解凍フォルダに入れて、
Visual C++ Toolkit 2003 Commandでコマンドを入力してコンパイル
で、基本的な流れは良いんでしょうか。
鬼車を組み込むために特別なことは必要ないのでしょうか?
>>621
できれば他の正規表現と全く変わらないように使いたいので、
鬼車を組み込んだRubyの方がありがたいのです。
0624デフォルトの名無しさん
2008/12/18(木) 21:39:26なんかすごいことしようとしてるなー
ちなみに、その戻り読みが必要な正規表現ってどんなの?
もしかしたら、戻り読みが必要ないかたちに書き換えられるかもしれないし。
0625デフォルトの名無しさん
2008/12/18(木) 22:13:45> なんかすごいことしようとしてるなー
そんなに素人には敷居が高いのでしょうか?
確かに戻り読みは全ての正規表現に使うわけではないので、
>>621さんの鬼車gemというのを使った方が良いのでしょうか。
0626デフォルトの名無しさん
2008/12/18(木) 22:17:53Object.const_set('Regexp', ORegexp)とかしてしまえば(警告出る)、
Regexp.newで作った後は同じように使える(と思う)から、
/.../と書けない以外はそれなりに使えるんじゃないだろうか。
0627デフォルトの名無しさん
2008/12/18(木) 22:18:01やっといてもいいと思うけど。
Cygwinじゃダメなの?
0628デフォルトの名無しさん
2008/12/18(木) 22:58:02-v
0629デフォルトの名無しさん
2008/12/18(木) 23:06:19「鬼車を組み込むために特別なこと」は鬼車のドキュメントに書いてある。
それに従えば大丈夫だと思うよ。
0630デフォルトの名無しさん
2008/12/18(木) 23:48:150631デフォルトの名無しさん
2008/12/18(木) 23:56:38Ruby単体では難しいな
NKFに頼るのが妥当か
0632デフォルトの名無しさん
2008/12/19(金) 00:01:56○行処理完了,×行目失敗,△行目失敗...ぐらいのちょっとしたものなのに
0633デフォルトの名無しさん
2008/12/19(金) 00:05:43そのまんまだよ
smtpの前にpopでただアクセスすればいい
履歴はサーバが短時間記憶してくれているから普通にsmtpでアクセスだ
メール関連は詳しく説明するとSPAM送るアホが出るからどこも親切にはしてくれないだろうね
0634デフォルトの名無しさん
2008/12/19(金) 00:15:20サンクス
0635デフォルトの名無しさん
2008/12/19(金) 00:51:58一方向の変換ならString#trじゃダメ?
0636デフォルトの名無しさん
2008/12/19(金) 09:48:35具体的には
a[0]=$1
a[1]=$2
以下同様です。
これを
0.upto(4) do i
a[i]=$(j+1)
end
とかやってもコンパイルエラーがでてしまうのですが、組み込み変数$1,$2・・・に
イテレータを利用してアクセスできる方法はありますか?
0638636
2008/12/19(金) 09:54:020.upto(4) do i
a[i]=$~[j+1]
end
でいけました。一人で何やっとるんだ俺は。
0639デフォルトの名無しさん
2008/12/19(金) 09:56:110641デフォルトの名無しさん
2008/12/19(金) 10:06:44とりあえず a = $~[1..-1]
0642デフォルトの名無しさん
2008/12/19(金) 10:07:510643641
2008/12/19(金) 10:10:440644デフォルトの名無しさん
2008/12/19(金) 11:00:360645デフォルトの名無しさん
2008/12/19(金) 11:53:42NKFにそんな機能あったっけ?
ていうか、ひらがな←→カタカナなら
str.tr 'あいう(略)アイウ(略)', 'アイウ(略)あいう(略)'
でどうだろう。「ヴ」をどうするかとか問題はあるけど。
0646デフォルトの名無しさん
2008/12/19(金) 12:45:16irb> puts NKF.nkf('--hiragana', 'ルビーは超うんこ').toutf8
るびーは超うんこ
nil
irb> puts NKF.nkf('--katakana', 'ルビーは超うんこ').toutf8
ルビーハ超ウンコ
toutf8は表示用
0647デフォルトの名無しさん
2008/12/19(金) 12:51:20ttp://d.hatena.ne.jp/kiyo560808/20081215/1229363279
…4点くらい
0648デフォルトの名無しさん
2008/12/19(金) 12:54:270649デフォルトの名無しさん
2008/12/19(金) 20:18:160650デフォルトの名無しさん
2008/12/19(金) 20:54:14「Rubyf1.91 2007年12月リリース」とかいうページが出て来るし。
0651デフォルトの名無しさん
2008/12/19(金) 20:59:17普通にファイル開いて使ってるぶんにはどっちも同じです
File オブジェクトを返します
好きなほう使ってください
File.open 派が若干多いような雰囲気はするけど
0652デフォルトの名無しさん
2008/12/19(金) 21:20:28同じですか
サンクス
0653デフォルトの名無しさん
2008/12/19(金) 21:26:50いろいろフォーマット扱える Webgen に手を出したらもうぜんぜん動きません
reStructuredText とか文法いいなーと思うけどこれ Python なんだよね
教えてもらったものいろいろ試します
せんきゅです
0654デフォルトの名無しさん
2008/12/19(金) 21:31:59>普通にファイル開いて使ってるぶんには
普通でない場合を勝手に補足。
組み込み関数のほうのopenはPerlのopenみたいに"|cat"みたいなパイプの繋ぎ方を
半端にサポートする。
あと、open-uriを使う場合も違いが出る。
0655デフォルトの名無しさん
2008/12/19(金) 21:39:110656デフォルトの名無しさん
2008/12/19(金) 21:56:410657デフォルトの名無しさん
2008/12/19(金) 22:06:19実は、データファイルを持ってきてシミュレートせよという課題なんですが
Matlabがなく、OctaveはまともにWindowsでは動かないので…
0658デフォルトの名無しさん
2008/12/19(金) 22:24:430659デフォルトの名無しさん
2008/12/20(土) 02:39:59月5,000円のレンタルサーバーが必要です。
一方、cakephpなら、月500円のレンタルサーバーで
十分なスピードで動きます。
0660デフォルトの名無しさん
2008/12/20(土) 08:29:051.配布されてるデータがMatlab形式
2.解析方法がワカンネ
3.これを使ってk-NN法の実験をしなくちゃならない(レポートの提出はあさってAM10:40)
4.私はMatlabを持ってない
\(^o^)/
0661デフォルトの名無しさん
2008/12/20(土) 08:42:09エディタで開け
バイナリならMatlabスレで聞けば目で読める形式にしてくれるだろ
0662デフォルトの名無しさん
2008/12/20(土) 08:53:53バイナリですよ
で、どこの板にありますか?
0663デフォルトの名無しさん
2008/12/20(土) 09:45:040664デフォルトの名無しさん
2008/12/20(土) 10:05:56テキストファイルにしてしまえ
いくらWindows版Octaveが不安定といっても
ファイル読んで書くくらいならできるだろう
もしくは、仮想マシンにLinuxいれてでもOctaveをつかうとか
0665デフォルトの名無しさん
2008/12/20(土) 10:44:07とりあえず書き出し中。ただ、ディスクが逼迫しているのできちんと書き出せるか
かなり不安だが。
0666デフォルトの名無しさん
2008/12/20(土) 10:52:43さあRubyでがしがし処理するか
0667デフォルトの名無しさん
2008/12/20(土) 19:08:36Ruby歴2週間のおれに教えてくれ。
Rails2.2を入れたいのだが、Ruby1.9.0Xでいいの?1.9.1の未完成版は止めた方がいい?
仕事じゃないから人柱でもなんでもいいけど、
慣れない環境であまりにも動かないと何が何だか分からなくなってつらい。
最新版命主義だから1.8.6Xはよほどひどくないと考えていないっす。
0668デフォルトの名無しさん
2008/12/20(土) 19:12:331.8.6は古いから、しがらみも資産もない新規さんなら1.8.7でウキウキ新機能をエンジョイしろ
Railsも完全に動作するし
0669デフォルトの名無しさん
2008/12/20(土) 19:22:18レスサンクス
1.8.7ってあいのこみたいなイメージがあるのだが。
1.9系みたいにマルチバイト文字列を簡単に扱いたいんだけどできる?
0670デフォルトの名無しさん
2008/12/20(土) 19:51:180671デフォルトの名無しさん
2008/12/20(土) 19:54:11ちょっとワクワクしてきた
0673デフォルトの名無しさん
2008/12/20(土) 20:44:50Matlab持ってる研究室尋ね歩いて使わせてもらえ
0674デフォルトの名無しさん
2008/12/20(土) 21:33:350675670
2008/12/20(土) 22:26:301.9.0最新(64bit)入れたけど動かず。1.9.1最新(32bit)入れてようやくRailsのインストールまで終わった。
落としたバイナリのzlibがだめなのかなと思ったが、疲れたから完璧ということにした。
0676デフォルトの名無しさん
2008/12/20(土) 22:40:31でもそんな根性のあるユーザーは嫌いじゃないぜ
0677デフォルトの名無しさん
2008/12/20(土) 22:48:29嫌いになる可能性しかないような気がするんだが
問題切り分けできない状態でなにが勉強か
0678デフォルトの名無しさん
2008/12/20(土) 23:46:21たぶん誰も助けてやることはできないだろうけど、がんばれ。
0679デフォルトの名無しさん
2008/12/21(日) 09:12:31とりあえずなんとかOctaveでテキスト形式に変換完了。
今延々回してるがかなり長くなりそうorz
0680デフォルトの名無しさん
2008/12/21(日) 09:35:390681デフォルトの名無しさん
2008/12/21(日) 12:18:43何をするかに依るが、簡単な数値計算には俺は使うよ。
一行で書いて答ポンと出す感じのコード。向いてると思う。
ちょっと入り組んでる計算(シミュレーション、微分方程式、FFT etc)
だと C++ で書くけど。
0682デフォルトの名無しさん
2008/12/21(日) 12:34:26むしろ問題なのは処理速度
0683デフォルトの名無しさん
2008/12/21(日) 12:35:450684デフォルトの名無しさん
2008/12/21(日) 14:07:22入り組んでいる計算なら
mathematicaとかmatlabのほうが向いてると思うね
簡単な計算ならlinuxについているbcが向いてる
0685デフォルトの名無しさん
2008/12/21(日) 14:09:340686デフォルトの名無しさん
2008/12/21(日) 14:10:340687デフォルトの名無しさん
2008/12/21(日) 14:29:33とは言え、代替物としてRubyを使うのもどうかとは思うが。
0688デフォルトの名無しさん
2008/12/21(日) 17:00:04riの生成に失敗しているようなのですが、これはどのように対処したもんでしょうか?
> gem install nokogiri
Successfully installed nokogiri-1.0.7-x86-mswin32-60
1 gem installed
Installing ri documentation for nokogiri-1.0.7-x86-mswin32-60...
ERROR: While executing gem ... (NoMethodError)
undefined method `new' for nil:NilClass
> ruby -v
uby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
0689デフォルトの名無しさん
2008/12/21(日) 17:31:48計算時間の見積もりが4日とかorz
256次元のベクトルの距離を頻繁に求めるので手間かかりすぎ。
ある1本と別の4000本との距離を求めるだけで45秒。
使ってるクラスはmatrixに入ってるVectorクラス。
0690デフォルトの名無しさん
2008/12/21(日) 19:55:22$ gem install --no-ri nokogiri
とりあえず。ちなみに gem help install で調べられる。
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]
gem 1.3.1
では問題は起きなかったっす。
0691デフォルトの名無しさん
2008/12/21(日) 21:08:15rdocもなんか失敗したので、これでいけました。
gem install --no-ri --no-rdoc nokogiri
ありがとう。
0692デフォルトの名無しさん
2008/12/21(日) 21:10:09HTMLファイルの一部を書き換えたいのですが、
nokogiriとか使うとパースや部分的なノード置換がすごく楽なのですが、
出力すると(to_html)元のHTMLがかなり崩れてしまいます。
元のHTMLをなるべく維持したい場合はどうしたらよいものでしょうか?
0693デフォルトの名無しさん
2008/12/21(日) 21:13:02HTML上の改行位置や空白数なんかも維持したい場合は正規表現で置換するしかないな
0694デフォルトの名無しさん
2008/12/21(日) 21:19:330695デフォルトの名無しさん
2008/12/21(日) 21:35:38なんていうか、マトモなCSSってどこかにない? vimやEmacsのハイライト意識したやつとか
RubyとHTMLのだけあればいいんだけど
あのRubyのとか酷過ぎるだろ常識的に考えて
0696デフォルトの名無しさん
2008/12/21(日) 21:42:02レスありがとう。
なるたけ維持したかったので、頑張って正規表現でgsubしてみました。
そんなに複雑じゃなかったのでなんとかなったみたいです。
お騒がせしました
0697デフォルトの名無しさん
2008/12/21(日) 22:03:17hoge
end
の 50 を a を Array として
for i in 1..(a.size)
としたらだめのようでした。
aのサイズだけ for を走らせたい場合、Ruby はどうするのがよいでしょうか?
0698デフォルトの名無しさん
2008/12/21(日) 22:07:31a.size.times { |i| p a[i] }
0699デフォルトの名無しさん
2008/12/21(日) 22:09:38a.each do |e|
p e
end
Ruby では for はまず使わない
0700デフォルトの名無しさん
2008/12/21(日) 22:10:35よのどのことがないかぎり、Rubyでは単純ループにforは使わないと慣習があるぞ
>>698 でよいかと思う
0701デフォルトの名無しさん
2008/12/21(日) 22:10:50a.each_with_index { |e, i|
}
0702デフォルトの名無しさん
2008/12/21(日) 22:11:320703デフォルトの名無しさん
2008/12/21(日) 22:13:40a の要素を使わない時は >>698 だっしょ。
a の要素を単に順番に使いたいだけの場合は >>699 で、
a の要素とそのインデックスを両方使いたい場合は >>701 だ。
0704デフォルトの名無しさん
2008/12/21(日) 22:17:21みなさま本当にありがとうです。
for をそもそも使わないのか・・・そもそも入門からおかしかったようです。
0705デフォルトの名無しさん
2008/12/21(日) 22:19:16範囲式に制限でもあるのか?
0706デフォルトの名無しさん
2008/12/21(日) 22:21:00配列にアクセスする部分で死んでるとか
0707デフォルトの名無しさん
2008/12/21(日) 22:23:1150番目の a[i] で nil の NoMethodError でも出てるのだろう
0708705
2008/12/21(日) 22:33:17まあこういうのを防ぐ為にもforは使わないってことだな。
0709デフォルトの名無しさん
2008/12/21(日) 23:14:47思い出せないようになってくる。
0710デフォルトの名無しさん
2008/12/21(日) 23:17:48freezeの意味ないやんってなるけど仕様変更で一か所だけ要素を変更する必要があります
freezeしているクラスと同じクラス内なので影響が他のクラスに及ぶことはありません
0711デフォルトの名無しさん
2008/12/21(日) 23:52:38「酷すぎる」って言ってるのが
syntax-*/data/ruby.css とかのことだったら、あれ以上のもので公開されてるのは多分ない。
0712デフォルトの名無しさん
2008/12/22(月) 00:08:51遅レスだが(というかなぜか今日は流れ速い)、俺がよく ruby 使うのは
簡単な計算でパラメータ変えて繰り返して使う式ですぐ答が欲しいときかな。
わざわざ Mathematica とか Maple, Maxima 立ち上げる気がしない程度のもの。
あと、これらでもプログラム書けるけど個人的には ruby の coding の方が好き。
3次方程式の解レベルの複雑さ。Ruby で端末でパラメータ入力して結果
すぐ帰ってくる。bc, とかではできない。多少複雑なら C++ で書いてる。
ruby は遅いし、書き捨て的に使ってるし、mma, maple, maxima とかでも
遅すぎることも多い。
0713デフォルトの名無しさん
2008/12/22(月) 00:45:33h = {:ary => [1]}.freeze # => {:ary=>[1]}
h[:ary][0] = 2
p h # =>{:ary=>[2]}
Hashオブジェクトをfreezeしてもその中にあるオブジェクトまでは
freezeされてないから、それを直接書き換えるとか。
これ、本来はfreezeの落とし穴だから気をつけて。
0714デフォルトの名無しさん
2008/12/22(月) 01:38:05h = {:ary => 1}.freeze
h[:ary] = 2
0715デフォルトの名無しさん
2008/12/22(月) 01:46:090716デフォルトの名無しさん
2008/12/22(月) 02:00:18と言いたいけど別のところに参照されちゃってるんだろうなぁ。
そもそもfreezeしてるコードをいじれるならfreezeやめれば
いいじゃんと思うんだけど、freezeしないといけない理由を詳しく。
0717デフォルトの名無しさん
2008/12/22(月) 03:08:37evil-ruby gemをインストールして h.unfreeze
0718デフォルトの名無しさん
2008/12/22(月) 06:52:25出来ないことはないけど、不可能と考えて別の方法を探すべきだと思われる
そもそも、freezeされてるってことはそれなりの理由があるんじゃないのか?
0719デフォルトの名無しさん
2008/12/22(月) 10:55:22びみょーに違うけど、こんなん(不完全だけど)をextendして
freezeを遅延させるとか…? やっぱ変だな
# 一箇所だけ変えたいところのキーは'hoge'決めうち
module HashLasyFreeze
def []=(key, val)
ret = super
freeze if key == 'hoge'
ret
end
end
0720デフォルトの名無しさん
2008/12/22(月) 15:28:52File::statしてatimeしたいのですが、サイトで公開されているページの最終更新時間など取得する場合どのようにすればいいのでしょうか。
0721デフォルトの名無しさん
2008/12/22(月) 15:33:54require 'net/http'
Net::HTTP.version_1_2
Net::HTTP.start('www.example.com', 80) {|http|
response = http.get('/index.html')
puts response['last-modified']
}
こんな感じ。
0722デフォルトの名無しさん
2008/12/22(月) 20:27:20デスクトップ(や他のアプリケーション上)に文字列を表示させるソフトを作りたいのですが、
それが可能なGUIツールキットってあるのでしょうか?
ググってみたところ、ウィンドウの半透明化ができれば可能そうだと思ったのですが、
それが可能なツールキットを探すことができませんでした。
ご存知の方いらっしゃれば教えてください。
0723デフォルトの名無しさん
2008/12/22(月) 20:37:03Rubyでやるこっちゃないねえ
他のC#とかで作れるようになってからその知識を流用してRuby+GUIでやれ
95パーセントくらいRuby無関係だし
0724デフォルトの名無しさん
2008/12/22(月) 20:40:410725デフォルトの名無しさん
2008/12/22(月) 20:51:05def getWindowLong(hwnd, index)
api = Win32API.new('user32', 'GetWindowLong', 'LL', 'L')
return api.call(hwnd, index)
end
def setWindowLong(hwnd, index, gwl)
api = Win32API.new('user32', 'SetWindowLong', 'LLL', 'L')
return api.call(hwnd, index, gwl)
end
def setLayeredWindowAttributes(hwnd, crkey, alpha, flags)
api = Win32API.new('user32', 'SetLayeredWindowAttributes', 'LLLL', 'L')
return api.call(hwnd, crkey, alpha, flags)
end
gwl = getWindowLong(hwnd, GWL_EXSTYLE)
gwl &= ~WS_EX_LAYERED
gwl |= ((ratio != 100) ? WS_EX_LAYERED : 0)
gwl &= ~WS_EX_TRANSPARENT
gwl |= (transparent ? WS_EX_TRANSPARENT : 0)
setWindowLong(hwnd, GWL_EXSTYLE, gwl)
setLayeredWindowAttributes(hwnd, (ckey ? color : 0),
((255 * ratio) / 100), (LWA_ALPHA | (ckey ? LWA_COLORKEY : 0))
)
0726デフォルトの名無しさん
2008/12/22(月) 20:55:22WS_EX_LAYERED = 0x00080000
WS_EX_TRANSPARENT = 0x00000020
LWA_COLORKEY = 0x00000001
LWA_ALPHA = 0x00000002
0727デフォルトの名無しさん
2008/12/22(月) 20:56:50うむ、95パーセントくらいRuby無関係だな
0728722
2008/12/22(月) 21:11:41レスありがとうございます。試してみます!
>>723,727
既存のrubyプログラムの処理結果をデスクトップに書きたかったんです。
rubyでどう頑張ってもダメならC#覚えるつもりでした。助言ありがとうございます。
0729デフォルトの名無しさん
2008/12/22(月) 21:33:18a=b=c=d=Array.new
とかやったら、全部が同じオブジェクトを指してしまうという大惨事に見舞われました。
Cとかなら int a=b=c=d=0;
とか書いて複数の変数の生成・初期化が問題なく行われるんですが、rubyでこれをやると
同じオブジェクトが参照されてしまうのってどうなんですか?
0730デフォルトの名無しさん
2008/12/22(月) 21:37:50だってそれは初期化でもなんでもなく、単に同じオブジェクトを指すように指示してるだけだもの
そのオブジェクト内容が変化すれば全部が変化するというそんだけの話
オブジェクトという考え方をRubyでは無視せんでくれ
a = Array.new
b = Array.new
c = Array.new
d = Array.new
こうだな
Arrayオブジェクトを生成する使い方をしてるならArray.newではなくnilでもいいかも
0731デフォルトの名無しさん
2008/12/22(月) 21:38:460732デフォルトの名無しさん
2008/12/22(月) 21:46:33Array.newが一度しか実行されなければ、Arrayのオブジェクトは一つしか生成されない
って見方もできるかと
0733デフォルトの名無しさん
2008/12/22(月) 21:47:270734デフォルトの名無しさん
2008/12/22(月) 21:50:15>>729
Ruby は代入文も値を返す
a=b=c=d=Array.new
は
d=Array.new
c=d
b=c
a=b
と全く同じだ
a が b=c=d= を「透過して」 Array.new を起動することはない
0735デフォルトの名無しさん
2008/12/22(月) 21:54:50たとえば、100個のオブジェクトを生成・初期化したいときには、
a1=Array.new
a2=Array.new
・
・
・
a99=Array.new
a100=Array.new
って書かなきゃだめなの?
a自体をarrayにしろと言われそうだけど、多数のオブジェクトを生成・初期化したい場合は
一行に一個書くしかないの?
0736デフォルトの名無しさん
2008/12/22(月) 21:56:010737デフォルトの名無しさん
2008/12/22(月) 21:56:46a.each { |b| b = Array.new }
0738735
2008/12/22(月) 22:00:14Rubyだけですむ話ではなさそうだ。すまん。このスレからは消えることにする。
0739デフォルトの名無しさん
2008/12/22(月) 22:09:53a2=Array.new
・
・
・
a99=Array.new
a100=Array.new
まじでこういうソース見たことあるよ
某上場電気メーカーのソフトウェア部門で
0740デフォルトの名無しさん
2008/12/22(月) 22:13:20わかります
0741デフォルトの名無しさん
2008/12/22(月) 22:30:431.9だと外側のbindingをevalに渡す必要があったりするのかな。
0742デフォルトの名無しさん
2008/12/23(火) 00:30:25その文って、Cで書くとすれば
int array[] = {3,4,7,2,9,1};
int *a,*b,*c,*d;
a=b=c=d=array;
みたいな感じでは?だからCでも全部同じ配列を指してしまうのは変わりないよ
Rubyでも、Fixnum同士ならその代入でも問題は起こらん
違うのは構造体やクラスから生成した、実体同士の代入ってのがRubyに無いことかな
0743デフォルトの名無しさん
2008/12/23(火) 02:50:57で、ディレクトリを含まないリストを得るにはどうやったら良いのでしょうか?
0744デフォルトの名無しさん
2008/12/23(火) 02:54:550745デフォルトの名無しさん
2008/12/23(火) 02:59:040746デフォルトの名無しさん
2008/12/23(火) 03:04:57かな。ちなみに "./" は不要。
0747デフォルトの名無しさん
2008/12/23(火) 03:18:27500 Internal Server Errorして落ちてしまうのですが、
タグ内で異様にスペースがやたらあるような文字列にscanすると異様に負荷がかかるとか聞いたことありませんか?
0748デフォルトの名無しさん
2008/12/23(火) 04:40:50なるほど。ディレクトリ判定を入れればいいのですね。ありがとうございます。
0749デフォルトの名無しさん
2008/12/23(火) 06:41:46Ruby自体はHTTPのエラーを出さない
それは、サーバが実行したコマンドが正規の出力をしなかったという意味しか持たないよ
原因を知りたかったら勝手な推測は止めて、その正規ではない出力が何かを調べる
コマンドラインから実行すれば一発だが、どうせコマンドラインから実行できないんだろうから、スクリプト内の実行部分を
begin
rescue Exception => e
File.open('/自分のディレクトリ/error.txt', 'w'){|f| f.print(e)}
end
で囲んでRubyの出す例外出力を読め
0750デフォルトの名無しさん
2008/12/23(火) 07:43:45wikiみろ
0751750
2008/12/23(火) 07:44:160752デフォルトの名無しさん
2008/12/23(火) 08:30:59require 'jcode'
$KCODE='SJIS'
str = 'aあいbうえおc'
上記のような時に2文字目までを切り出したいんですが、
「str[0, 2]」では2バイト目までということになってしまいます。
下記のような冗長なやり方しか思いつかないのですが、もっとスマートなやり方はないでしょうか?
jcodeのリファレンスマニュアルを見てみたのですが使えそうなものが見つかりませんでした。
i = 0
str_part = ""
str.each_char do |x|
str_part += x if i < 2
i += 1
end
0753デフォルトの名無しさん
2008/12/23(火) 08:41:38str.split('')[0,2]*''
0754デフォルトの名無しさん
2008/12/23(火) 08:50:160755デフォルトの名無しさん
2008/12/23(火) 09:18:232文字目だけでいいときは
もったいない
0756デフォルトの名無しさん
2008/12/23(火) 10:06:48偏差なのか、相関係数なのか?
スレチですかね・・・・
0757デフォルトの名無しさん
2008/12/23(火) 10:23:04配列の要素にアクセスする方法はRubyだな
0758デフォルトの名無しさん
2008/12/23(火) 10:26:200759デフォルトの名無しさん
2008/12/23(火) 10:33:02具体例を出してみれば?
じゃないと他の人にはわからん
0760デフォルトの名無しさん
2008/12/23(火) 10:37:29[16, 8, 4, 2]
の二つの類似度は 100% です
0761デフォルトの名無しさん
2008/12/23(火) 10:51:47いろいろある。逆に定義が無ければ何したいのかわからん。
偏差でも相関係数でも変数のタイプでも良いが。
0762デフォルトの名無しさん
2008/12/23(火) 10:56:24もう何年も使ってるけど相変わらず配列にデータ突っ込んで
forかeachでまわしてみたいなBASICと大差ないコードしか書いてないw
0763デフォルトの名無しさん
2008/12/23(火) 11:02:18なぜそれが類似度100% ?
0764デフォルトの名無しさん
2008/12/23(火) 11:03:270765デフォルトの名無しさん
2008/12/23(火) 11:04:53計算式を持ってきてRubyでの実装方法を聞くとかなら手伝う人が出るかも
計算式の出し方そのものは知らん
教科書なり論文なり読め
0766デフォルトの名無しさん
2008/12/23(火) 11:19:07Ruby Explorer で、[Run as]->[Ruby Application] を選択すれば実行できるのですが、
これを、コードを編集するウインドウがアクティブな時に、キーボードショートカットで
実行する方法はないでしょうか?
キー割り当てで、[Run Ruby Application] に Binding [F5] When [In Windows] もしくは
[Ruby Editor]で割り当てても反応なしでした。
Eclipse のバージョンは 3.4.1
RDT は 1.1.0.200812081651NGT です。
0767デフォルトの名無しさん
2008/12/23(火) 11:20:220768デフォルトの名無しさん
2008/12/23(火) 13:37:32自機でやるとエラー吐かないのに、鯖で動かすと特定の文字列を含むファイルだけ
500エラー吐くですよね。テストした結果scanで100パー落ちていましたし。
でも他のファイルなら普通に鯖でも動いている点から見て、作りが悪いのではなくて特定の文字が含まれてるファイルに対してscanの処理がいように重くなったことによる、
負荷の掛かりすぎて500なのではないかと。
>>749さんの方法も含めつつindexで処理する方法に切り替えや、怪しい文字列の置き換えなど施して処理するなどの方法をやってみたいと思います。
ありがとうございました。
0769768
2008/12/23(火) 13:47:40scanに比べて負荷が緩やかなんでしょうかindex。
0770デフォルトの名無しさん
2008/12/23(火) 14:00:560771デフォルトの名無しさん
2008/12/23(火) 17:54:550772デフォルトの名無しさん
2008/12/23(火) 18:12:340773デフォルトの名無しさん
2008/12/23(火) 18:28:46できるよ。
以上。
はい次の方。
0774デフォルトの名無しさん
2008/12/23(火) 19:06:53「ローカルファイルを読み込んで、書いてあるデータを変数とかに取り込むクラス」があります。
変数は外部からそれなりの頻度で参照されますが負荷とかは無視して結構です。
class HogeFile
def initialize(path)
@path = path ...
end
attr_reader :mtime, data2, ...
def parse
file = File.read(@path)
@mtime = File.stat(@path).mtime
@data1 = file.scan(/.../)
end
end
という、HogeFile.new.parse が必要なタイプと
class HogeFile
def initialize(path)
@path = path
@data = File.read(@path)
end
def mtime; @mtime ||= File.stat(@path).mtime; end
def data1; @data1 ||= @file.scan(/.../); end
end
という、なんというか遅延評価?っぽいのって、どっちをメインに使っていくのがいいもんでしょか。
こういうデータクラスってけっこう作るんですよね。
0775デフォルトの名無しさん
2008/12/23(火) 19:13:25変数をまとめてPStoreとかに保存する可能性があるとかいう場合も前者
っていうか基本は前者
data4 くらいで超ごっつい正規表現処理があって処理の流れが一瞬止まるとかいうことがあるなら後者がいいかも
ネットからファイルを適宜取得するタイプのライブラリでは後者を時々見るな
考え方のベースとなるものは君の言う通り遅延評価だ
それが有効かどうかだけで決めちゃっていいと思う
あるいはカッコイイかどうかだけでもいい
(この場合ほぼ全ての自作スクリプトで後者になって、2年くらいして見返して「あーこの頃は遅延評価時代だー」とか懐かしむことになる)
0776デフォルトの名無しさん
2008/12/23(火) 19:37:02それは別のクラスでやって、結果だけをアクセサ経由でデータクラスに登録しろ
0777デフォルトの名無しさん
2008/12/23(火) 20:00:17えー
めんどい
0778デフォルトの名無しさん
2008/12/23(火) 21:05:40その環境かかないとよくわからんぞ
共有レンタルサーバーなら負荷掛けるとかってに落とすところもある。
見れるならerror_logは最低みとかないとな
いや多分、個別の環境かかれても俺はなんともいえんと思うけどw
0779デフォルトの名無しさん
2008/12/23(火) 21:11:45主張の理由kwsk
0780デフォルトの名無しさん
2008/12/23(火) 21:18:50めんどくさいからやんねーというのも反論そのまんまだ
0781デフォルトの名無しさん
2008/12/23(火) 21:27:090782デフォルトの名無しさん
2008/12/23(火) 21:30:16他人に迷惑をかけないという意味でね。
0783デフォルトの名無しさん
2008/12/23(火) 23:02:540784デフォルトの名無しさん
2008/12/23(火) 23:08:058〜9年前は普通にノートパソコンで使ってたぜ・・・。
0785デフォルトの名無しさん
2008/12/23(火) 23:25:22agent = WWW::Mechanize.new
agent.get(url)
form0 = agent.page.forms[0]
form1 = agent.page.forms.name('form1')
form0.name == form1.name #=>true
form0 == form1 #=>false
となります。
form0とform1とは同じものを参照していると思ってたのですが,
どんな違いがあるのですか?
form0.action = 'hogehoge'はうまくいくのに
form1.action = 'hogehoge'はエラーになるので疑問が生じました。
0786デフォルトの名無しさん
2008/12/23(火) 23:33:45うちの自宅サーバ、その頃のノートPCだったりする。(Pentium133MHz、メモリ40MB)
RubyのCGIが、起動するだけで4秒かかるよ!! 動き始めるとそんなに遅くないんだけどな……。
0787デフォルトの名無しさん
2008/12/23(火) 23:40:24form1は WWW::Mechanize::List だから、= を使った代入は行えない
form1.action は form1[0].action の返り値、すなわち action 属性の文字列を返す
ttp://d.hatena.ne.jp/kitamomonga/20080402/ruby_www_mechanize_list#www_mechanize_list__method_missing
form1.action = 'hogehoge' は文字列に代入するという奇妙なことになっているだけ
0788デフォルトの名無しさん
2008/12/23(火) 23:48:58WWW::Mechanize::List は最新版 0.9.0 では削除されてる
agent.page.forms.name('form1') と書いたら NoMethodError で動作しない
Mechanize のバージョンが 0.8.5 かそれ以降なら form_with が使えるよ
それより古いなら、name に限っては agent.page.form('form1') がフォームオブジェクトを返すほぼ同じ動作をする
form0 == form1 を true にしたいなら、List からフォームオブジェクトを取り出して比較してくれ
form1[0] が WWW::Mechanize::Form クラスのオブジェクトを返して form0 と同じもののはず
0789デフォルトの名無しさん
2008/12/24(水) 00:04:55> どんな違いがあるのですか?
「agent.page.forms[0] は WWW::Mechanize::Form クラスのオブジェクトを返しているが、
agent.page.forms.name('form1') は WWW::Mechanize::List クラスのオブジェクトを返してる」
が回答でございます
だから、
form1 = agent.page.forms.name('form1')[0]
と、List 内の要素を明示的に取り出さないと、WWW::Mechanize::Form オブジェクトそのものにはならないよ
「クラスのメソッドは Object#send で動作するし、返り値も普通に返ってくるけど、目的のクラスのオブジェクトではない」という変な状態
抽出作業が完了したら [0] をつけて特定する癖をつけておかないと、今みたいに変なとこで詰まったりするぞ
0790デフォルトの名無しさん
2008/12/24(水) 00:19:13rubygems は鬼のように重いけど
0791デフォルトの名無しさん
2008/12/24(水) 00:22:34…このサイト作った奴バカだろ
せいぜい中堅どころのライブラリのメソッド全解説とか何が楽しいんだよ
0792デフォルトの名無しさん
2008/12/24(水) 00:29:41現在のRubyはそのような
「こんなことまでわざわざ書く理由って何よ?」
という人の努力によってなんとかうまく支えられております
マニュアル書く人しかり、丁寧な導入記事書く人しかり
0793デフォルトの名無しさん
2008/12/24(水) 00:49:24真意は知らないけど個人的感想としては、mechanizeのライブラリ構造も
単純ではないしRubyの勉強方法として良い手だと思った。
「理解した(自称)」以上に理解が進んでないと説明することなんて
できないんだよなぁ・・・。説明してる内に薄っぺらさが露呈する。
告白デバッグが気付かせてくれるのはまさにそれ。
0794デフォルトの名無しさん
2008/12/24(水) 00:58:310795デフォルトの名無しさん
2008/12/24(水) 03:08:36Keyはentry_1->entry_nまででvalueは単語数とか他で計算した値を入れようと思うのですが.
0796デフォルトの名無しさん
2008/12/24(水) 03:27:22いつのまに・・・
0797デフォルトの名無しさん
2008/12/24(水) 05:57:55ruby script\generate controller main index
を実行したのみのプロジェクトでRubyのテストをしています.
webrickを起動して
http://localhost:3000/
のhtmlページは,問題なく表示するのですが
http://localhost:3000/main
でindexページを見ようとすると
1度目は正常に表示されますが,
更新ボタン(もしくは,アドレスバーの移動ボタン)を押すとWebrickが次のようなエラーを出して終了していしまいます.
127.0.0.1 - - [24/Dec/2008:05:44:28 東京 (標準時)] "GET /main HTTP/1.1" 200 283
- -> /main
127.0.0.1 - - [24/Dec/2008:05:44:33 東京 (標準時)] "GET /main HTTP/1.1" 200 283
- -> /main
C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/mysql_adapter.rb:196: [BUG] Segmentation fault
ruby 1.8.6 (2007-09-24) [i386-mswin32]
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
ひとつ目の-->/mainが移動時,ふたつ目が更新時です
どのように対応すればいいでしょうか.
0798デフォルトの名無しさん
2008/12/24(水) 07:21:44search メソッドの返り値は Hpricot::Elements で、配列のような動作をするっていうか配列でできることは全部できる
これに詰まってる要素に当たるものは Hpricot::Elem だ
Hpricot::Elem にはタグに囲まれてる文字列を適当に返す inner_text メソッドや
HTMLで整形して返す inner_html メソッドがあるし、
Hpricot::Elem オブジェクトから search でさらに探すこともできる
それ以上のもんではないので、普通にどうにかして作れ
0799デフォルトの名無しさん
2008/12/24(水) 08:43:05[BUG]と出た場合、Rubyのスクリプトレベルの誤りではないので、
開発サイドに再現コードを教えるくらいしかできることはない。
0800デフォルトの名無しさん
2008/12/24(水) 08:49:16回避できるものもあるけど
0801デフォルトの名無しさん
2008/12/24(水) 09:45:550802デフォルトの名無しさん
2008/12/24(水) 10:59:53ruby1.8にて、ptyとexpectモジュールで、自動sshログインをしようとしているのですが。
cygwin上では、問題なく動かせるものの。
solaris(free10)では、spawn('ssh ***.***.**')の所で
> open: pty slave: No such file or directory
とでてしまいます。
このspawnの内部をsshのフルパス指定にしたり、lsなど他のコマンドに代えても同じでした。
どうもptyモジュールが上手く動かせてないと考えているのですが。。。
特にptyにはパラメータはなさそうです。
ptyがやろうとしてる仮想tty?という処理がなんなのかが理解できてない....
すみません、どなたか動かすヒントだけでも教えてください。
0803デフォルトの名無しさん
2008/12/24(水) 11:18:49Solarisスレで聞く
0804797
2008/12/24(水) 13:03:37こちらの環境が悪いんじゃなくて
Ruby(もしくはRails)開発側が悪いってことでしょうか?
手書きでは,まだコードを一行も書いていないので
そんなことないと思いたいのですが...
Rubyのダウングレードとかで対応できないか今夜にでもやってみます...
0805デフォルトの名無しさん
2008/12/24(水) 13:22:51まずは1.8.7-p72のか、せめて1.8.6の一番新しいp287を試してみるべき。
http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.html
one-click installer使ってるんだろうけどこの際我慢。
0806802
2008/12/24(水) 14:13:10なにかヒントがないかとざっと眺めると、 ./ext/pty を発見。
ダメ元でpty.c をのぞいて、問題点を探してみると、
どうも"TIOCSCTTY "の定義が無い事がまずいんじゃないかと推測。
この情報を元にググってみると
去年の8月、ruby-lang に "Bug in ruby extension" というスレを発見
> I noticed that Solaris 10 does not support TIOCSCTTY so in function
> establishShell() the child process closes the slave device and reopens it to ...
どうやらSolaris 10 において、ptyの問題が指摘されている模様。
TIOCSCTTY がキーワードみたいだが。 私では何がまずいか理解できない(汗)
このスレで問題対応パッチが登場し、最後にmatzさんが"そのパッチをコミットしてくれー"と書いている。
これが今回の私の問題点と同じであるなら、最新版なら動くはずじゃん。と思い・・・.
あ、でも、1.8.7-p27 が 1.8系の最新版ですよねぇ。
うぐぐ、この問題と関係がないのかなあ。。。。(´・ω・`)ショボーン
>803
レスサンクス。
推測通りsolarisの環境がらみの問題なら、海外で聞いた方がよさそうですね。
英語で聞くのは閾が高いなあ...(´・ω・`)
0807802
2008/12/24(水) 14:14:57s/1.8.7-p27/1.8.7-p72/
0808デフォルトの名無しさん
2008/12/24(水) 15:34:50Passenger入れろw
っていうほどのメモリもないみたいだがwww
0809デフォルトの名無しさん
2008/12/24(水) 16:20:13<form action="" method="post">
<input type="text" name="server" value="#{server}" />
<input type="text" name="name" value="#{name}" />
<input type="submit" value="更新" />
</form>
それも同じ形式のフォームを何個か繰り返しおいて、しかもその個数も可変にしたいと思っています。
さらにそのデータは pstore に保存したいと思っています。
古い CGI での方法ならば変数名 server などに番号をつけて server1, server2 などという変数名として
ループで 1..max をまわして処理するというのが思いつくのですが、Ruby 的にエレガントな方法はあるのでしょうか?
配列やハッシュなどを使ってスマートに書く方法があったら教えていただけませんでしょうか。
0810デフォルトの名無しさん
2008/12/24(水) 17:50:420811797
2008/12/25(木) 00:36:49どちらをインストールしてみても結果は一緒でした...
これってRuby開発者側に伝えた方がいいのでしょうか
うちの環境のみの再現だと思うのですが...
0812デフォルトの名無しさん
2008/12/25(木) 01:18:370813デフォルトの名無しさん
2008/12/25(木) 05:11:00hpricotやNokogiriで指定しようにも複数のページでXPATHのaの順番が違っていて取得できません。
0814813
2008/12/25(木) 05:36:00doc/"a[text()*='ABC']"でできますね。
Hpricotとかをtagやセレクタでぐるぐる回すものだと勘違いしてました。
お騒がせしました。
0815デフォルトの名無しさん
2008/12/25(木) 06:04:46自分のコードかデータにバグを引き起こす原因があるとは思わないの?
0816デフォルトの名無しさん
2008/12/25(木) 06:44:34http://pc11.2ch.net/test/read.cgi/tech/1227123021/l50
0817デフォルトの名無しさん
2008/12/25(木) 06:51:44とりあえず該当の行を見て、まずどこて落ちたのかを調べるべき
それでも本体のバグっぽかったら諦めて報告
>>809
本題とは関係ないけど、CGIアプリケーションでPStore使うのはオススメしない
rubyのバージョンが古くなるとデータ読めないことがあるから
自分しか使わないスクリプトなら問題はないけど
今ならYAML::Storeオススメ
0818デフォルトの名無しさん
2008/12/25(木) 13:26:33hiddenを入れて対処できました。ありがとうございました。
>>817
そうなんですね。YAML::Store に書き換えておきました。ありがとうございました。
0819デフォルトの名無しさん
2008/12/25(木) 13:59:37>>797見てそう思う方がおかしくないか?w
でもmysql環境を見直してみる価値はありそう。
0820デフォルトの名無しさん
2008/12/25(木) 15:36:57uninitialized constant StanderdError (NameError)
こんなメッセージが出てプログラムが途中で止まることがあるですけど、これって何が原因なんでしょうか。
0821デフォルトの名無しさん
2008/12/25(木) 15:38:47>StanderdError
StandardErrorと書いたつもりのどっかでスペルミスしてる。
0822デフォルトの名無しさん
2008/12/25(木) 15:45:45class MyHogeError < StanderdError
end
とか書いてあるんだな
がっちょわるー
>>820
使ってる外部ライブラリの中から「StanderdError」という文字列を探して「StandardError」に直接書き換えとく
0823デフォルトの名無しさん
2008/12/25(木) 15:51:11これをあまり心配してない俺
その時になってから過去のバージョンの pstore で読んで、新しいバージョンの pstore で書き出せばよくね?
PStore を YAML で置き換えて常用するなんてブルジョワジョワジョワに過ぎるだろ
0824デフォルトの名無しさん
2008/12/25(木) 15:57:22ファイルが数KB程度で収まるなら読みやすいYAMLのほうがよかろう
なんかよくわからん大量のデータの数百KBを読み書きしまーすというのならさすがにちょっと
うっかり画像を保存したことがあるが遅くて死んだ
0825デフォルトの名無しさん
2008/12/25(木) 16:06:11ちょっとしたデータのシリアライズにはyaml/storeがお気に入り。
0826デフォルトの名無しさん
2008/12/25(木) 16:09:07用途に応じて使って適宜バックアップだの負荷測定だのしなきゃならん
0827デフォルトの名無しさん
2008/12/25(木) 16:15:51ガイドみたいなのがあるといいよね
ってるびまにあるのか
0828797
2008/12/25(木) 16:26:27mysql関係ですか,
とりあえず今夜は,sqliteで同じように実装してから
再現確認してみます.
0829デフォルトの名無しさん
2008/12/25(木) 16:51:39>>822
begin
open("http://*****")
rescue Timeout::Error
rescue StanderdError <<<<<某プログからのコピペまんま
rescue EOFErro
rescue Exception
rescue NameError
end
こんな感じで例外関係の対処法ググっては追加していた中で某ブログからコピペしたものが、
スペルミスしていたとは..。
即回答ありがとうございました。実は昨日からハマってました。
0830デフォルトの名無しさん
2008/12/25(木) 17:05:59コピペうんぬんより、エラーメッセージを*よく*見て原因を考えるクセをつけようぜ!
0831デフォルトの名無しさん
2008/12/25(木) 22:03:260832デフォルトの名無しさん
2008/12/25(木) 22:24:030833デフォルトの名無しさん
2008/12/25(木) 22:26:470834デフォルトの名無しさん
2008/12/25(木) 22:39:08位置的に初学者本の次くらいなんじゃねーかとは言われてないわけでもないが
0835デフォルトの名無しさん
2008/12/25(木) 22:46:05Rubyで作る奇妙なプログラミング言語 〜Esoteric Language〜
ttp://www.amazon.co.jp/dp/4839927847/
> 1-2 サンプルプログラムに特化した言語、HQ9+
> HQ9+とは
> HQ9+インタプリタを作ってみよう
> 1-3 8つの命令ですべてを記述する言語、Brainf*ck
> 1-4 決して印刷できない言語、Whitespace
> 2 Esoteric Languageを作る
> Esoteric Languageの設計と実装
> Starry言語の設計
> 付録 Esoteric Language傑作選
> Befunge、 Wierd、Shakespeare、Chef、Unlambda、Grass
> False、NULL、AAAAAAAAAAAAAA!!!!、INTERCAL、Malbolge、KEMURI、Taxi
0836デフォルトの名無しさん
2008/12/25(木) 23:09:53...GRASS、無いのかw
0837デフォルトの名無しさん
2008/12/25(木) 23:15:39GrassとGRASSは違う言語?
0838デフォルトの名無しさん
2008/12/25(木) 23:27:350839デフォルトの名無しさん
2008/12/25(木) 23:34:551.9.1のリリースが迫って書籍もまた出てきそうだな。
0840デフォルトの名無しさん
2008/12/26(金) 01:05:48解析させるデータ数が多いとか相互参照が多いときとかですかね?
0841デフォルトの名無しさん
2008/12/26(金) 01:11:04どういう時にリレーショナルデータベースを使うか、という質問?
0842797
2008/12/26(金) 05:53:14原因はいまだにわかりませんが
Railsのヴァージョンを
2.2.2 -> 2.1.2
へとダウングレードすることで正常動作するようになりました.
mysql postgres sqlite3
と三つ試しても同じ結果だったので,
諦めかけてましたが,
友人が作ったv2.1.2のプロジェクトを実行したとき
偶然うまくいったのがきっかけでした
0843デフォルトの名無しさん
2008/12/26(金) 11:31:16Rubyの「メモリ内でのハッシュ構造+ディスク上でのPStoreのようなもの」ではどうにもならない場合
具体的には>>841
0844デフォルトの名無しさん
2008/12/26(金) 12:35:59オブジェクトのままシリアライズした方が良い場合も結構ある
後者だと単純にSQLに置き換えるって訳には
0845デフォルトの名無しさん
2008/12/26(金) 23:20:20url = "http://bit.sikkou.jp/servlet/xxw.XxWServlet?O_sale_unit_id=00000006772&O_court_cd=31131&O_thing_cls=2&O_tender_flg=1&PAGEID=XxW04_jp_0130&ACTION=anchor"
doc = Nokogiri::HTML(open(url))
puts doc.xpath('//b[text()="公告日"]')
「<b>公告日</b>」になるはずなのだが,
結果は空白(要するに検索できてない)
エンコードの問題でしょうか?
ちなみにスクリプト自体はUTF-8です。
0846デフォルトの名無しさん
2008/12/26(金) 23:25:17あ〜、これは誰かがどっかで説明しないといけないんだけど、Nokogiri.new は実は引数を3つとるんだよ
第3引数は文字列の文字エンコードを書く
doc = Nokogiri::HTML(open(url), nil, 'SHIFT_JIS')
って書いてみ
0847845
2008/12/26(金) 23:47:25お〜、そうでしたか。
一応、RDocのRead Meを参考にしたのだが,,,
さんくすです。
0848デフォルトの名無しさん
2008/12/27(土) 11:12:05それってオラ本(米)の翻訳? 旧版なんてあったの?
0849デフォルトの名無しさん
2008/12/27(土) 15:00:57すまん。オームのサイトで見つけたもんだから「プログラミングRuby 第○版」と間違えた。
あっちも1.9系で次版を出すみたいだから。
0850デフォルトの名無しさん
2008/12/27(土) 16:26:07オブジェクト指向スクリプト言語 Ruby、だったか。
今確認するまであれの2版が出るのかと思ってた。
0851デフォルトの名無しさん
2008/12/27(土) 16:29:520852デフォルトの名無しさん
2008/12/27(土) 20:52:59あるのに比べりゃマシだろう。
0853デフォルトの名無しさん
2008/12/27(土) 20:59:030854デフォルトの名無しさん
2008/12/27(土) 21:26:010855デフォルトの名無しさん
2008/12/27(土) 21:33:39徹夜3日目
0856デフォルトの名無しさん
2008/12/27(土) 21:57:350857デフォルトの名無しさん
2008/12/28(日) 00:26:50わかっててその突っ込みなのか? ><
Amazon.co.jp: はじめてのPython (I・O BOOKS)
http://www.amazon.co.jp/dp/4777513211/
Amazon.co.jp: 初めてのPython
http://www.amazon.co.jp/dp/487311022X
の二つだよ。
0858東日本かわいいものを集める会 会長
2008/12/28(日) 00:44:25オライリー本も表紙を見て、買う気がうせる。
他方、Ruby は名前で得している。
0859デフォルトの名無しさん
2008/12/28(日) 01:15:13見かけという意味では Python は indentation に意味を持たせるという
ところも損してるな。今時の他の言語を使ってる人からすると、ちょっと
敷居が高くなる。Ruby は特に多言語の経験がある人に始めやすいところで得してる。
0860デフォルトの名無しさん
2008/12/28(日) 01:17:15amazonのレビューがやたら高評価なので期待してる
設計者が著者の一人ってことで、やっぱりバイブル扱いされるのだろうか
0861デフォルトの名無しさん
2008/12/28(日) 01:20:53> 見かけという意味では Python は indentation に意味を持たせるという
> ところも損してるな。
これは初学者向けの言語と言う意味では利点だと思うのだが。これでちゃんとインデントを打てるようになると、他の言語にいっても大丈夫だし。
0862デフォルトの名無しさん
2008/12/28(日) 01:37:54どうせインデントが無いとロクに読めないのに、
強制されるのは嫌という意見は意外なほど多い
そういえば、Lispのカッコ山盛りも見た目で損してるような
初めはうげぇだったが、慣れると意外に快適だった
0863デフォルトの名無しさん
2008/12/28(日) 02:11:290864デフォルトの名無しさん
2008/12/28(日) 02:25:18> そういえば、Lispのカッコ山盛りも見た目で損してるような
開き括弧はともかく、閉じ括弧の連続を見て抵抗感持つのは誤解だよね。
Lispコードの閉じ括弧は基本的には「見ないもの」で、
だからああやってまとめて、視覚的な存在感を少しでも小さくしようとするわけで。
0865デフォルトの名無しさん
2008/12/28(日) 02:34:34「見ないもの」 ということになかなか気付かないよね。
俺は実際に書いてみて分かった。
0866デフォルトの名無しさん
2008/12/28(日) 02:41:480867デフォルトの名無しさん
2008/12/28(日) 02:47:510868東日本かわいいものを集める会 会長
2008/12/28(日) 03:03:510869デフォルトの名無しさん
2008/12/28(日) 08:11:17あ、了解。同じとこで扱ってるのが似たタイトルだと紛らわしいね。
もう予定が出てる『プログラミング言語 Ruby』の訳者が長尾高弘氏になってるけど、
『The Art of UNIX Programming』読んだ印象はあまり良くないなあ。直訳調すぎて
この人ちゃんと内容理解して書いてんのかな?みたいな。
ところでオーム社のページ、『初めてのRuby』の著者のYugui氏の名前が間違って
るね。
0870デフォルトの名無しさん
2008/12/28(日) 09:00:27長尾氏の本はペゾルト本を原著と比べてみたことがあるけど、
至って素直な訳だった。少なくとも日本語になってない
直訳調ではなかったので俺的には全然OK。
0871869
2008/12/28(日) 09:05:21いっそのことmatzが訳せば良かったのに、と無茶言ってみるテスト。
"Programming Ruby: The Pragmatic Programmers' Guide" 3rd edは
2009年3月らしい。
0872デフォルトの名無しさん
2008/12/28(日) 09:35:16たぶんCOBOLを連想してるんでしょ
1文字目から6文字目が行識別で7文字目が行タイプで8文字目から11文字目が
A領域で12文字目から72文字目がB領域で73文字目以降は無視されるとか
はっきり言っていちいち覚えてられない。どれがA領域でどれがB領域だか
分からないと作業にならない。まあ、Pythonはまだ穏やかだからましだけど。
0873デフォルトの名無しさん
2008/12/28(日) 09:55:24どんなに素晴らしいかと思ったり。後者は全否定されそうだが。
0874デフォルトの名無しさん
2008/12/28(日) 10:17:26http://pc11.2ch.net/test/read.cgi/tech/1169473442/l50
0875デフォルトの名無しさん
2008/12/28(日) 10:52:13たしかFORTRANはそうだったけどCOBOLもおなじなの?
0876デフォルトの名無しさん
2008/12/28(日) 10:59:35(defun factorial (n)
(if (<= n 1)
1
(* n (factorial (- n 1)))))
が
(defun factorial (n)
(if (<= n 1)
1
(* n (factorial (- n 1))
でも動く
0877デフォルトの名無しさん
2008/12/28(日) 11:30:50俺は賛成側に回るぞ。
0878デフォルトの名無しさん
2008/12/28(日) 11:32:360879デフォルトの名無しさん
2008/12/28(日) 11:34:040880デフォルトの名無しさん
2008/12/28(日) 12:12:23そうかぁ? 個人的な感想は、他の言語とそう変わらんな、だったんだが。
0881デフォルトの名無しさん
2008/12/28(日) 13:34:43一応ソース
COBOL入門 東海大学出版会出版 西尾 出監修 1988年 ISBN4-486-01004-3
この本の50ページから54ページ
0882デフォルトの名無しさん
2008/12/28(日) 13:37:05すぐに参照できないのは(少なくとも2ちゃんでは)ソースとは言わない
0883デフォルトの名無しさん
2008/12/28(日) 13:40:19その世界の中ではどんなマトモな本もソースにならないんだよな
0884デフォルトの名無しさん
2008/12/28(日) 13:44:50四六時中ネットに張り付いている無能な俺でも
さすがにそれはないと思った
0885デフォルトの名無しさん
2008/12/28(日) 13:55:06それどこの2ちゃん?
0886デフォルトの名無しさん
2008/12/28(日) 13:55:16よっ、社会不適合者の鑑!
0887デフォルトの名無しさん
2008/12/28(日) 14:02:19即座に参照できないソースを掲げて勝利宣言するアホは一定数いるからな
小学生かっつーの
0888デフォルトの名無しさん
2008/12/28(日) 14:25:54ソースを確認するためにわざわざ本を買うのか
>>883-886のバカどもはw
0889デフォルトの名無しさん
2008/12/28(日) 14:26:570890デフォルトの名無しさん
2008/12/28(日) 14:27:200891デフォルトの名無しさん
2008/12/28(日) 14:28:28ご苦労なこったw
0892デフォルトの名無しさん
2008/12/28(日) 14:29:40根本的に理解できていないバカが多すぎるんだよな。
0893デフォルトの名無しさん
2008/12/28(日) 14:31:060894デフォルトの名無しさん
2008/12/28(日) 14:31:360895デフォルトの名無しさん
2008/12/28(日) 14:33:07COBOLを調べるために本を買う気もないし
図書館まで行く気はもないw
0896ばかでもわかるようにかかないと…
2008/12/28(日) 14:35:270897デフォルトの名無しさん
2008/12/28(日) 14:36:36ソースの存在を認めるかどうかは、それを自分で確かめたから言えることだろ。
本当ならソースを出されたら自分で確かめないといけない。
俺はどうでもいいから放置だけど。
だれかが(この場合>>881)が「ソースはこれ」って言っただけで信じる人は
ものわかりがよすぎですね。
0898デフォルトの名無しさん
2008/12/28(日) 14:38:150899デフォルトの名無しさん
2008/12/28(日) 14:46:02<a><b><c>ふがふが</c></b></a>
<a><b>ほげふが</b></a>
こんな感じのコンテキストがあったとして
<c>ノード要素がある<a>ノード要素を選択したいときのXPath(REXML)がわからんのです。
’//c'とするとノードが<c>ふがふが</c>となるのですが
<a><b><c>ふがふが</c></b></a>となって欲しい。
'a[name()="c"]'としてもダメみたいで。(cノードを含むaノード、のつもり)
REXMLというよりXPathの質問みたいですが,よろしくどうぞ。
0900デフォルトの名無しさん
2008/12/28(日) 14:48:15> 自分で確かめないといけない。
それだからこそ「ご苦労なこと」はソースの存在の可否に関係ないじゃん。
0901デフォルトの名無しさん
2008/12/28(日) 15:43:26いまさらこれをどうにかできるものではありません。
それならば、むしろ精一杯「成功」して、
後に続くオープンソース開発者の模範あるいは
ロールモデルになろうと思うようになりました。
「オープンソースをやっていても食べていけるんだ」
とか、
「オープンソースを仕事にして幸せそうだ」
とかいうありさまを見せることもわたしの使命の1つなのでしょう。
きっと。
0902デフォルトの名無しさん
2008/12/28(日) 16:06:06やってみたんだけどね
require 'rexml/document'
xml = '<x>
<a><b>ほげほげ</b></a>
<a><b><c>ふがふが</c></b></a>
<a><b>ほげふが</b></a>
</x>'
doc = REXML::Document.new(xml)
puts doc.elements['x/a[.//c]'] # <a><b><c>ふがふが</c></b></a>
puts doc.elements['x/a[//c]'] # <a><b>ほげほげ</b></a>
puts doc.elements['//a[.//c]'] # <a><b><c>ふがふが</c></b></a>
puts doc.elements['//a[descendant::c]'] # <a><b><c>ふがふが</c></b></a>
puts doc.elements['//a[Descendant::c]'] # nil
なやましす
0903デフォルトの名無しさん
2008/12/28(日) 17:10:23これが正解じゃまいか?
0904デフォルトの名無しさん
2008/12/28(日) 17:28:41なのかな。XPathの文法見たらどうもそれっぽい
ttp://www.doraneko.org/xml/xpath10/19991116/Overview.html#axes
たまにREXML使うと間違いなく細かいところではまるんだよなあ
XPathにしろ文法に合致してないんなら例外吐いてくれるとうれしいのに
0905デフォルトの名無しさん
2008/12/28(日) 20:54:57Windows上では問題ないのにサーバにアップロードして実行すると
文字化けしてしまいます。
何か足りないものがあるのでしょうか?
現状:
CentOS
Ruby 1.8
Rmagick 2.8
imageimgickはjpeg,png,zlibのライブラリとともにインストール。
ghostscript8.63をあとから追加
ソース
img1 =Magick::ImageList.new("back.jpg")
dr = Magick::Draw.new
dr.pointsize = 12
dr.fill = "#000000"
dr.font = "/usr/local/rails/test/config/test.ttc"
dr.gravity = Magick::CenterGravity
dr.annotate(img1, 0, 0, 0, 0, "テスト")
0906デフォルトの名無しさん
2008/12/28(日) 21:05:24表示する日本語が表示ロケールと合ってないに一票
0907デフォルトの名無しさん
2008/12/28(日) 22:55:43"テスト" はスクリプトファイルの文字エンコードで送られるはず
Windowsで動いてたってんならたぶんShiftJISだろうから、ShiftJISのテストという文字送られて化けてるだけだろう
0908デフォルトの名無しさん
2008/12/29(月) 00:48:38ソースファイルの文字コードはUTF-8です。
あと、渡す文字列のところを
NKF.nkf("-e","テスト")
とNKF.nkf("-s","テスト")にして
試してみたのですが化け方が変わるだけでした。
0909デフォルトの名無しさん
2008/12/29(月) 03:18:45$KCODE = 'u'
requireq 'jcode'
直る保障はないが、日本語の扱いは基本これ入れておくと無難だと思うわ。
0910デフォルトの名無しさん
2008/12/29(月) 03:19:33require 'jcode'
0911デフォルトの名無しさん
2008/12/29(月) 04:03:160912デフォルトの名無しさん
2008/12/29(月) 04:06:110913デフォルトの名無しさん
2008/12/29(月) 06:57:550914デフォルトの名無しさん
2008/12/29(月) 06:58:11jcodeとrmagickが何するライブラリか調べてからまた来い
0915デフォルトの名無しさん
2008/12/29(月) 07:38:240916デフォルトの名無しさん
2008/12/29(月) 07:43:050917デフォルトの名無しさん
2008/12/29(月) 11:22:20日本語使えるよ。以下のコードでちゃんと合成できた。
CentOS5.1
Ruby1.8.7-p72
スクリプトはUTF-8で保存。
フォントはWindowsXPからMSゴシック持ってきた。
require 'rubygems'
require 'RMagick'
img1 = Magick::ImageList.new("back.jpg")
dr = Magick::Draw.new
dr.pointsize = 12
dr.fill = "#000000"
dr.font = "./MSgothic.ttf"
dr.gravity = Magick::CenterGravity
dr.annotate(img1, 0, 0, 0, 0, "テスト")
File.open("./back01.jpg", "w"){|f|
f.binmode
f.print img1.to_blob{quality = 95}
}
0918デフォルトの名無しさん
2008/12/29(月) 11:43:590919デフォルトの名無しさん
2008/12/29(月) 13:19:59awk '!dup[$0]++ {print $0}'
0920デフォルトの名無しさん
2008/12/29(月) 15:50:29for (1..5, 10..15) {
print;
}
Rubyではどう書くのですか?
(1..5, 10..15).each do |i|
puts i
end
0921デフォルトの名無しさん
2008/12/29(月) 16:00:10つflatten
0922デフォルトの名無しさん
2008/12/29(月) 16:04:25書けない
範囲オブジェクトは加算も追加もできないから、配列にして連結するしかないな
((1..5).to_a+(10..15).to_a).each do |n|
puts n
end
0923デフォルトの名無しさん
2008/12/29(月) 16:06:32他にもあるだろうけど、俺にすぐ思いつくのは
((1..5).to_a+(10..15).to_a).each{ |j|
puts j
}
0924デフォルトの名無しさん
2008/12/29(月) 16:16:26�d
この場合のflattenの使い方がちょっとわかりませんが、一旦、配列に戻すんすね
0925デフォルトの名無しさん
2008/12/29(月) 16:27:57あと、RangeとArrayには関連性はないから「戻す」という表現は好ましくないがまあどうでもいいや
0926デフォルトの名無しさん
2008/12/29(月) 16:31:52ruby1.8
([*1..5] + [*5..10]).each {|i| puts i}
ruby1.9
[*1..5, *10..15].each {|i| puts i}
0927デフォルトの名無しさん
2008/12/29(月) 16:40:130928デフォルトの名無しさん
2008/12/29(月) 16:51:15やっぱ、flattenを使うところではないんですか。
戻すでなく変換っすね。
>>926
おー、簡潔でいいです。
0929デフォルトの名無しさん
2008/12/29(月) 16:54:45引数* は全く簡潔じゃないよ
perlをやっているならコードが短いことと簡潔性には関連がないことは知ってるはず
0930デフォルトの名無しさん
2008/12/29(月) 17:02:26[1..5, 10..15].each do |r|
r.each do |i|
puts i
end
end
配列中にRangeと数値が混在しているなら
Rangeじゃないのものは配列に変換しちゃう
[1,3, 7..9, 13..15, 20].each do |r|
r = [r] unless Range === r
r.each do |i|
puts i
end
end
0931デフォルトの名無しさん
2008/12/29(月) 17:06:29def range_flatten(arg)
result = []
arg.each{|e| result += Range === e ? e.to_a : [e] }
result
end
range_flatten([1,3,7..9,13..15,20]).each do |i|
puts i
end
いっそ配列中のRangeを展開しつつ回すイテレーターにもしちゃう(少メモリ)
def range_flatten(arg)
if block_given?
arg.each do |r|
r = [r] unless Range === r
r.each {|i| yield i }
end
arg
else
result = []
arg.each{|e| result += Range === e ? e.to_a : [e] }
result
end
end
range_flatten([1,3,7..9,13..15,20]) do |i|
puts i
end
0932デフォルトの名無しさん
2008/12/29(月) 17:12:42module Enumerable
def depth_1st_each(&block)
each {|e| e.respond_to?(:depth_1st_each) ? e.depth_1st_each(&block) : yield(e) }
end
end
StringがEnumerableな1.8系だと不幸が起こるなぁ。
0933デフォルトの名無しさん
2008/12/29(月) 18:10:32挙動もかわってしまった。
require 'hpricot'
require 'nokogiri'
src = '<r>
<a>ほげ</a>
<a>ふが</a>
</r>'
doc = Hpricot(src)
node = doc.search('//a')[0]
puts node #-><a>ほげ</a>
puts node.next_sibling #-><a>ふが</a>
doc = Nokogiri(src)
node = doc.search('//a')[1]
puts node #-><a>ほげ</a>
puts node.next_sibling.to_s[0] #-> ¥n
みたいな違いが出ます。Nokogiriのほうが見栄えを良くするための
改行文字(空白文字)も正しくパースしているからだと
思うのですが,Hpricotの振る舞いの方が便利なこともある。
ソースを変更できないので質問なんですが,
Nokogiriで空白文字を無視する方法を知りませんか?
(何が必要な空白文字で,何が不要な空白文字かの判断は難しいですが,それはそれとして)
要するに,'<r><a>ほげ</a><a>ふが</a></r>'と解釈して読み込んでほしい。
0934933
2008/12/29(月) 18:30:11スクリプトでなくて。念のため。
0935デフォルトの名無しさん
2008/12/29(月) 18:51:51俺の環境だと
0要素目はきちんと <a>ほげ</a>
1要素目はきちんと <a>ふが</a>
を返すぞ
文字エンコードがまずいんだと思う
素の Nokogiri は UTF-8 しか読まないから、
事前に変換するか、Nokogiri.parse の第3引数にHTMLやXMLの文字コードを表すiconvな文字列を指定してみ
第2引数は nil でいい
0936デフォルトの名無しさん
2008/12/29(月) 20:33:02�d
よく見てみます
0937933
2008/12/29(月) 20:45:46Nokogiriのほうの
node = doc.search('//a')[1]
ではなくて
node = doc.search('//a')[0]
です。
比較対象用のコードに誤りがあれば検証できませんよね。
念のため環境はruby 1.8.7 (2008-08-11 patchlevel 72) [powerpc-darwin7]です。
一応doc = Nokogiri(src, nil, 'UTF-8')にもしてみましたが,結果は同じでした。
HpricotとNokogiriでのnode.next_siblingの結果が,
同じ,<a>ふが</a>になればいいのですが...
ということでよろしくお願いします。
0938デフォルトの名無しさん
2008/12/29(月) 21:17:02うーん。
ttp://d.hatena.ne.jp/kitamomonga/20081229/ruby_difference_nokogiri_hpricot#nokogiri_4th_arg
動作原理は不明な上に他のHTMLではなんか動作しないんだけど、parseの第4引数に整数 2401 を指定してみ。
libxml2 の HTML_PARSE_NOBLANKS が有効になる。
require 'hpricot'
require 'nokogiri'
src = '<r>
<a>ほげ</a>
<a>ふが</a>
</r>'
p Nokogiri(src).search('//a')[0].next_sibling
p Nokogiri(src, nil, nil, 2401).search('//a')[0].next_sibling
結果:
←改行\n
<a>ふが</a>
0939デフォルトの名無しさん
2008/12/29(月) 21:27:540940デフォルトの名無しさん
2008/12/29(月) 21:50:02…メソッド定義を直に書き換えちゃうのが簡単だと思う…。
>>939
agent.post_connect_hooks に params[:response_body].gsub! なProc オブジェクト登録すれば動くかも
でもそれだと本文部分の改行も全部消えちゃいそうだな
agent.get(uri)
agent.page.body = Nokogiri.parse(agent.page.body, nil, nil, 2401).to_s
なら2度手間だけどなんとかなる?
0941デフォルトの名無しさん
2008/12/30(火) 12:41:570942デフォルトの名無しさん
2008/12/30(火) 12:51:520943デフォルトの名無しさん
2008/12/30(火) 12:52:220944デフォルトの名無しさん
2008/12/30(火) 13:26:370945デフォルトの名無しさん
2008/12/30(火) 14:16:30合点
0946デフォルトの名無しさん
2008/12/30(火) 14:32:360947デフォルトの名無しさん
2008/12/30(火) 14:50:04それはもっともらしいけど、本当?
awk由来だけど、たとえばgrepはedコマンドの
g/RE/pをそのまま読んだわけで、なんかの略というわけではない。
gsubはedならg//s/RE/Replacement/ってところ(ちょっと無理があるが)
だろうが、ほんとにglobal substitutionの略だろうか?
0948デフォルトの名無しさん
2008/12/30(火) 14:57:58フラグのgがglobalであること、s///がsubstitutionであることなどから推し量れば、
global substitutionが妥当だが、作者がそう言ったという根拠がなければ信用したく
ないなら、そういうスタンスもありなんでしょうね。どうでもいい話ではあるが。
0949デフォルトの名無しさん
2008/12/30(火) 15:09:27http://oreilly.com/catalog/unixnut3/chapter/ch11.html
この本での説明が
gsub(r, s [, t])
Globally substitute s for each match of the regular expression r
in the string t. If t is not supplied, defaults to $0.
Return the number of substitutions. {N}
なので、これ以外をこじつけるのは無意味。
0950デフォルトの名無しさん
2008/12/30(火) 17:42:51>g/RE/pをそのまま読んだわけで、なんかの略というわけではない。
global reguler expression print の略ですが
0951デフォルトの名無しさん
2008/12/30(火) 17:45:350952デフォルトの名無しさん
2008/12/30(火) 17:58:43それは無理矢理だ。
0953デフォルトの名無しさん
2008/12/30(火) 22:05:110954デフォルトの名無しさん
2008/12/30(火) 22:07:360955デフォルトの名無しさん
2008/12/30(火) 22:42:59print の p 以外の方が、使用頻度が高い。
:g/RE/y A
y は yank の略、A はバッファー a に追加
:g/RE/d
d は delete の略
:g/RE/s/^/#/
s は substitution の略
RE のある行の行頭に # を挿入
0956デフォルトの名無しさん
2008/12/31(水) 01:06:13gがglobalの略で、全行選択の意味。
REがRegular Expression
pがprintの略で、表示だ。
それぞれ独立の要素であって、一体としてGlobal Regular Expression Printの
略なわけではない。英語になってないし。
0957デフォルトの名無しさん
2008/12/31(水) 01:38:14>>953
0958デフォルトの名無しさん
2008/12/31(水) 06:35:33マニュアルのほうが後付け。
0959デフォルトの名無しさん
2008/12/31(水) 07:00:43一般には「RFC=インターネット世界の標準的な規格書」という認識が広まっているが
RFCは日本語では「コメント募集」の意味であり、もともとは技術仕様を公開し、
それについての意見を広く募集してより良いものにしていく観点から始められたようである。
そもそもインターネットにおける規格を記述する文書に『Request For Comments』、
日本語に訳すと「ご意見お待ちしています」という名前が付けられているのは、
冷静に考えてみるとかなり変な話だ。
最初は「ただのメモ書きや提案」程度の意味合いしか持たなかったRFCだが、
その性質は今もある程度引き継いでいる。
今まで規格として紹介してきたRFCも、正確にはRFCの中でも『STANDARD』として
認められたものであり、決して「RFC=正式な規格書」というわけではない。
むしろRFCとは「インターネットを理解する上で役立つとIETF
(もしくはRFC編集グループ)が認めた文書」程度の意味合いしかない、
と考えた方がよい。
RFCは全て英語で書かれることが必須条件となっているため、
IT業界に籍を置きRFCを読まなければならないような立場になると、
RFCの表現をどう実装すればいいのか頭を悩ませることが少なくない。
そんなときは気分転換がてら、これらのジョークRFCを読んで頭を休ませるとか、
あるいは腕に覚えのある人ならジョークRFCを本当に実装してしまうなんていうのもおもしろいのではないか。
0960デフォルトの名無しさん
2008/12/31(水) 07:02:410961デフォルトの名無しさん
2008/12/31(水) 10:54:350962デフォルトの名無しさん
2008/12/31(水) 12:38:09問い合わせを受けたことがあるそうな。
0963デフォルトの名無しさん
2008/12/31(水) 13:02:57結果が2008-12-20になるんです。
年月日の部分を分解して組み立て直すしかないのでしょうか?
明治以降の和暦<->西暦ぐらいならライブラリがあっても良さそうなのですが。
0964デフォルトの名無しさん
2008/12/31(水) 13:14:13court(法廷)はもともと「囲まれた庭」という意味だから(以下略)
0965デフォルトの名無しさん
2008/12/31(水) 13:22:26NENGO = { "平成" => 1989 }
m = (/(.+?)(\d{1,2})年(\d{1,2})月(\d{1,2})日/).match "平成20年12月31日"
y = NENGO[m[1]] + m[2].to_i - 1
p [y, m[3], m[4]].join("-")
こんなんでどう?
0966デフォルトの名無しさん
2008/12/31(水) 13:26:42rubyforge.org/projects/jadtfmt/
ICUのラッパだから裏方の作りは問題ないはず。
0967デフォルトの名無しさん
2008/12/31(水) 13:28:16NENGO吹いたwwwww
0968966
2008/12/31(水) 13:35:210969デフォルトの名無しさん
2008/12/31(水) 13:40:29.NETだと、System.Globalization.JapaneseCalendar
(前者はJRuby、後者はIronRubyで使えるかなー?)
どちらも明治以降の太陽暦しか扱えないので、Rubyでは是非とも
それ以前の元号と太陰暦のサポートを。
0970デフォルトの名無しさん
2008/12/31(水) 13:43:510971963
2008/12/31(水) 13:46:53>>966
ぱっとみただけだと西暦->和暦の一方通行だけなのかな?
で自己レスですが,Dateクラスを斜め読みしていたら,
self._parse_jisというクラスメソッドがあった。
MTSHの和暦->西暦だったらパースできるみたいです。
なので「平成年月日」の漢字部分をそれなりに置き換えたあとに
パースすればいいみたい...
(でもそれぐらいなら,はじめから組み込んでくれればいいのだが、こーどのもんだいがあるのかもしれない,,,1.9.1に期待)
0972デフォルトの名無しさん
2008/12/31(水) 14:04:43明治5年12月3日が1872年12月3日になった。
(明治5年12月2日の翌日は明治6年1月1日なので、1873年1月1日のはず)
JavaのCalendarはこのへん妙に凝ってた気がするんだが……
こういう改暦の境界って扱いがめんどくさそうだな。
0973デフォルトの名無しさん
2008/12/31(水) 14:08:020974デフォルトの名無しさん
2008/12/31(水) 14:29:16Javaの影すらなかった時代からあるのにな...
jlessとかjawkとかいっぱいあるのに。外国人の日本認識なんてそんなものか。
0975デフォルトの名無しさん
2008/12/31(水) 14:39:20知るわけがないだろ
0976デフォルトの名無しさん
2008/12/31(水) 14:53:480977デフォルトの名無しさん
2008/12/31(水) 15:08:53ジャストタイミングでJRuby作者が、Iokeとかいうのを作ったみたいw
Ioke 0 released | Ola Bini: Programming Language Synchronicity
http://olabini.com/blog/2008/12/ioke-0-released/
0978デフォルトの名無しさん
2008/12/31(水) 15:18:56ttp://homepage1.nifty.com/gyouseinet/history/nengouichiran.htm
ユリウス暦-グレゴリオ暦の変換とかも必要なのかな
0979デフォルトの名無しさん
2008/12/31(水) 17:12:10明治以降限定で割り切るのが楽かね。(それでも改暦が1回あるが)
0980デフォルトの名無しさん
2008/12/31(水) 18:02:460981デフォルトの名無しさん
2008/12/31(水) 18:22:36すげくねっといわれても
暗黙の機能の多さの違いとしか
awk "!dup[$0]++ {print}"
perl -ne "print if!$dup{$_}++"
ruby -e "puts readlines.uniq"
もしくは
ruby -ne "BEGIN{$dup=Hash.new 0};print if 2>$dup[$_]+=1"
awkから引き継いだフリップフロップ演算子なんて
ワンライナー以外で使うことがあるのかしら
awk "/^=begin/,/^=end/{print}
perl -ne "print if /^=begin/../^=end/"
ruby -ne "print if /^=begin/../^=end/"
0982デフォルトの名無しさん
2008/12/31(水) 18:50:010983デフォルトの名無しさん
2008/12/31(水) 22:15:160984デフォルトの名無しさん
2008/12/31(水) 22:40:55書きかけの文書が多いの?
http://www.ruby-lang.org/ja/man/html/Ruby_A5EAA5D5A5A1A5ECA5F3A5B9A5DEA5CBA5E5A5A2A5EB.html
本買ってね、ということなの?
0985デフォルトの名無しさん
2008/12/31(水) 23:06:43http://doc.loveruby.net/refm/api/view/index
ライブラリの網羅率は、
今年の夏には5割で「来年の夏には終わる」とか言われてたから
たぶん今頃は7割ぐらい?
0986デフォルトの名無しさん
2008/12/31(水) 23:25:49そう思ったらあなたが書き足せば良いんですよ
っていうスタンス
0987デフォルトの名無しさん
2008/12/31(水) 23:54:21RWiki重すぎで静的HTMLになっちゃたっんだよねぇ。
0988デフォルトの名無しさん
2008/12/31(水) 23:55:52本がどうとかいう以前に、「ソース嫁」と思っている。
0989 【大吉】
2009/01/01(木) 00:15:500990 【大凶】 >>1000に 【564円】 あげます。
2009/01/01(木) 00:21:43今年もよろしくね!
0992 【大吉】
2009/01/01(木) 00:57:370993!omikuzi
2009/01/01(木) 01:23:530994デフォルトの名無しさん
2009/01/01(木) 01:29:07【最新安定版の Ruby1.8.7 の使用をお勧めします】
※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。
1.9 の新機能の一部が利用可能なので初学者にお勧めです。
※ただし十分安定しているとは言えないので
プロダクション環境での利用にはお勧めしません。
0995デフォルトの名無しさん
2009/01/01(木) 01:34:400996デフォルトの名無しさん
2009/01/01(木) 01:50:410997デフォルトの名無しさん
2009/01/01(木) 01:51:28Ruby以外の経験はあるの?
0998デフォルトの名無しさん
2009/01/01(木) 01:52:050999デフォルトの名無しさん
2009/01/01(木) 01:52:331000デフォルトの名無しさん
2009/01/01(木) 01:53:0710011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。