[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/16 09:04 / Filesize : 244 KB / Number-of Response : 847
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 23



1 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 04:30:21 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
   【最新安定版の Ruby1.8.7 の使用をお勧めします】
    ※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。
      1.9 の新機能の一部が利用可能なので初学者にお勧めです。
    ※ただし十分安定しているとは言えないので
      プロダクション環境での利用にはお勧めしません。

関連スレや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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

206 名前:デフォルトの名無しさん [2008/12/06(土) 01:42:36 ]
追記です。
ルビーのバージョンは1.8.6で無料サーバでつかうため、パッチやバージョンアップ以外の方法でバグ回避方法をおしえてください。

207 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 01:44:16 ]
実際のスクリプトの部分を見せることができないのは村の掟とかそういうのなんですよね

208 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 01:44:39 ]
>>205
ruby本体のbugだから、まずは最新版で試してみて。
それでも再発するなら、出来る限り余分な部分を削った再現コードを作って
ここか本スレかruby-listに晒せばおk。そのときruby -vの提示を忘れずに。
あとは偉い人がよろしくやってくれるはず。


209 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 01:47:13 ]
>>206
・・・まあ再現コード見せて。
そのコードを作ること自体が「回避の方法」だったりするし。

210 名前:デフォルトの名無しさん [2008/12/06(土) 01:58:16 ]
コードは晒せないですが、
openでファイル作成やREXML::Documentとグローバル配列とメソッドだけでね。
今やったらなぜメソッド中の注釈「# DATAURL 」の行を指して
[BUG] Segmentation fault
ruby 1.8.6 (2008-08-11) [i386-mswin32]
って出ました。わけわからん。

211 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 02:00:28 ]
無料サーバであいさんはちろくえむえすうぃんさんじゅうに?

212 名前:デフォルトの名無しさん [2008/12/06(土) 02:05:23 ]
>>211
RDEでデバッグしながらですがけど...
鯖だとデバッグできないですから..

213 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 02:18:57 ]
>>210
再現コードがないと、なんともコメントできない。

214 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 02:19:25 ]
うむ



215 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 02:19:34 ]
村の掟ワロタ

216 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 02:52:30 ]
コード晒せないのなら諦めろ、あるいは自力で解決しろ
Segmentation faultだけでは、アドバイスする側にもわけわからん

217 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 02:53:36 ]
gdb coreして、whereだ。
何かが分かる気はしないけどね。

218 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 08:57:37 ]
未知か既知かわからないRuby本体のバグを誰かがわからないけどどっかで踏んでる、ということだな
それ以上のことはなんもならん

219 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 10:53:07 ]
セグフォはRubyのバグだから投稿すれば本来治してくれるんだけど
再現コード無いのは無理だなあ

220 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 14:02:12 ]
リファレンスマニュアルの終了処理に、「exit(3) で終了」って書いてあるけど、なぜ 3 なんですか?ただの例?

221 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 14:11:45 ]
>>220
0は成功、1かそれ以上は失敗
ということで、ただの例ですな

222 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 14:18:02 ]
>>220
exit(3)の3はmanのセクション番号でライブラリコールだってこと。
詳しくはman man

他にもwrite(2)とかがある

223 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 14:19:29 ]
>221
多分それ違う

>220
exit(3) のリンク先を見れば判ると思うけど、この exit はC言語の関数の exit() のこと。
要はRubyが内部でやってる処理を説明している。
Linuxのマニュアルのセクション3にあるexit()の通りの処理をしてるよ、という意味。

224 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 15:51:10 ]
マニュアルにある exit(3) の (3) は引数を表してるわけじゃないんですね。
>>221-223
ありがとうございました。



225 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 16:25:24 ]
>>204
なんでだよ
Rubyってなんでもできる万能言語って聞いたんだが

226 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 16:30:20 ]
>>225
ではその人を責めてください
サンタクロースが実在しなかったからといってサンタ役のお父さんをバシバシ叩くのはやめてください

