1 名前:デフォルトの名無しさん [2008/02/22(金) 14:31:31 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 【Ruby1.9 は不安定な開発版であり初心者には全く向きません】 【最新安定版の Ruby1.8.6 の使用を強くお勧めします】 関連スレやURLは>>2-8 あたりを見てください。Ruby on Railsの質問はRailsスレへ。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
136 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 20:34:05 ] >>133 =129 あきらめろ、幾ら頑張ってもお前の>>129 は「馬鹿じゃない」と解釈する余地が無い。
137 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 01:19:04 ] www.ruby-lang.org/ja/man/html/Net_HTTPRequest.html 1.9 featureって書いてあるから1.8じゃ使えないのかと思ったら1.8.6でも使えるのね。よかった。
138 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:22:09 ] >>134 クライアントです。 分けるといっても複数のpostを一連の1つのpostと 認識させるにはどうしたらいいんでしょうか… >>135 >>137 チャンク形式っていうんでしょうか? で、body_streamを使えばヘッダとか気にしなくていい ってことでよいでしょうか? >>132 のdataの内容を一旦 data.txt に書き出しておいて、 あとは >>135 の例のchunkedを使うようにするとできたっぽいですが、 一時ファイルを使わないようにできないでしょうか?
139 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:48:00 ] RubyにあるモジュールはCGIやHTTPの知識の必要性を良くも悪くも隠蔽しない その知識のまま進むのは危険だ HTTPやCGIの勉強をすることを勧めるよ
140 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 13:29:26 ] >>138 >>137 が書いてるページの body_stream 使うんだろうけど、おれもやったことないからわからん。 ぐぐったらこんなのあった d.hatena.ne.jp/unageanu/20071009
141 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:11:22 ] curlコマンド使うのが一番楽やねん
142 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 18:17:48 ] 「年・月・日」ではなく「年・月」の2つしかないデータがあるんだけど、 これを格納するデータオブジェクトって何がいいかな? いや、年月日が揃ってるデータと「年・月」が同じかどうかという比較をするんよ 年月日ならDateオブジェクトなんだけど、日をどうしようかなあと
143 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 18:30:19 ] >>142 ・ 「どうせ参照されないからいいじゃん?」とか年金式にdayを1に固定してDateを使う ・ [year, month] という配列に入れておく ・ Dateを継承した「dayが無指定でも動く」という新しいDateを作る
144 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:05:14 ] ・Date に適当にメソッドを足して適当に YYYY/MM/01 でも代表元に使う
145 名前:デフォルトの名無しさん [2008/02/29(金) 21:09:37 ] require 'yaml' yaml_str = <<YAML_STR hoge: - moge: [poge, page] YAML_STR data = YAML.load(yaml_str) data['hoge'].each {|key,value| p key,value} こうすると、 keyが{"moge"=>["poge", "page"]} valueがnilになってしまいます。 key=moge,value=[poge, page] になって欲しいのですが…。 どこが間違っているのでしょうか?
146 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:47:44 ] data["hoge"] #=> [ {"moge"=>["poge", "page"]} ] つまり "moge"=>["poge", "page"] という(キーが一つの)ハッシュを一つ持つ配列 mogeをリストにせずにインデントで階層にすれば data["hoge"] #=> {"moge"=>["poge", "page"]} になる
147 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:09:30 ] >>145 data['hoge'].each {|hash| hash.each {|key,val| p key, val}}
148 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:17:20 ] >>146-147 ありがとうございました YAMLのマッピングの記述を勘違いしていたようです
149 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:09:51 ] なんか最近思うんだけどさ ここ「初心者」スレだよな・・・ 素直に本家行けば?って人ばっかりじゃね?
150 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 04:39:41 ] 本スレはMatzと愉快な仲間たちについて あれこれ語るスレであって、プログラムを語るスレではないのです …あれ? じゃあ板違いじゃない?
151 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:36:51 ] 「Rubyの初心者」のスレでしょ? プログラミング自体の初心者じゃないといけないの?
152 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:44:14 ] >>149 が考えるところの「本スレ」のレベルに依存するな
153 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:15:48 ] >>149 同意。
154 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:39:06 ] あんなS/Nの小さいスレ 使ってられねーよ
155 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:00:41 ] irb> s = '2'; case s; when /(1)/,/(2)/,/(3)/ then p $1 end "2" irb> s = '2'; case s; when Regexp.union(/(1)/,/(2)/,/(3)/) then p $1 end nil なんで?
156 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:07:39 ] unionすると /(1|2|3)/ になるのではなく /(1)|(2)|(3)/ になって、 今回マッチしたのは(2)のとこだからグループとしては$2。 $1ではない。
157 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:16:53 ] >>156 をを …正規表現をコンマで並べても用が済むcaseでunionを使うのはめんどくさいっすな
158 名前:デフォルトの名無しさん [2008/03/01(土) 21:37:16 ] nkf.guessやKconv.guessなんかを文字列にしたいんだけど、 この文字列の配列ってあらかじめ定義されてないんでしょうか? 文字コードの推測 www2u.biglobe.ne.jp/~MAS/ruby/CAB8BBFAA5B3A1BCA5C9A4CEBFE4C2AC.html
159 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:54:35 ] ないっす いわゆるエンコーディングの名称・略称を表示するようにはできてない puts "#{str}は日本語EUCだよ!" if NKF.guess(str) == NKF::EUC というような使い方しか想定してない模様 一応 irb> NKF.constants ["UTF8", "VERSION", "JIS", "UNKNOWN", "NKF_VERSION", "ASCII", "UTF32", "SJIS", "NOCONV", "AUTO", "REVISION", "UTF16", "EUC", "BINARY", "NKF_RELEASE_DATE"] の結果をどうにかすればできなくはないけど、 自前で文字列対応テーブルを書いたほうがたぶん早い
160 名前:デフォルトの名無しさん [2008/03/01(土) 22:05:26 ] >>159 サンクス >>158 のページのようなのを使いまわすことにする
161 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:52:59 ] net/httpで相手サーバがタイムアウトした場合の例外をキャッチしたいんだけど、 具体的に何の例外が発生するんですか? というか、そのへんの情報ってどっかにまとまってませんか?
162 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:58:15 ] 手元の俺スクリプトの例 rescue Net::ProtoRetriableError,Net::ProtoFatalError,Net::ProtoServerError,Errno::ETIMEDOUT,TimeoutError =>ex puts 'サーバーから応答がないので空データを使います' return '' 正直、ドレが効いてるんだかよくわからん
163 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:04:24 ] net/protocol.rbを見ると、ソケット生成(接続)や読み書きは timeoutメソッドの中でやってるのでTimeout::Errorかな。 TimeoutErrorはこれの後方互換用。
164 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:10:11 ] http.getに該当する部分から飛び出す例外を全部捕捉して 「よくわからんけど鯖がエラー返しましたエラー」にすれば桶 begin res = open(uri).read rescue puts "#{uri.host}のサーバかそこへのアクセスで何かエラーです" res = '' end 実際問題としてサーバー側の原因以外の例外はここでは起こらんわけだし Timeoutだけ補足してもProtoServerErrorの500系エラーはスルーされるぞ 500系エラーって新幹線みたいだな
165 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:15:10 ] Timeout::ErrorはStandardErrorのサブクラスではないので、 引数なしのrescueでは捕まらんのだわ。
166 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:27:51 ] >>165 既にFAQレベルだな… ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/40726 直感的という言葉は使いたくないがやっぱ説明なしじゃわかりにくいよね シグナルとかあのへんの勉強をするといいんだが、ちと重いな
167 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:33:49 ] Errno::ETIMEDOUT って何?
168 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:39:30 ] タイムアウトした(Timed Out)というエラー。
169 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:46:43 ] ネット系はErrno::ECONNABORTEDとかErrno::ECONNRESETみたいなのも飛んでくるし、 例外をキャッチしても、それ以降の接続はなにやっても失敗したりするので悩ましい
170 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:51:49 ] >>167 システムコールが返すタイムアウト Timeout::Error → 「相手のWebサーバからHTTPの返事が返ってこない」 Errno::ETIMEOUT → 「Webサーバ以外の色々から返事が来ないタイムアウト」 と思って桶 そもそもサーバが見つからないとかそういうの。たぶん >>169 retryはたいてい成功しないよね
171 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 16:23:37 ] return @hoge = kekka と @hoge = kekka return kekka と @hoge = kekka return @hoge ってどれが一般的かな
172 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 19:11:27 ] @hoge = kekka
173 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 20:47:42 ] @hoge = kekka return
174 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 21:09:01 ] >>171 returnを使いたくて仕方ないのなら2番目でよろしく 1番目はなんか見てて不安だ
175 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 21:33:05 ] win環境で、一番簡単に ファイルのオープンダイアログを表示するには どうすればいいでしょうか もろもろインストールの必要を最小限にしたかったりもします。
176 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 22:03:12 ] require 'win32ole' d = WIN32OLE.new("MSComDlg.CommonDialog") d.maxFileSize = 256 d.showOpen p d.fileName
177 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 22:05:12 ] 楽なのはVisualuRubyかなぁ。通常のrubyには入ってないけど、 Windows用のActiveScriptRubyならデフォで入ってます require 'vr/vrcontrol' fn=SWin::CommonDialog::openFilename(nil,[ ["All file","*.*"],["bmp file","*.bmp"] ]) p fn 細かいことはVisualuRubyサイトのドキュメントやサンプル見てください ActiveScriptRuby arton.hp.infoseek.co.jp/indexj.html VisualuRuby計画(仮称) www.osk.3web.ne.jp/~nyasu/software/vrproject.html
178 名前:デフォルトの名無しさん [2008/03/02(日) 22:13:20 ] ファイルロックに関する事なんですが、みなさんはどの様なロジックで組んでますか? 自分は普通に以下みたいな感じなんですが、ごくたまにファイルが壊れる事があるんですよね… なにか良い方法があればご教示お願いします。 File.open('data.dat', 'r'){|file| file.flock(File::LOCK_SH) file.read } File.open('data.dat', 'w'){|file| file.flock(File::LOCK_EX) file.write(data) }
179 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 22:17:53 ] >>178 スレッド使ってる?
180 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 22:22:39 ] >>179 いえ使ってません。
181 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 22:45:34 ] 書き込みの場合は、アンロックする前に flushしないと、アンロックした後に書き込みが行われる場合がある みたいな事を言っている方がいたので、その辺の問題のせいでしょうか… File.open('data.dat', 'w'){|file| file.flock(File::LOCK_EX) file.write(data) file.flush file.flock(File::LOCK_UN) } とかなのかな??
182 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 23:51:49 ] 175です。早速にレス感謝です。 >>176 を試みてみまして WIN32OLERuntimeError に悩まされております・・・ もうちょっとWIN32OLE研究してみます。
183 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:17:15 ] >>176 はOS側の環境依存の度合いが大きいよ インストールしたRubyの種類に依存する>>177 と好きなほう選べ
184 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:52:19 ] # RDEで以下のようなスクリプトを実行します puts '文字を打ってくれ' s = gets puts s + 'と打ったのだね' #すると画面左下の実行画面が表示される部分に'文字を打ってくれ'と表示される前に #文字を入力するように求められます(文字を打たないと'文字を打ってくれ'と出ない) ヒントだけでいいのでご享受ください。RDEとかいう開発環境なんか捨てた方がいいのでしょうか?
185 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:54:36 ] getsの前に$stdout.flushしたらうまくいったりする?
186 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:56:47 ] STDOUT.sync = trueな予感
187 名前:184 mailto:sage [2008/03/03(月) 01:03:01 ] STDOUT.sync = true を使うことで RDEでgetsが実行される前の文字が表示されるようになりました($stdout.flushではだめでした) ありがとうございました! >>185 >>186
188 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 06:15:51 ] >>182 これはどうかな? tk環境が要るけど。 require "tk" #rootを非表示にする root=TkRoot.new.withdraw types = [ ["Ruby" , ".rb"], ["All Files", "*" ] ] path = Tk::getOpenFile(:filetypes=>types, :defaultextension=>".rb") p path
189 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 13:37:22 ] 「あまり別途インストールしたくない」という要求に対してWin32OLEやVisualuRubyが既に出てるのに わざわざRuby/Tkで同じ標準ファイルオープンダイアログを出す根性に感服した
190 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 13:43:03 ] 宿題スレとか一部で流行ってるからな >Ruby/tk
191 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 14:39:30 ] >>178 flock関数を使わずに、自前でロック処理を作るとか
192 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 15:07:19 ] 「自前」は迷宮への入り口の罠 何か有るはず。 俺はしらないけど^^;
193 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 15:44:29 ] わざわざ関数って言い換えてる奴は同一人物か? File.flockより堅固なファイルロックを自前で作れる奴なら悩んだりしないだろ ファイルロックの失敗によってファイルが破損しているのだということを確かめる必要があると思われ
194 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 17:39:45 ] >>187 実際の実行では不要なんだけどね RDEの時だけ必要
195 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 18:48:29 ] 日本語にマッチする正規表現はどのように書きますか。 文字コードはUTF8またはEUC-JPです。
196 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 19:56:30 ] それはあれだ、スクリプトがUTF-8だけどEUC-JPの日本語文字にマッチする正規表現を書きたいとかそういう引っかけ問題か(w
197 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 20:23:04 ] Shift_JIS = /\A(?: [\x00-\x7f\xa1-\xdf] | [\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc] )*\z/nx EUC_JP = /\A(?: [\x00-\x7f] | \x8e [\xa1-\xdf] | \x8f [\xa1-\xdf] [\xa1-\xdf] | [\xa1-\xdf] [\xa1-\xdf] )*\z/nx UTF8 = /\A(?: [\x00-\x7f] | [\xc2-\xdf] [\x80-\xbf] | \xe0 [\xa0-\xbf] [\x80-\xbf] | [\xe1-\xef] [\x80-\xbf] [\x80-\xbf] | \xf0 [\x90-\xbf] [\x80-\xbf] [\x80-\xbf] | [\xf1-\xf3] [\x80-\xbf] [\x80-\xbf] [\x80-\xbf] | \xf4 [\x80-\x8f] [\x80-\xbf] [\x80-\xbf] )*\z/nx
198 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 21:16:12 ] ジス イズ ア ペン。
199 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 01:38:47 ] >>178 file.flock(File::LOCK_EX) よりも前に、File.open('data.dat','w') の時点でファイルの内容がクリアされてしまっている。 File.open('data.dat', File::WRONLY|File::CREAT) {|file| file.flock(File::LOCK_EX) file.truncate(0) file.write(data) } …のようにすればいいんじゃないかな。
200 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 03:28:37 ] >>197 Kconv::RegexpEucjp と Kconv::RegexpUtf8 だな いわゆる全角文字と半角カタカナだけ欲しい場合は [\x00-\x7f] だけの行を消すといい irb> puts 'aa康1アアア1煕表示字典ねdこd'.scan(/(?:\x8e[\xa1-\xdf]|\x8f[\xa1-\xdf][\xa1-\xfe]|[\xa1-\xdf][\xa1-\xfe])+/n) 康 アアア 煕表示字典ね こ
201 名前:178 mailto:sage [2008/03/04(火) 07:36:00 ] >>191 File.rename使って色々やってみたんですが やはり上手く行かなくて… >>199 > File.open('data.dat','w') の時点でファイルの内容がクリアされてしまっている。 それはそうですね、確かに。 ちなみに、以下のコードみたいにする事で、だいぶ頑丈になりました! #Read File.open(path, 'r'){|f| f.flock(File::LOCK_SH) data = f.read } #Write File.open(path, File::WRONLY | File::CREAT){|f| f.flock(File::LOCK_EX) f.rewind f.write(data) f.truncate(f.tell) } #Append File.open(path, 'a'){|f| f.flock(File::LOCK_EX) f.seek(0, File::SEEK_END) f.write(data) }
202 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 11:22:04 ] どうして atomic な方のディレクトリロックを使わないん?
203 名前:ルファー ◆XSlQ/Lfer. [2008/03/04(火) 12:48:34 ] Win32APIライブラリを使い、DLL関数から文字列を取得するにはどうすれば良いんですか? ツクール(tkool.jp/products/rpgxp/ )のRGSS1を使っているので、バージョンアップできないし、 ライブラリはRubyで作らないとrequireできないし・・・。
204 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:07:45 ] >>203 www.google.com/search?num=50&hl=ja&q=RGSS+Win32API&lr=lang_ja
205 名前:ルファー ◆XSlQ/Lfer. [2008/03/04(火) 13:11:44 ] >>204 あぁ、解決しました。ありがとうございます。
206 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:14:27 ] うわあ…
207 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:40:32 ] 1レスで解決したならそれはそれでいいじゃん
208 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 16:42:14 ] 標準添付のWeb::Agentって使ってる人いる?
209 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 20:58:32 ] ruby -v; egrep '¥<Web¥>' **/*(.) ruby 1.8.6 (2007-09-24 patchlevel 111) [universal-darwin9.0] webrick/httprequest.rb: # (Web.Golux.Com/coar/cgi/ ) webrick/httpservlet/filehandler.rb: # (Web Distributed Authoring and Versioning) どこにあるクラス?
210 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 22:17:54 ] Noraは標準添付ではない。
211 名前:デフォルトの名無しさん [2008/03/06(木) 06:35:30 ] 例えばCで定義された以下の様な構造体があって その構造体のデータが格納されたデータファイルを 1レコードずつRubyスクリプトで読み込む時に struct Record{ char n, int a, int b; }; 以下の様な、なんだか非効率な方法しか分かりません… とりあえず、一括してreadして、あとで上手くunpackで切り分けとか出来ないでしょうか? File.open('data.dat', 'rb'){|f| while !f.eof? n = f.read(1) a = f.read(4) b = f.read(4) data.push(n.unpack('L')[0].to_s + ',' + a.unpack('S')[0].to_s + ',' + b.unpack('L')[0].to_s) end }
212 名前:211 mailto:sage [2008/03/06(木) 06:38:11 ] × data.push(n.unpack('L')[0].to_s + ',' + a.unpack('S')[0].to_s + ',' + b.unpack('L')[0].to_s) ○ data.push(n.unpack('c')[0].to_s + ',' + a.unpack('i')[0].to_s + ',' + b.unpack('i')[0].to_s)
213 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 08:08:47 ] >>211 # char n の後ろに3バイトのパディングがあると仮定して data << f.read(12).unpack('cxxxii').join(',')
214 名前:211 mailto:sage [2008/03/06(木) 11:22:00 ] >>213 あ、レスどうも。 一応以下みたいなコードでだいぶマシになりました。 あとはループ展開するとかで、どうにか納得いく速度が出せそうです。 tmp = '' data = [] File.open('data.dat', 'rb'){|f| data = f.read } (tmp.size / 9).times{ (n, a, b) = tmp[p, 9].unpack('LSL') p += 9 data.push(n + ',' + v + ',' + b) }
215 名前:211 mailto:sage [2008/03/06(木) 11:23:35 ] × (n, a, b) = tmp[p, 9].unpack('LSL') ○ (n, a, b) = tmp[p, 9].unpack('cii')
216 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:37:48 ] 見てるこっちが切なくなるやりとりだな・・・
217 名前:デフォルトの名無しさん [2008/03/06(木) 12:51:12 ] pで表示すると、 "hoge" とカッコ付きで表示されます。 hoge とカッコなしで表示するにはどうしたらいいですか?
218 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:54:06 ] print
219 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:57:41 ] え?pってprintの略じゃなかったんですか…
220 名前:211 mailto:sage [2008/03/06(木) 13:15:50 ] >>216 何かもっと良い方法があればご教示下さい><
221 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 14:08:49 ] >>219 そういう解説をしてるサイトか書籍があったら即晒せ
222 名前:211 mailto:sage [2008/03/07(金) 02:24:18 ] これ以上良い方法が思いつかない… data = [] File.open('data.dat', 'rb'){|f| tmp = f.read cnt = tmp.size / 9 a = tmp.unpack('cii' * cnt) cnt.times{|i| data.push([a[3 * i], a[3 * i + 1], a[3 * i + 2]].join(',')) } }
223 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 03:07:28 ] 効率といっても速度なのかメモリフットプリントなのかコードサイズなのか data = f.read.enum_for(:scan, /.{9}/m).map {|x| x.unpack('cii').join(',') } あと、>>213 が書いてるけど、パディングは考慮してある? 処理系によっては#pragma packeとか
224 名前:211 mailto:sage [2008/03/07(金) 03:39:45 ] >>223 効率は速度です>< >パディングは考慮してある? ちょっと説明の仕方が悪かったです… 要するに、[1][4][4] の各バイトのデータの並びという事です(バディングは考慮する必要はないです) 変な説明をしてすみませんでした!><
225 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 09:55:09 ] >>217 ダブルクォートをカッコと呼ぶやつは初めて見た。
226 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:30:10 ] カッコ悪い呼び方だよな
227 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 15:05:55 ] 審議中AAry
228 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 15:13:38 ] Float のメソッドで、 「0 から遠い方に丸める(切上げ)メソッドはありません。」 のはなんでだろう? truncate (to_i) との対称性から、あってもバチは当たらないと思うんだけど。 やっぱ名前?
229 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 18:16:19 ] 【審議チュウ】 (⌒ー⌒) (⌒ー⌒) (⌒-⌒)´・ω)(・ω・`(⌒ー⌒) ( ´・ω ー⌒)(⌒ー⌒)ω・` ) | U( ´・) (・` ) と ノ 〜-u (l ) ( ノu-u'〜 〜'u-u' `u-u`〜 _ /´ `フ / ,! レ _, r ミ (⌒ー⌒) / `ミ __,xノ゙、 r( ´n . / i > ,/ (⌒ー⌒) ,' . ,' 〜'oー、_) r( n) ; ', l l `/ <_ i | | | 〜'し -一┘ ,.-‐! ミ i i (⌒ー⌒) //´``、 ミ 、 ー、 ( ´・ω) . | l `──-ハ、,,),)'''´ 〜、/ っっ ヽ.ー─'´) (⌒ー⌒) └ー-、ぅ  ̄ ̄ r、´・ω・)) (⌒ー⌒) > _/´ n__n (´・ω・`) 〜'し-一┘ (⌒ー⌒)ノ c' っ c('・ω・`)っ 〜(_,'ーo'
230 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 18:55:39 ] なんだかわからんがなごんだ
231 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:00:49 ] ショッピングカートを作っています。 session["cart"]=Hash.new session["cart"][@itemid]=@amount のような形でsession["cart"]にハッシュを詰め込みたいのですが、 sessionにハッシュを詰め込むことは無理なのでしょうか? また、無理であればto_aで配列に変換して詰め込もうと思うのですが、 元に戻すとき、 @tempSession=Hash[*session["cart"].flatten] と、WEBの公式マニュアル(ハッシュの項)にあるようにやっても うまくいきません…。 どなたかご教授いただければ幸いです。
232 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:03:38 ] なお、使っている鯖はlolipopで、Rubyバージョンは1.8.2です。 よろしくお願いいたします。
233 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 11:53:03 ] >>231 デフォルトだと文字列しか格納できない。 任意のオブジェクトを格納するには CGI::Session::PStore を使う。 require 'cgi/sesion/pstore' session = CGI::Session.new(cgi, 'database_manager'=>CGI::Session::PStore) session[key] = Hash.new
234 名前:231-232 mailto:sage [2008/03/08(土) 12:52:26 ] >>233 さん 書き込み後、文字列→配列へ変換→処理→文字列へ返還でできましたが、 やはりコードが汚くなったので悩んでいました。 PStoreについて勉強してみようと思います。 これで悩みが解決しそうです。ありがとうございました!
235 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 14:00:53 ] >>234 JSON や YAML の文字列に変換するという手もある。
236 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 14:16:02 ] 「文字列→配列へ変換→処理→文字列」と似たようなシロモノ紹介してどうする