|
View:
New views
20 Messages
—
Rating Filter:
Alert me
|
| < Prev | 1 - 2 - 3 - 4 | Next > |
|
|
[ruby-list:46143] るびま 標準添付ライブラリ紹介 第3回のサンプル EUC-JPの結果前川です。 るびま 標準添付ライブラリ紹介 第3回のサンプル実行してみましたが、 【EUC-JP で表された 'Hello, るびま!'】の実行結果は、 2ではなく、5となりました。どちらが、正しいのでしょうか。教えてください。 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− #!C:/Ruby/bin/ruby.exe print "Content-Type: text/html\n\n" require 'kconv' require 'nkf' CODES = { NKF::JIS => "JIS", NKF::EUC => "EUC", NKF::SJIS => "SJIS", NKF::BINARY => "BINARY", NKF::UNKNOWN => "UNKNOWN(ASCII)", } # ISO-2022-JP で表された 'Hello, るびま!' str_iso2022jp = "\x48\x65\x6c\x6c\x6f\x2c\x20\x1b\x24\x42\x24\x6b\x24\x53\x24\x5e\x21\x2a\x1b\x28\x42" puts Kconv.guess(str_iso2022jp) # => 1 == Kconv::JIS # EUC-JP で表された 'Hello, るびま!' str_eucjp = "\x48\x65\x6c\x6c\x6f\x2c\x20\xa4\xeb\xa4\xd3\xa4\xde\xa1\xaa" puts Kconv.guess(str_eucjp) # => 2 == Kconv::EUC;;結果は、5となる # Shift_JIS で表された 'Hello, るびま!' str_shiftjis = "\x48\x65\x6c\x6c\x6f\x2c\x20\x82\xe9\x82\xd1\x82\xdc\x81\x49" puts Kconv.guess(str_shiftjis) # => 3 == Kconv::SJIS # UTF-8 で表された 'Hello, るびま!' str_utf8 = "\x48\x65\x6c\x6c\x6f\x2c\x20\xe3\x82\x8b\xe3\x81\xb3\xe3\x81\xbe\xef\xbc\x81" puts Kconv.guess(str_utf8) # => 6 == Kconv::UTF8 # UTF-16BE (BOM 付き) で表された 'Hello, るびま!' str_utf16be = "\xfe\xff\x0\x48\x0\x65\x0\x6c\x0\x6c\x0\x6f\x0\x2c\x0\x20\x30\x8b\x30\x73\x30\x7e\xff\x1" puts Kconv.guess(str_utf16be) # => 8 == Kconv::UTF16 # UTF-16LE (BOM 付き) で表された 'Hello, るびま!' str_utf16le = "\xff\xfe\x48\x0\x65\x0\x6c\x0\x6c\x0\x6f\x0\x2c\x0\x20\x0\x8b\x30\x73\x30\x7e\x30\x1\xff" puts Kconv.guess(str_utf16le) # => 8 == Kconv::UTF16 参考に勉強を始めたばかりです。 記載されているサンプルコードはunixベースと思われますが、 windows 版に修正しながら、確認しています。 Rubyに関してはまったくの初心者です。 対処方法につき、ご教示いただきますよう、よろしくお願いします。 今使用しているRubyは、 C:\Apache2.2\htdocs\ruby_prg\em_ruby>ruby -v ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] O/Sは、windows_xpです。 質問1. 本書p26に記載のattr_readerを使用しましたが、エラーとなりました。 エラーメッセージは、 C:\Apache2.2\htdocs\ruby_prg\em_ruby>ruby em_song2r1.rb Content-Type: text/html em_song2r1.rb:13: undefined local variable or method `artist' for Song:Class (NameError) です。 コードは、以下です。 −−−−−−−−−−−−ソースコード−−−−−−−−− #!C:/Ruby/bin/ruby.exe print "Content-Type: text/html\n\n" # #プログラミングRuby第2版 言語編 サンプルl #2009/06/03 E.MAEKAWA #実行するI.E.のアドレス #http://localhost:8080/ruby_prg/em_ruby/em_tutorial.rb # #Songクラス class Song attr_reader(name,artist,duration) #undefined local variable or method `duration' for Song:Class (NameError)が生じる。原因不明 # name の初期化 #def name # @name #end #artistの初期化 #def artist # @artist #end #durationの初期化 #attr_writer(duration) #undefined local variable or method `duration' for Song:Class (NameError)が生じる。原因不明 def duration_in_minutes @duration/60.0 # 浮動小数点に強制的に変換 end def duration_in_minutes=(new_duration) @duration = (new_duration*60).to_i end #def duration=(new_duration) # @duration = new_duration #end #データを、設定する。 def initialize(name,artist,duration) @name = name @artist = artist @duration = duration end #データを整形化して、出力する。 #形式;Song: #@name--#@artist (#@duration) def to_s "Song: #@name--#@artist (#@duration)" end end # Song クラスを継承し、歌詞を追加する。 # Songのサブクラス # class KaraokeSong < Song # 初期化処理 #attr_reader :name, :artist, :duration, :lirisc def initialize(name, artist, duration, lyrics) super(name, artist, duration) @lyrics = lyrics end #文字列変換:superクラスのto_sに歌詞を追加 # def to_s super + " [#@lyrics]" end end song = Song.new("Bicylops","Fleck", 660) #曲名、奏者、演奏時間分を設定 puts song.to_s puts song.duration_in_minutes puts song.inspect song.duration_in_minutes = 5.5 puts song.to_s #メイン処理 カラオケ karaoke = KaraokeSong.new("My Way","Sinatra",255,"And now, the end is near...") puts karaoke.to_s puts song.duration_in_minutes puts karaoke.inspect karaoke.duration_in_minutes = 4.2 puts song.duration_in_minutes puts karaoke.to_s −−−−−−−−−−−−−−−−−−−−−−−−−−−−− 質問2. 同本書P.29クラスメソッド記載のコーディングをしても、attr_readerと同様に エラーとなりました。 対処方法につき、教えてください。 エラーメッセージは、 C:\Apache2.2\htdocs\ruby_prg\em_ruby>ruby emSongWithClassMethod.rb Content-Type: text/html emSongWithClassMethod.rb:83:in `is_too_long': undefined method `duration' for #<Song:0x2b4f490> (NoMethodError) from emSongWithClassMethod.rb:88 です。 コードは、以下です。 −−−−−−−−−−−−−−−ソースコー ド−−−−−−−−−−−−−−−−−−−−−−−−− #!C:/Ruby/bin/ruby.exe print "Content-Type: text/html\n\n" require 'rubygems' # #プログラミングRuby第2版 言語編 サンプルl #2009/06/03 E.MAEKAWA #実行するI.E.のアドレス #http://localhost:8080/ruby_prg/em_ruby/em_tutorial.rb # #Songクラス class Song #attr_reader(name,artist,duration)##undefined local variable or method `duration' for Song:Class (NameError)が生じる。原因不明 @@plays = 0 # クラス変数 回数 # name の初期化 def name @name end #artistの初期化 def artist @artist end #durationの初期化 #attr_writer(duration) #undefined local variable or method `duration' for Song:Class (NameError)が生じる。原因不明 def duration_in_minutes @duration/60.0 # 浮動小数点に強制的に変換 end def duration_in_minutes=(new_duration) @duration = (new_duration*60).to_i end #def duration=(new_duration) # @duration = new_duration #end #データを、設定する。 def initialize(name,artist,duration) @name = name @artist = artist @duration = duration @plays = 0 end # クラス変数で、回数を記録する。 def play @plays += 1 # @plays = @plays + 1 と同じ @@plays += 1 # @@plays= @@plays + 1 と同じ puts "This song: "+@plays.to_s+" plays. Total # "+@@plays.to_s+" plays." end #データを整形化して、出力する。 #形式;Song: #@name--#@artist (#@duration) def to_s "Song: #@name--#@artist (#@duration)" end end # Song クラスを継承し、歌詞を追加する。 # Songのサブクラス # class KaraokeSong < Song # 初期化処理 #attr_reader :name, :artist, :duration, :lirisc def initialize(name, artist, duration, lyrics) super(name, artist, duration) @lyrics = lyrics end #文字列変換:superクラスのto_sに歌詞を追加 # def to_s super + " [#@lyrics]" end end #SongListクラス 曲の長さを判定する class SongList MAX_TIME = 5*60 #5分以下の曲を選択する。 def SongList.is_too_long(song) return song.duration > MAX_TIME end end song = Song.new("Bicylops","Fleck", 299) #曲名、奏者、演奏時間分を設定 puts SongList.is_too_long(song).to_s #if SongList.is_too_long(song) #puts "5分以上です。"+song1.duration_in_minutes.to_s+"のため、演奏できませ ん。" # else # song.play # song.play #end # song.duration_in_minutes = 5.5 # puts song.duration_in_minutes puts SongList.is_too_long(song) #if SongList.is_too_long(song) puts "5分以上で す。"+song.duration_in_minutes.to_s+"のため、演奏できません。" # else # song.play #end #メイン処理 カラオケ karaoke = KaraokeSong.new("My Way","Sinatra",255,"And now, the end is near...") puts SongList.is_too_ong(karaoke) #if SongList.is_too_long(karaoke) # puts "5分以上です。"+song1.duration_in_minutes.to_s+"のため、演奏できま せん。" #else # karaoke.play #end #puts song.duration_in_minutes #puts karaoke.inspect puts SongList.is_too_long(karaoke) #if SongList.is_too_long(karaoke) # puts "5分以上です。"+song1.duration_in_minutes.to_s+"のため、演奏できま せん。" #else # karaoke.play # karaoke.duration_in_minutes = 5.0 # puts karaoke.duration_in_minutes # puts karaoke.to_s # karaoke.play #end −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− |
|
|
[ruby-list:46144] Re: るびま 標準添付ライブラリ紹介 第3回のサンプル EUC-JPの結果木村です。
おそらく、ruby-list 45609 〜 45622 あたりで話題になっているのと同一原因では なかろうかと思います。 On Fri, 3 Jul 2009 08:59:18 +0900 eiichi_maekawa@... wrote: > るびま 標準添付ライブラリ紹介 第3回のサンプル実行してみましたが、 > > 【EUC-JP で表された 'Hello, るびま!'】の実行結果は、 > 2ではなく、5となりました。どちらが、正しいのでしょうか。教えてください。 (略) > # EUC-JP で表された 'Hello, るびま!' > str_eucjp = > "\x48\x65\x6c\x6c\x6f\x2c\x20\xa4\xeb\xa4\xd3\xa4\xde\xa1\xaa" > > puts Kconv.guess(str_eucjp) # => 2 == Kconv::EUC;;結果は、5となる > (略) > 今使用しているRubyは、 > C:\Apache2.2\htdocs\ruby_prg\em_ruby>ruby -v > ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] > O/Sは、windows_xpです。 つまり、本来は2とならなければならないはずの判定結果が 5になってしまっている ということです。 使用する文字列を誤判定しないようなものにすればただしく 2 が返ってきます。 irb(main):016:0> Kconv.guess("\xb5\xfe\xc5\xd4\xb9\xb9\xd4") => 2 -- 木村浩一 |
|
|
[ruby-list:46153] Re: るびま 標準添付ライブラリ紹介 第3回のサンプル EUC-JPの結果成瀬です。
eiichi_maekawa@... wrote: > # EUC-JP で表された 'Hello, るびま!' > str_eucjp = > "\x48\x65\x6c\x6c\x6f\x2c\x20\xa4\xeb\xa4\xd3\xa4\xde\xa1\xaa" > > puts Kconv.guess(str_eucjp) # => 2 == Kconv::EUC;;結果は、5となる 1.8.6はバグで5が返ります。 1.8.7や1.9では正しく2が返るはずです。 -- NARUSE, Yui <naruse@...> |
|
|
[ruby-list:46165] Re: に関する1.8.6→1.8.7または、1.9へのバージョンア |
|
|
[ruby-list:46183] 1.8.6から1.8.7または、1.9へのバージョンアップ及 |
|
|
[ruby-list:46189] Ruby MySQL テーブル一覧の取得要領前川です。
MySQLのテーブル名を取得したいのですが、 うまく取れません。 実施したコーディングは、 mydb = Mysql.new('localhost','root','dbkey','ndesign') res = mydb.query('SHOW TABLES FROM ndesign') です。resにテーブル名が、入ると想定したものです。 puts res.to_s を実行すると、 #<Mysql::Result:0x2ea07e8> と表示されます。 よろしくお願いしします。 |
|
|
[ruby-list:46190] Re: 1.8.6から1.8.7または、1.9へのバージョンアップ及 |
|
|
[ruby-list:46191] Re: Ruby MySQL テーブル一覧の取得要領okkez です。
2009/07/08 17:47 に <eiichi_maekawa@...> さんは書きました: > 前川です。 > > MySQLのテーブル名を取得したいのですが、 > うまく取れません。 > > 実施したコーディングは、 > > mydb = Mysql.new('localhost','root','dbkey','ndesign') > res = mydb.query('SHOW TABLES FROM ndesign') > > です。resにテーブル名が、入ると想定したものです。 > > puts res.to_s > > を実行すると、 > #<Mysql::Result:0x2ea07e8> > と表示されます。 > > よろしくお願いします。 > テーブル名 (が格納されているオブジェクト) を取れていると思います。 ちゃんとマニュアルを読んでください。 -- okkez okkez000@... |
|
|
[ruby-list:46193] Re: Ruby MySQL テーブル一覧の取得要領MySQLが返すobjectをどうすれば、解析できるでしょうか? 取得したobjectは、どうすれば、解析できるでしょうか? マニュアルは、どこを読めばよいでしょうか? ヒントをお願いします。 objectでサーチしても、わかりませんでした。 (objectに関する説明が書かれていましたが・・、 私の探し方が悪いと思います。) SELECT * FROM テーブル名 でデータを取得した場合は、 res = mydb.query('SELECT * from elist') puts res.to_s #結果確認 res.each do |row| puts row.to_s end で、確認できたのですが・・・ よろしくお願いします。 okkez <okkez000@...> wrote on 2009/07/08 18:03:28: > okkez です。 > 2009/07/08 17:47 に <eiichi_maekawa@...> さんは書きました: > > 前川です。 > > > > MySQLのテーブル名を取得したいのですが、 > > うまく取れません。 > > > > 実施したコーディングは、 > > > > mydb = Mysql.new('localhost','root','dbkey','ndesign') > > res = mydb.query('SHOW TABLES FROM ndesign') > > > > です。resにテーブル名が、入ると想定したものです。 > > > > puts res.to_s > > > > を実行すると、 > > #<Mysql::Result:0x2ea07e8> > > と表示されます。 > > > > よろしくお願いします。 > > > テーブル名 (が格納されているオブジェクト) を取れていると思います。 > ちゃんとマニュアルを読んでください。 > > -- > okkez > okkez000@... |
|
|
[ruby-list:46194] Re: Ruby MySQL テーブル一覧の取得要領こんにちは、嶋です。
Mysql#list_tables というメソッドがあるようですね。 メソッド名からおそらく show tables の結果が返ってきそうな気がし ます。 ---- Shima Shizuo r6@... |
|
|
[ruby-list:46195] Re: 1.8.6から1.8.7または、1.9へのバージョンアップ及 |
|
|
[ruby-list:46196] Re: Ruby MySQL テーブル一覧の取得要領さくです。
2009/07/09 7:52 に <eiichi_maekawa@...> さんは書きました: > MySQLが返すobjectをどうすれば、解析できるでしょうか? > 取得したobjectは、どうすれば、解析できるでしょうか? > マニュアルは、どこを読めばよいでしょうか? >実行すると、 >#<Mysql::Result:0x2ea07e8> とあるようにMysql#queryメソッドが Mysql::Result オブジェクトを返すので、 http://www.tmtm.org/mysql/ruby/ の該当クラスの説明を読みます。 fetch_ で始まるメソッドや each, each_hash を使えますね。 Mysql::Resultは each を実装しているので、 res = mysql.query('show tables') res.extend Enumerable table_names = res.map {|row| row[0] } とするのがRuby風なのかもしれませんが、嶋さんがお書きの list_tables が簡便ですね。 -- OZAWA Sakuro |
|
|
[ruby-list:46197] Re: Ruby MySQL テーブル一覧の取得要領・Re: ruby-list:46194嶋さん、ありがとうございました。
mysql.rbには、 def list_tables(table=nil) real_query "show tables #{table}" @status = :STATUS_READY read_rows(1).flatten end とありましたので、 mydb = Mysql.db_connect('localhost','root','dbkey','ndesign') res = mydb.list_tables() resData = res.flatten puts resData で、テーブル名が、とれていることが、確認できました。 flattenというメソッドは、初めてです。 まったく、知らないことばかりです。 Shima Shizuo <r6@...> wrote on 2009/07/09 08:37:24: > こんにちは、嶋です。 > Mysql#list_tables というメソッドがあるようですね。 > メソッド名からおそらく show tables の結果が返ってきそうな気がし > ます。 > ---- > Shima Shizuo r6@... |
|
|
[ruby-list:46198] Re: Ruby MySQL テーブル一覧の取得要領:ruby-list:46196前川です。
さくさん、ありがとうございます。 > http://www.tmtm.org/mysql/ruby/ の該当クラスの説明を読みます。 MySQL/Rubyは、参考にさせていただきます。 いろんなところに、Rubyに関するいろんなマニュアルがあるんですね。 下記は、今後のMySQL関連作成の参考にさせていただきます。 > fetch_ で始まるメソッドや each, each_hash を使えますね。 > res = mysql.query('show tables') > res.extend Enumerable > table_names = res.map {|row| row[0] } 了 |
|
|
[ruby-list:46199] Re: 1.8.6から1.8.7または、1.9へのバージョンアップ及 |
|
|
[ruby-list:46200] Rubyバージョン・Railsについて・ruby-list: |
|
|
[ruby-list:46201] Re: Rubyバージョン・Railsについて・ruby-list: |
|
|
[ruby-list:46202] Re: Rubyバージョン・Railsについて・ruby-list: |
|
|
[ruby-list:46213] るびま 標準添付ライブラリ紹介 第3回のサンプル EUC-JPの結果:ruby-list:46153マエカワです。
成瀬さんのコメントに従い、rubyのバージョンを1.8.7にして、再度確認しました。 C:\>ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32] 結果は、 "\x48\x65\x6c\x6c\x6f\x2c\x20\xa4\xeb\xa4\xd3\xa4\xde\xa1\xaa"は、ruby1.8.7 でも 5となりました。 "\xb5\xfe\xc5\xd4\xb9\xb9\xd4"では、正しい2となりました。 1.8.7でも、コードが混在(\x2c、\x20等)した場合は、正しい結果を返せない?? Kconv.guessを使用する場合は、注意が、必要ですね。 了 > 成瀬です。 > eiichi_maekawa@... wrote: > > # EUC-JP で表された 'Hello, るびま!' > > str_eucjp = > > "\x48\x65\x6c\x6c\x6f\x2c\x20\xa4\xeb\xa4\xd3\xa4\xde\xa1\xaa" > > > > puts Kconv.guess(str_eucjp) # => 2 == Kconv::EUC;;結果は、5となる > 1.8.6はバグで5が返ります。 > 1.8.7や1.9では正しく2が返るはずです。 > -- > NARUSE, Yui <naruse@...> |
|
|
[ruby-list:46252] Re: るびま 標準添付ライブラリ紹介 第3回のサンプル EUC-JPの結果:ruby-list:46153とみたです。
On Thu, 16 Jul 2009 14:06:41 +0900 eiichi_maekawa@... wrote: > 成瀬さんのコメントに従い、rubyのバージョンを1.8.7にして、再度確認しました。 > > C:\>ruby -v > ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32] > > 結果は、 > > "\x48\x65\x6c\x6c\x6f\x2c\x20\xa4\xeb\xa4\xd3\xa4\xde\xa1\xaa"は、ruby1.8.7 > でも > 5となりました。 最新の 1.8.7-p174 で試すと 2 となります。 -- とみたまさひろ <tommy@...> 3469 42CC 4D32 F53C AD98 65A5 8C37 FF09 69C1 6040 |
| < Prev | 1 - 2 - 3 - 4 | Next > |
| Free embeddable forum powered by Nabble | Forum Help |