227 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 22:22:34 ]
>>225-226
ワロタw

228 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 23:51:21 ]
エクセルをRubyで動かしたいんだけど、OLEが分からないからエクセルのマクロスクリプトを
Rubyのプログラム上からエクセルに渡して動かす、みたいなことはできますか?

229 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 00:35:40 ]
エクセルオブジェクトにそういう機能があれば、
呼び出す側の言語が何であろうと出来るんじゃない?


230 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 00:37:45 ]
てかエクセルオブジェクトを使うにはOLEの知識がいるじゃないか。


231 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 06:28:28 ]
メソッドの勉強してるんですが
puts とか getsがメソッドですよといわれたのは良いんですが
self.puts
とか、
100.to__s
とかはわかるのですが
gets.chompはなぜgetsの後ろにchompが付くんですか?
メソッドの前に付くのが普通だと思ってたので・・・

232 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 07:14:23 ]
>231
self.gets.chomp
getsの結果に対してchompするということ
つーかgetsはレシーバ書かないほうが普通だと思うが…

233 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 07:36:31 ]
>>232
ありがとうございます
selfは書かないんですけど
rubyの練習に読んでる
www1.tf.chiba-u.jp/~shin/tutorial/index.rb?Chapter=05
でselfが出てきたので聞いてみました。


234 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 07:50:48 ]
そこ「説明の切り捨て方」がイマイチだな


メソッドチェーンという概念がある(あくまで概念で、文法のようなものではない)
あるメソッドの返り値のオブジェクトのクラスのメソッドを

  返り値を返すメソッド.返り値のクラスのメソッド

で動作させるものだ

関数的メソッドgetsの返り値は文字列であるStringクラスのオブジェクト(=インスタンス)だから、
Stringクラスのメソッドであるchompをメソッドチェーンで記述できる
あくまでメソッドの返り値(またはオブジェクトそのもの)のクラスが重要
返り値のクラスは常に意識しておくといい



235 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 08:31:30 ]
>>231
>gets.chompはなぜgetsの後ろにchompが付くんですか?

s = gets
s.chomp
を一行でかいたら
gets.chomp
になった、というだけのこと。

236 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 08:38:01 ]
>>234
難しい・・・(>_<)
>>235
なるほど

237 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 08:53:23 ]
Rubyはかなり豪快なメソッドチェーンが出来るのが魅力だよな
何だかんだでチェーンが切れるOOPLは多い気がする

238 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 09:01:12 ]
end の後ろにメソッドが平気で繋がるのはやりすぎだとも思える

が、ブロックとして {} を使うことにすると、クラスとメソッド用途によっては異常に便利
self や目的のオブジェクトが意図的に返るように作られてるブロックつきメソッドが多いのが効いてるな

def …
 ナントカ
 カントカ
 yield s if s
 s
end

という定義が多い

239 名前:205 [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行で死亡したぽいですが。

240 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 17:28:44 ]
>>239
>>213-219
だれも「詳細なエラー文を」とは言ってないんだ。

241 名前:205 [2008/12/07(日) 18:03:35 ]
それでは質問を変えます。
C:/Ruby/lib/ruby/1.8/rexml/text.rb:312

このエラーメッセージが意味するのは私のかいたプログラムの312行でエラー発生したのではなくて、
ルビー側が用意している
C:/Ruby/lib/ruby/1.8/rexml/text.rb
の312行目でエラーが発生したと解釈して間違いないですよね?

242 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 18:38:00 ]
>241
それも完全な間違いでは無いが、限りなく間違いに近い。
本来Ruby側はどんな間違ったコードでも
「Rubyの」エラーを出して、コードとしては異常な終了でありながら
Rubyとしては正常に終了しなければならない。
ところが今回RubyはSegmentationFault…つまりRuby自体が異常な終了をしている。
だからRuby制作側としてはRubyを修正すべきなんだが
そのためにはSegmentationFaultが起こる状態を再現しないと
根本的な修正が難しい。
だから、その同じ状態を再現するコードがあったほうが良いのだよ。
…で、ライブラリ由来だとしてもライブラリをどう使うと起こるのか判らない。
SegmentationFaultである限り、貴方に責任はほぼ無いが
修正するには再現コードがないとキツいだろうなあという話。

243 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 18:42:43 ]
ああ、C製の外部ライブラリなんかもセグフォで落ちるか?
どちらにしろセグフォ起こす時点で
貴方自身では勘ぐらいしか対抗手段は無いよ。
で、実際のコードも再現コードも出せないなら
作者も多分修正不能で「原因不明のバグ」としか言えない。

244 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 18:44:40 ]
「[BUG]」を吐いて落ちてるような場合は、インタプリタが具体的に
「ここの行が悪いんでエラーにしますよ」と言ってるわけじゃないから、
その「C:/Ruby/lib/ruby/1.8/rexml/text.rb:312:」はたいした情報にならない。

問題を起こすプログラムから、そこを削っても問題が同じように起こる場所は
全部削っていって、問題を起こす最小のセットを作るしか、Rubyを作ってる
側としても対処のしようがない(普通は)。

(たまに、実は把握済みの問題で「このパッチだよ」というのが出てくることも
あるがそれは宝くじのようなものなので)



245 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 18:45:26 ]
>>241
情報が少なすぎて判断出来ないし、ここでやる内容とも思えない
問題のソースとエラーメッセージの全てを出して作者に聞け

246 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 18:45:35 ]
最新版が使えるなら最新版にしたら直ってるかも知れない。
最新版が使えないなら原因がネット上に落ちてるかも知れない。
…で、ネット上探すのは再現コードを見れないと厳しい。

247 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 20:10:06 ]
>>239
とりあえずコードが公開可能なものならどこかのアップローダーに公開すれば
いいわけで…。公開不可能ならMatzにそのソースを送りつければいいや。

ちなみに現在の最新安定版は1.8.7-p72だからそれを導入してみて
もう一度やってみれば?もしそれでもSegmentation Faultが出るなら
もう一度ここに来て。

Rubyの公式サイト
www.ruby-lang.org/ja/

248 名前:デフォルトの名無しさん [2008/12/07(日) 20:53:45 ]
>>242
おまえはキモイな。rubyなんかやるよりも死んだ方がいいんじゃないか?どうせ友達なんかいないんだろw

249 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 20:58:18 ]
ルビー使い自称ルビリスト(笑)なんて所詮は囚人程度の脳味噌しかないからあまり関わんないほうがいい

250 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 21:14:00 ]
>>248
ロジックで敗れたのでヒステリーで対抗ですね、わかります。

251 名前:デフォルトの名無しさん [2008/12/07(日) 21:20:15 ]
>>249
そのようだなw

252 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 21:49:47 ]
>>248
そんなカキコミしてる暇あったら、再現コードを用意しようぜ。
SegmentationFaultのバグは、再現コードがないとエスパーしようがない。

253 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 22:03:56 ]
おまえらけんかすんなよ

254 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 23:37:37 ]
1.8.5ででかいのをREXMLに食わせたらSEGVったって話が
結構前にruby-devにあったような。



255 名前:デフォルトの名無しさん [2008/12/08(月) 03:09:02 ]
度々すいません。
open命令でXMLファイルをサイト経由で取得した場合、

result = open(a2)

resultには#<File:0x2c07f2c>という内容しか入っていないようなのですが、
帰ってきたサイトのHTMLデータといいますか、そのようなものを見るにはどうしたらいいのでしょうか。
色々とテストしてみたら、どうも帰ってくるXMLデータが相手サーバの都合か何かで変な状態で返されものを
REXML::Document.newで開くとコケるみたいです。
どんなファイルのときにこけているか分かれば対策の打てるような気もします。

256 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 03:20:24 ]
テンプレ。
>質問には以下を書くこと。へたくそな質問は再提出を要求される。
> ・エラーメッセージ(自力で訳さずなるべくそのままで)

エスパーしてみると、エラーを突っ返されても構わずREXML::Document.newに渡しているせいで
XMLとしては当然解釈できずパースエラーとか。

257 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 03:32:51 ]
>>255
>result = open(a2)

a2 が何かしらんけど、open() が返すのはFileオブジェクトじゃないかな。
だから
result = open(a2) {|file| file.read }
とか
file = open(a2)
result = file.read()
file.close()
とかすればいいんじゃないかな。

258 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 06:22:33 ]
>>257
そんなどのマニュアルにもどんな解説にも書いてあるようなことで>>255さんが詰まるはずないだろ馬鹿か?
[BUG] って書いてあるんだからこっちに落ち度はなくてRubyが一方的に悪いに決まってるだろ

259 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 06:35:54 ]
そんな煽りいらないお

260 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 06:56:35 ]
俺らは質問やその後の遣り取りから質問者の知識を当て推量して回答したりしなかったりするわけだが、
>>258と言いたくなるのは今回は仕方があるまい
openを一度でも自分で使ったことがあるならわかることだからな
書き込みの際に省略してるだけだと思うしかないわ

261 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 08:46:03 ]
> open命令でXMLファイルをサイト経由で取得した場合、
openつーか、require 'open-uri'した上でのopenだよな?


262 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 08:58:18 ]
>>260
君はキモイからもうこのスレに来なくていい

263 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 09:46:33 ]
>>262
お前キモいな

264 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 10:03:51 ]
262はもうこのスレに来られなくなりました。



265 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 10:21:05 ]
この刃はさすがに鋭いぬ
ひとりでスレ参加仕切るのはキモいわな

266 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 10:55:44 ]
>>255
用語がちょい怪しいからHTTPについてあんま知らんのかも知れんけど、
open-uriで返ってきたオブジェクトに返してはFileとかの他にOpenURI::Metaについても
調べてみてくれ。
向こうのサーバがOKなレスポンスを返したかとかの調べ方がわからんのだったらまさにそれ。

267 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 11:35:17 ]
中身を見るには require 'pp' して pp で見るといいお

268 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 11:40:13 ]
(pretty_)inspectでフォローされてるとは限らないけどな

269 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 11:50:24 ]
pretty_inspectの書式のめんどくささは異常

270 名前:デフォルトの名無しさん [2008/12/08(月) 14:33:22 ]
このプログラムでなぜかこけるのですが、原因って分かりますか?

#!/usr/local/bin/ruby -Ks
# REXML宣言 XMLデータを処理するための
require 'rexml/document'
require 'open-uri'
require 'uri'
result = open("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するとエラーするぽいですけど。


271 名前:デフォルトの名無しさん [2008/12/08(月) 14:55:36 ]
訂正します
#!/usr/local/bin/ruby -Ks
require 'rexml/document'
require 'open-uri'
require 'uri'
result = open("10plate.blog44.fc2.com/?xml")
toto = result.read
doc = REXML::Document.new(result)


272 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 15:09:22 ]
そりゃ読み終わってりゃ中身は空だからなあ。当然だろう

273 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 15:16:28 ]
引数はXML文字列でもいいのに…
てかREXMLでパースしたなら元のファイル別にいらないじゃんね

274 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 15:56:10 ]
Rubyでエクセルのグラフを描きたいんですが、エラーでうまくいきません。
OLE詳しい人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")

#続く



275 名前:デフォルトの名無しさん mailto:sage [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

#コード終了 エラーメッセージが続きます

276 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 15:57:40 ]
C:/ruby/mysrc/rb3C.tmp:112: syntax error, unexpected tCONSTANT, expecting kEND
chart1.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)


以上です。よろしくお願いします。

277 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 16:00:03 ]
ちょっと聞くけど、VBA使ったり他の言語からOLE経由する方法では自分でグラフ描けるんだよね?
まさかRubyの知識しかないのにWin32OLE使ってるわけじゃないよね?

278 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 16:50:49 ]
>>277
いや、そのまさかです。
マクロの記録→編集でVBAのコードを作ってそれをRubyに書き換えたつもりだったんですが・・・



279 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 18:44:44 ]
>>276
> 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行目より前のどこかに閉じ忘れた " がある
エラーメッセージぐらい読めるようにならないと、いつまでたっても素人のままだぜ

280 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 20:32:41 ]
endの閉じ忘れ文法エラーが初心者の頃は面倒だったね
どこで閉じ忘れたのかを探しにくいからね

1.9.1だとendのインデントのずれを指摘するパッチが取り込まれたので
-wオプションつければずれてるendを警告してくれて
抜けてるendの位置をちょっと絞り込める

ところで、エラーメッセージの
tCONSTANT とか kENDってなに?
YACCのトークンとかいうやつ?
構文解釈中のエラー?
そんな内部の情報を直に見せられても、初心者にはわけわからんよ
ま、わからんなりに
「endじゃなくて定数が来ちゃってる文法エラー」だなということは理解できるんだけど


281 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 20:46:15 ]
文字列リテラルの閉じ忘れはエラーがどかどかでるので割と判りやすいけど
閉じ忘れた文字列から、はるか後ろのほうでエラーが出る場合があるので
やっぱり最初の頃は修正が面倒だったな

エラーが出た個所で文字列を閉じてるのが ' か " を確認して、
それより前のクォート文字を検索する
閉じ忘れたのが %記法だったら面倒だが

たまに、Windowsのディレクトリパスを書くときに 'C:\test\' とかやって閉じ忘れたりする


282 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 20:47:57 ]
tCONSTANT は定数トークンだろね
でも kEND の k ってなんじゃろ

283 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 20:56:28 ]
keyword

284 名前:282 mailto:sage [2008/12/08(月) 21:03:46 ]
>>283
なるほどサンクス
いい機会だから parse.y 眺めてるお



285 名前:274 mailto:sage [2008/12/08(月) 22:04:13 ]
>>279
レスありがとうございます。
よく見直してみたんですが、「"」の閉じ忘れはありませんでした。
グラフの部分のコードを消して試しに他の操作をさせるとちゃんと動いたので
やはりグラフのコードのどこかが悪いようです。



286 名前:デフォルトの名無しさん mailto:sage [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なの?
もしかしてどんな解説にも書いてあるようなことで詰まってしまったの?

287 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 22:50:02 ]
すごいバカが来たな。

288 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 22:58:26 ]
こういうバカはたいては女
それも女の出来そこないって相場が決まってるw

289 名前:274 mailto:sage [2008/12/09(火) 00:49:17 ]
WIN32OLEに詳しい方、引き続き>>274救助待ちなのでお願いします。

290 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 01:05:07 ]
>>285
やっぱり文字列リテラルの閉じ忘れじゃないのかなぁ
\223\276 って SJISの「得」なんで
そんなのをスクリプトとして解釈しようとするなんて
文字列の閉じ忘れくらいしかない気がする

単純な文字列だけじゃなくて
'〜' とか "〜"だけじゃなくて 正規表現リテラルとか /〜/ とか
%記法の %w(〜) とか %Q(〜) %r!〜! みたいなのも有るんで
%記法だと任意の記号を使えるので注意

しかも%記法の %q!! %Q!! %r!! %x!!だと、区切り文字に空白やタブや改行も使えてしまうぞ
%q a だと'a' と同じ意味
そんなの使ったスクリプトなんて、もはや嫌がらせだが


291 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 01:40:27 ]
>>274-275にsyntax errorはないもんなぁ。
なんかダメもとでスクリプトの先頭に
#!ruby -Ks
と書き足してみるとか。

292 名前:274 mailto:sage [2008/12/09(火) 02:15:06 ]
>>290
「得」は「得点」ですね・・・
ここに載せる際にエラーコードはそのままに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::」の位置でエラーになるようです。

293 名前:274 mailto:sage [2008/12/09(火) 02:20:35 ]
連レススミマセン。
あとモジュール定義の所
module Excel
end
から
module ExcelConst
end
に変更しています。

294 名前:291 mailto:sage [2008/12/09(火) 02:32:05 ]
SJISの「ソ」みたいにSJISだと思わずに扱うと面倒が起きる文字があって、
rubyに-Ksオプションを付ける(shebangっぽく>>291でもOK)と
rubyもSJISで書かれたスクリプトだと承知して字句解析する。

リファレンスを引くなら$KCODEあたりがとっかかりだろうか。



295 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 02:48:40 ]
>それと直接の関係はなさそう(上では表面化しなかっただけかも)ですが、
>excel = WIN32OLE.new('Excel.Application')の下に
>WIN32OLE.const_load(excel, ExcelConst)を追加しました。
>これがないと「ExcelConst::」の位置でエラーになるようです。

それは当たり前です。ただ空のモジュールを作ったってExcelの定数を扱えるわけがありません。
なんかサンプルのスクリプトをもとに頑張ってる感じがしますが、もしそうだとしたら
もうちょっとちゃんと真似したようがよいと思います。

296 名前:デフォルトの名無しさん mailto:sage [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
となっていてユーザディレクトリが含まれているのが怪しいと思うのですがここの設定を変えることはできるのですか?

297 名前:274 mailto:sage [2008/12/09(火) 03:03:27 ]
>>291
なるほど。説明ありがとうございます。
「"#!ruby -Ks"」とググったらリファレンスのFAQがヒットしたので読んでました。

それと自己解決しました!
>>292のエラーコードの通りsaveプロパティの問題でした。
グラフを新しいシートに書き出したのが問題だったのかもしれません(勝手な予想)
saveAsで上書きしたらうまく行きました。

>>295
スミマセン。仰る通りネット上に落ちてるコードを参考にいじって書いてます。


レス、指摘くれた方々ありがとうございました。
おかげさまで無事動かせました。

298 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 03:12:30 ]
>>296
カレントディレクトリにhpricot.rbというファイルがあって
それがrequireされているのではないでしょうか。

299 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 03:30:35 ]
>>298
BINGOです!お恥ずかしい・・・・。
ファイル名で中身がわかるようにしていたらモジュール名を使っていました。
本当に初心者的なミスですいません。

300 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 03:38:05 ]
ここは初心者スレだからOKだよ
そのためのスレだよ

>>298
ナイスエスパー
きみにはエスパー初段を与える

301 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 03:43:02 ]
>>298->>299の流れを見ていたら和んでしまった
>>299をフォローする>>300にも和んでしまった

302 名前:298 mailto:sage [2008/12/09(火) 03:50:28 ]
なんかどっかのブログで>>296みたいなミスと質問はFAQにして良くね?
っていうエントリを見たばっかりだったもんで。あと
./hpricot.rb:35: undefined method `Hpricot' for main:Object (NoMethodError)
^^^^^^^^^^^
ここ。

わかりやすいファイル名にしたいという趣旨は理解できる。
例えばtry_とかいうプレフィクスがいいかも。
test_だとまんまテストみたいだし、experiment_とかattempt_とか長いし。

303 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 04:01:37 ]
シェルスクリプトでRuby回してパイプして出力って一般的?

304 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 07:00:38 ]
>>302
前スレでも同じ質問あったしな



305 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 08:38:19 ]
>>303
日本語でおk


306 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 10:25:21 ]
>>35
日本語でおkって言ってみたかっただけだろ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<244KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef