トップページ⇒tech
1001コメント342KB

Ruby 初心者スレッド Part 30

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/08/08(土) 08:21:23
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.1 は初心者には時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
   (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に未対応であるためです。)
 なお 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 で勉強すれば将来スムーズに 1.9 系に移行できるでしょう。

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の 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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0415デフォルトの名無しさん2009/08/25(火) 13:49:37
どんだけ金ないんだよ
0416デフォルトの名無しさん2009/08/25(火) 14:09:29
ここは学生スレ
0417デフォルトの名無しさん2009/08/25(火) 15:47:13
s = Path::changeext($0, ".cfg")
t = Path.new(s)
t.changeext(".xml") #==> Path::changeext(s, ".xml")

みたいな使い方をしたいんですけど
クラスメソッドとインスタンスメソッドのoverloadなんて無理?

# Pathはただの例です
0418デフォルトの名無しさん2009/08/25(火) 15:57:06
インスタンスメソッドの中でクラスメソッドを呼ぶとかそういう話ではなく?

class Path
 def change_ext(sfx)
  return self.class.change_ext(@str, sfx)
 end
 def self.change_ext(str, sfx)
  …
 end
end
0419デフォルトの名無しさん2009/08/25(火) 19:00:25
>>417
Path::changeext() と t.changeext() はそれぞれ別のメソッドが呼ばれます。

なおその例で「overload」というのは誤解を招くので使わない方がいいです。
質問するなら、
「クラスメソッドとインスタンスメソッドで同じメソッド名を使うことってできる?」
ぐらいにしておけば、overloadという単語を使わなくても済んだでしょう。
0420デフォルトの名無しさん2009/08/25(火) 19:30:18
てか、クラスメソッドの起動で :: を使う人は Ruby ではまずいない
Ruby では :: の右に来るのは定数で、 . の右に来るのはメソッドだから

Ruby ではクラスも定数として格納されてるから、

irb> CONST = 1
irb> CONST = 2
 (irb)2: warning: already initialized constant CONST
irb> class Foo; end
irb> Foo = 2
 (irb):4: warning: already initialized constant Foo

ネストしたクラスは Foo::Bar::Baz と :: で連結するし、
あるクラス Hoge の定数 CONST は :: で連結して Hoge::CONST と綴る

Ruby ではインスタンスメソッドは一般クラスから作られたオブジェクトに属するメソッドだから、
特定のクラスのオブジェクトというかインスタンス s に属するインスタンスメソッド mes は
特定のクラスのインスタンス s に . でメソッドを繋げて s.mes と書くし、
Ruby では スクリプト中に存在するアクセス可能なクラスは Class(または Module)クラスのインスタンスだから、

irb> p "str".class
String
irb> p String.class
Class

クラス S に属するメソッドつまりクラスメソッド moge は
Class クラスのインスタンス S に . でメソッドを繋げて S.moge と表現する
0421デフォルトの名無しさん2009/08/25(火) 21:18:28
ちょっとはじめたばっかりでしつもんなんですけど
Array.newと[]やHash.newと{}のどっちがいいとかありますか?
始めたばっかりでくせをつけておくなら今のうちかなとおもいましたので
こうやるやるべきとかのってるページとかありますか?
0422デフォルトの名無しさん2009/08/25(火) 21:28:09
機能的には同じなので好きなほう使え

[] や {} のリテラル形式は短い
短いということはそれだけで大きな価値がある
ただし hoge#[] メソッド や ブロック {} と一瞬区別がつけにくいことがありうる
一瞬でも読み下しに詰まる可能性があるということはそれだけでマイナスだ

好きなほう使え
0423デフォルトの名無しさん2009/08/25(火) 21:51:25
おいおい同じじゃないだろ
Hash.new、Array.newはデフォルト値やサイズを設定することができる

オレ的には[]{}を基本に使って、
デフォルト値やサイズを指定したい場合はnewを使うのがおすすめかな
0424デフォルトの名無しさん2009/08/25(火) 21:54:24
そんなこと言ったらリテラルな時点で別物だ
そういう区別をして欲しいわけではないだろう
0425デフォルトの名無しさん2009/08/25(火) 22:01:13
機能的な違いのあるなしと一緒にするな
0426デフォルトの名無しさん2009/08/25(火) 22:01:17
別に {} でもデフォルト値は設定できるよ

h = {}
h.default = 0
p h[:a] #=> 0

マニュアルに書いてあるようなことを知りたいんじゃないと思われ
0427デフォルトの名無しさん2009/08/25(火) 22:14:48
h.default←別のメソッド引っ張り出してきてどうする

質問者の潜在的なニーズがなんであれ間違いを教えるのはよくない
両者は「同じ」と書いてあったから「違いがある」と訂正しただけ
それ以上の意味はない
0428デフォルトの名無しさん2009/08/26(水) 08:28:49
RubyではHTMLのエスケープってどこでやるべき?
0429デフォルトの名無しさん2009/08/26(水) 08:38:43
データ出力時

ただしこれには条件がある
「データ出力者全員が自力でエスケープをしなければならないと認識していること」
これが未来に守られる見込みが全くないのなら、
現在のデータ保管者が親代わりにエスケープするのも致し方ない
0430デフォルトの名無しさん2009/08/26(水) 09:08:39
>>428
template
0431デフォルトの名無しさん2009/08/26(水) 10:09:57
入力時でないことは確か
0432デフォルトの名無しさん2009/08/26(水) 11:42:17
>>420
おまえの文章長いよ
もっと要点を絞って簡潔に書こうぜ
0433デフォルトの名無しさん2009/08/26(水) 12:43:55
>>420を蒸し返すと、

a.some_method(1, "str")
a::some_method(1, "str")

上の2つのスタイルのうち、いずれを使うかは趣味の問題です。
ただしクラスメソッドを呼ぶ場合を除いては第1のスタイルが主流です。
筆者はクラスメソッドに対しても一貫して第1のスタイルを用います。

- 初めてのRubyより -

わざわざリリースマネージャが「〜を除いては」と書くくらいだから、
「まずいない」ということはないだろう。
0434デフォルトの名無しさん2009/08/26(水) 12:56:37
実際の観測として「まずいない」と思うが…
そんな大量にコード見てるわけじゃないが、:: でメソッド呼んだ人は今年一度も見てないぞ
>>417が初めてな気がする
0435デフォルトの名無しさん2009/08/26(水) 13:10:14
大文字で始まるメソッドは、括弧を省略すると::で呼び出せない。
そういう細かい条件を考えると、メソッド呼び出しは.で統一するのが無難。
0436デフォルトの名無しさん2009/08/26(水) 18:45:58
すいませんが、質問させて頂きます。
xmpfilterを使いたいのですが、どうも上手く行きません。
OSはWindowsVista , ruby1.8.6です。

gem install rcodetools  でインストールした後

-------------test.rb--
#! ruby -Ks
p 2+3 # =>
--------------------

上記のファイルに対して

xmpfilter test.rb

を実行すると

-e:1: unterminated string meets end of file
-e:1: warning: useless use of a literal in void context

というエラーが出て、実行してくれません。
空のファイルに対しても、どれも同じエラーが出ます。
どうすれば良いかを教えて下さい。
0437デフォルトの名無しさん2009/08/26(水) 19:18:45
2+3 の後ろに全角空白が入ってるんだけどこれは意図したものかな
04384362009/08/26(水) 19:24:51
>>437
すいません。全角空白は私の不注意でした。
しかし、これを削っても同じエラーが出てしまいます。

ちなみに、xmpfilterを通さなければtest.rbはきちんと実行することが出来ます。
0439デフォルトの名無しさん2009/08/26(水) 19:34:46
自動生成された \bin\xmpfilter がまずいような気もする
もしかして cygwin か?
04404362009/08/26(水) 19:51:21
>>439
いえ、cygwinではなくコマンドプロンプトです。
rcodetoolsが自動生成するファイルがどこにあるのか分からないのですが、
どこに作成するのか教えて頂けないでしょうか?
0441デフォルトの名無しさん2009/08/26(水) 20:29:59
>>440
gem contents GEM名
あとバージョンはruby -v結果のコピペで
それとたぶんOneClickInstallerだと思うんだけどそれも明記するとありがたい
0442デフォルトの名無しさん2009/08/26(水) 21:03:14
>>441
申し訳ありません。gem contents rcodetoolsとするとファイル構成は出てくるのですが
そこからどこに一時ファイルが作られるのか私には分かりませんでした。

rubyのバージョンは
ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32] です。
http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.html
↑からダウンロードしてきました。

0443デフォルトの名無しさん2009/08/26(水) 23:59:43
ルビーでGUIは作れるのでしょうか?
0444デフォルトの名無しさん2009/08/27(木) 00:02:08
http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E3%83%AB%E3%83%93%E3%83%BC%E3%81%A7GUI%E3%81%AF%E4%BD%9C%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%EF%BC%9F%0D%0A&num=50
04454362009/08/27(木) 00:08:38
すいません、多分解決したみたいです。
ruby 1.8.7 , ruby1.9.1 とverを上げてxmpfilterを実行してみたところ無事に実行出来ました。

お騒がせして申し訳ありませんでした。
返信をして下さった方、どうもありがとうございました。
0446デフォルトの名無しさん2009/08/27(木) 21:17:22
データを突っ込んで行ってそれがあるかないかを高速に判断する場合
ハッシュがベストですか?

list["a"] = true

if list["a"] then ...

で動くんですけどtrueってデータもペアで格納されるのがなんとなく無駄な飢餓
0447デフォルトの名無しさん2009/08/27(木) 21:50:35
とりあえず Hash 使えということになってる
Hash で問題がある場合にのみ他のめんどくさい手段を検討する

あと true はいつどこで呼んでもオブジェクト ID が 2 で固定なので無駄も何もねえよ
0448デフォルトの名無しさん2009/08/28(金) 09:53:51
Hashでいいと思う
標準添付のSet(集合)なんてHashで実装されてるし。
0449デフォルトの名無しさん2009/08/28(金) 11:52:17
こっち↓と

if point > 0
 result['WIN'] += 1
elsif point < 0
 result['LOSE]' += 1
else
 result['DRAW'] += 1
end

こっち↓

win_or_lose = point > 0 ? 'WIN'  \
       : point < 0 ? 'LOSE' \
       :        'DRAW'

result[win_or_lose] += 1

どちらがいいと思いますか?
0450デフォルトの名無しさん2009/08/28(金) 11:54:52
>>449
前者。
0451デフォルトの名無しさん2009/08/28(金) 12:10:04
>>450
�d
0452デフォルトの名無しさん2009/08/28(金) 12:17:21
三項演算子は好きこのんで使うものじゃないね

result = if flag then true else false end
どうしても一行で書きたい時にこれよりはマシって程度
0453デフォルトの名無しさん2009/08/28(金) 12:35:54
>>449
case
when point > 0 then result['WIN'] += 1
when point == 0 then result['DRAW'] += 1
when point < 0 then result['LOSE'] += 1
end
0454デフォルトの名無しさん2009/08/28(金) 12:42:10
前どっかで書いたが、条件演算子は便利なんだからどんどん使ってよい
そして、どんどん書き換えろ

条件演算子の中で整頓改行したり ( ) でネストしたり ; つけたりするのは禁止
条件演算子の状態に固執するのはただのアホ
条件演算子の 9 割は最終的には長い条件分岐に書き換えられてしまう
だったらプロトタイプは早くてうまくてやっすいのにしたほうがいいってもんだ
0455デフォルトの名無しさん2009/08/28(金) 12:48:24
Rubyの三項演算子の平均寿命は1日だそうな
0456デフォルトの名無しさん2009/08/28(金) 12:49:23
Rubyの場合ifが式だからifで書けばいいと思うんだけど。
可読性もそのほうが高いと思わない?
0457デフォルトの名無しさん2009/08/28(金) 12:52:28
if のほうがわかりやすそうな気がするときと、
条件演算子のほうがわかりやすそうな気がするときの
2つがあるような気がする

極めて単純な見栄えの問題
他の言語では三項演算子だけが値を返すから入れ替えが効かないけど
Rubyは動作自体は結局一緒だから
(パースの受け方は違うかもしれない)
0458デフォルトの名無しさん2009/08/28(金) 12:55:17
>>453
case文も使えるんだ。
なるほど。
0459デフォルトの名無しさん2009/08/28(金) 13:03:54
case文の意味なくないか?w
0460デフォルトの名無しさん2009/08/28(金) 13:08:40
空 case の例としてはわりと妥当だと思う
else raise の余地がないのがやや弱いがわかりやすかろう
0461デフォルトの名無しさん2009/08/28(金) 13:13:41
このへんは cond をかっちょええと思うかわかりにくくなったと思うかという話になるような気がしないでもない
0462デフォルトの名無しさん2009/08/28(金) 13:16:27
result[ case
        when point > 0 then 'WIN'
        when point == 0 then 'DRAW'
        when point < 0 then 'LOSE'
    end ] += 1

だろJK
0463デフォルトの名無しさん2009/08/28(金) 13:17:36
>>460
その空case自体に疑問
条件に重複する部分がないのを暗示してる、みたいなニュアンス?
0464デフォルトの名無しさん2009/08/28(金) 15:30:39
コードゴルファー登場↓
0465デフォルトの名無しさん2009/08/28(金) 16:12:32
わいは猿や!
0466デフォルトの名無しさん2009/08/28(金) 16:24:10
result[point / 0.0] += 1
04674662009/08/28(金) 16:25:20
point = 0 のときダメだった。スマン
0468デフォルトの名無しさん2009/08/28(金) 16:25:42
result[{1=>'WIN',0=>'DRAW',-1=>'LOSE'}[point<=>0]]+=1
0469デフォルトの名無しさん2009/08/28(金) 16:30:16
result[%w[DRAW WIN LOSE][point<=>0]]+=1
0470デフォルトの名無しさん2009/08/28(金) 18:07:31
配列で要素が重複していたときに重複している要素の値が知りたいのですが
簡単な方法はないでしょうか?
[1,2,3,4,5,6,3]であれば3が知りたいです
重複は1種類が1回だけしていると仮定してかまいません
0471デフォルトの名無しさん2009/08/28(金) 18:30:43
ありそうでないんだよね、そういう機能
重複は全部消去するのが基本
「配列の構成要素を uniq で決定し、それと同じ値を持つ最初の場所を探してその要素を配列から消す」
という手順でやるとこうなる

arr = [1, 2, 3, 4, 5, 6, 3]
arr.uniq.each{|e| arr.delete_at(arr.index(e))}
p arr

[3]

これだと arr が失われてしまうので他の人の案待つか事前に複製でもしとけ
0472デフォルトの名無しさん2009/08/28(金) 19:17:38
a1 = ary.sort
a2 = a1.uniq
i = 0
a1.find_all {|v|
 if v.eql? a2[i]
  i += 1
  false
 else
  true
 end
}

またselectかと言われそうだけどこのスレでは三回目
0473デフォルトの名無しさん2009/08/28(金) 19:28:17
h = {}
p aryfind {|a| h[a] || !(h[a] = true)}
0474デフォルトの名無しさん2009/08/28(金) 19:30:14
ary.find
0475デフォルトの名無しさん2009/08/28(金) 21:12:35
>>470

arr = [1,2,3,4,5,6,3]
hash = {}
hash.default = 0
arr.each {|x| hash[x] += 1 }
p hash.keys.select {|k| hash[k] > 1 }
04764702009/08/28(金) 21:24:24
みなさん色々な案ありがとうございます
参考にさせてもらいます!
0477デフォルトの名無しさん2009/08/29(土) 07:31:27
One Click InstallerだかをWindowsで入れると、

 RUBYOPT=-rubygems

だかを環境変数に設定するというような余計な(親切な)ことをしてくれるわけですが、
これって、

 require "rubygems"

する必要がなくなるわけですよね?

他の環境などで同じようなこと(RUBYOPT=-rubygems) している人っていますか?
やっぱり、require "rubygems"をソース内に書いた方がいいものですかね?
0478デフォルトの名無しさん2009/08/29(土) 09:13:38
require "rubygems" は必ず書かなければならない
俺が RUBYOPT を嫌いな理由の一つ
わざわざ可搬性下げて何をしたいのか
0479デフォルトの名無しさん2009/08/29(土) 09:45:31
あとから広まって事実上の標準になる予定だったんだよ
0480デフォルトの名無しさん2009/08/29(土) 09:51:04
別に RUBYOPT は rubygems 用の機能じゃねえが、1.9 で組み込みになったから
RUBYOPT=-rubygems に関してはもう無用の長物だな
0481デフォルトの名無しさん2009/08/29(土) 10:20:24
>>470
ary.group_by{|e|e}.to_a.select{|e|e[1].size>1}.map(&:first)
とか
ary.sort.each_cons(2).select{|x,y|x==y}.map(&:first).uniq
とか
0482デフォルトの名無しさん2009/08/29(土) 10:55:34
>>481
selectするならto_aはいらん
と思ったが、multiple values for a block parameter (2 for 1)とい
う警告が何度も出るのか

ary.group_by{|e|e}.select{|e,l|l.size>1}.map(&:first)
0483デフォルトの名無しさん2009/08/29(土) 10:56:49
>>478
> 俺が RUBYOPT を嫌いな理由の一つ
「江戸の仇を長崎で討つ」ってやつか
0484デフォルトの名無しさん2009/08/29(土) 11:15:11
そもそもrubygemsが嫌い
0485sage2009/08/30(日) 00:10:43
同一のテーブル構造をもつデータベースAとBがあって、
データベースの内容を比較したいです。

どちらのデータベースもSQLiteのファイルです。

ActiveRecordというのを使うのが簡単そうなのですが、
可能なのでしょうか?

というのは調べてみるとActiveRecordでは、
データベースへの接続(ActiveRecord::Base.establish_connection)とか、
レコードの検索を、クラスメソッドで操作しています。

となると、上記のように同一クラスから
別々のデータベースへ接続するインスタンスを作成して、
インスタンス経由で操作するという使い方はできないように見えます。
0486デフォルトの名無しさん2009/08/30(日) 01:08:00
>>485
SQLite3::Database.new(file)で両方のデータベース開いて
テーブル毎にレコードの比較した方が楽な気がする
0487sage2009/08/30(日) 01:38:36
>>486
回答ありがとうございます。

SQL書かずにActiveRecordでできたら楽勝!
と思っていたのでなんとかならないかなーと。
0488名無しさん@そうだ選挙に行こう2009/08/30(日) 07:42:50
初めまして。

質問です。

今やってるプロジェクトが、以前、rubyのMVCフレームワークによって書かれました。
その開発した方が、/public_html/.htaccessで何らかの設定をしました。
今回、/public_html/manage/配下にphpのMVCフレームワークを使用して開発することに
なったのですが、/manage/.htaccessで設定しても親ディレクトリの.htaccessの影響を受けて
/manage/配下のファイルにアクセスしても、404になってしまいます。
/public_html/.htaccessの内容も分からず、なるだけ触りたくないのですが、
サブディレクトリの.htaccessで、親ディレクトリの.htaccessの影響を全く受けないようにすることは可能でしょうか。

お忙しいところ、すみません。
よろしくお願いします。
0489名無しさん@そうだ選挙に行こう2009/08/30(日) 08:28:56
Ruby 関係ねえ
.htaccess の書式勉強しろ
0490名無しさん@そうだ選挙に行こう2009/08/30(日) 08:36:08
Ruby関係ないからスレチ

> .htaccessの内容も分からず、なるだけ触りたくないのですが、

それを晒さないと。というより、せめて自分で読んでみないと。
04914882009/08/30(日) 10:00:38
ご返信ありがとうございます。
サーバーを見てみたのですが、
/public_html/には、.htaccessがありませんでした。
ただ、404の設定がしてあるので、どこかでそのような設定がなされているものと思います。
/public_html/配下には、rubyのRailsで開発してあるようです。

/public_html/manage/には、今回のPHP開発に必要なcakephpのMVCフレームワークが設定してあります。
その.htaccessは、
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
となっています。
例えば、http://domain.com/manage/css/layout.cssにアクセスした場合は、
/public_html/manage/app/webroot/css/layout.cssのファイルが読み込まれる設定にしてあります。
外のサーバー(public_htmlにrubyで設計したファイルが置いてないもの)で試したらちゃんと読み込まれていたので、/public_html/manage/配下は正しく設定してあるはずです。
しかし、http://domain.com/manage/css/layout.cssにアクセスすると、404が返ってきます。

/public_html/には、rubyのMVCフレームワークで設計されたファイルがたくさんあり、
私はrubyを知らないので、何かしらの設定がなっているはずなのですが、どこでどうなっているのか分かりません。

たぶん、http://domain.com/manage/css/layout.cssにアクセスしても、
cakephpのシステムは読み込まれず、元々のRuby Railsのシステムで処理されていると思います。
本来、http://domain.com/manage/ooo/xxx/ にアクセスすると処理されるのですが、
これも404に行きます。
でも、http://domain.com/manage/index.php/ooo/xxx/ とアクセスすると処理されます。

もし何かご存知でしたら、教えて頂けないでしょうか。
よろしくお願い致します。
0492名無しさん@そうだ選挙に行こう2009/08/30(日) 11:01:02
可能
0493名無しさん@そうだ選挙に行こう2009/08/30(日) 11:05:08
/public_html/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule manage\/$ manage/app/webroot/ [L]
RewriteRule manage\/(.*) manage/app/webroot/$1 [L]
</IfModule>
0494名無しさん@そうだ選挙に行こう2009/08/30(日) 11:12:58
てか Ruby 全く関係ねーということがわかってなお居座るのってなんなの頭悪いの
0495名無しさん@そうだ選挙に行こう2009/08/30(日) 12:43:36
>>494
自分で正しいことをしていると思っているイタイタイプ
周りでは陰で嫌われているのに気づかないタイプ
0496名無しさん@そうだ選挙に行こう2009/08/30(日) 12:45:40
自分の目的が果たされれば何をしても構わないと思ってるタイプ
0497sage2009/08/30(日) 12:54:11
>>485です。

ActiveRecordで、ひとつのモデルで
複数のデータベースに接続するという
使い方ができるか、あきらめきれずにさらにググったところ、
magic_multi_connectionsというgemが見つかりました。

Magic-MultiConnections:
http://magicmodels.rubyforge.org/magic_multi_connections/

とはいえ、ActiveRecordが当初想定している使い方
ではないということがはっきりしました。

他にちょうどいいO/Rマッパってないですか?
0498名無しさん@そうだ選挙に行こう2009/08/30(日) 12:59:58
ソウダネ、IDナイカラ、ダレガダレダカサッパリワカラナイネ。
0499名無しさん@そうだ選挙に行こう2009/08/30(日) 13:02:53
>>497
自作のORe真っ裸ならあるけど
0500名無しさん@そうだ選挙に行こう2009/08/30(日) 15:59:01
>>491
すげーなー。
そのhtaccessファイルの中身の何がおかしいのかもわからない・調べられないのに、
Webアプリケーションを開発しようなんて。

恐ろしくて使いたくないぜ。
0501名無しさん@そうだ選挙に行こう2009/08/30(日) 16:29:07
>>497
テーブルの差異を調べるプログラム位、数十分で書けるだろ
二度と使わないかもしれないORMの調査に無駄な時間を費すの?

dbs = [file1,file2].map {|fn| SQLite3::Database.new(fn) }
dbs[0].tables.each do |table| # tablesなんてメソッドがあるとして
 results = dbs.map {|db| db.execute("select * from #{table}") }
 # results を比較
 :
end
0502名無しさん@そうだ選挙に行こう2009/08/30(日) 16:37:20
SQLを書きたくないんじゃなくて
書けないの間違いだろうな。。
0503名無しさん@そうだ選挙に行こう2009/08/30(日) 16:42:22
クエリに文字列埋め込みステキです
0504名無しさん@そうだ選挙に行こう2009/08/30(日) 16:43:44
何を言ってるの
ユーザーがSQLを直接発行するだなんて悪手中の悪手じゃないか

適当にうまくやるよボタンを押すだけで内部でSQLが組み立てられて
結果のデータのみがユーザーに返ってくるというのが正しいありかただろう
0505名無しさん@そうだ選挙に行こう2009/08/30(日) 16:48:36
>>504
そうなんだよねえ
結局SQLを書かせなければならないことになって深く絶望したわ
なんとかならんもんかね
0506名無しさん@そうだ選挙に行こう2009/08/30(日) 16:52:28
> SQLite3::Database.new(file)で両方のデータベース開いて
> テーブル毎にレコードの比較した方が楽な気がする

答えでてるじゃん。
終了
0507名無しさん@そうだ選挙に行こう2009/08/30(日) 17:05:53
Ruby使うまでもなくdumpしてdiffとればいいんじゃない。
0508デフォルトの名無しさん2009/08/30(日) 21:07:16
なんだろう。
>>501を信じてそのままドンってやって、ガツンと応答不能になり得たりしそうなこの不安感。

初心者スレでこれはありなんだろうか。
>>501の論旨からいうならもうちょっと、丁寧に逐次的に例を出す文脈ではなかろうか。
05095012009/08/30(日) 21:41:49
>>508
俺に遠慮する必要は無い、君が教えてあげてくれ
0510sage2009/08/30(日) 22:44:10
>>485です。

ActiveRecordではなくてSequelというのが
良さそうというのがわかりました。

Sequel:
http://sequel.rubyforge.org/

こんな感じで書けます。

DBLeft = Sequel.sqlite("./left.sqlite")
left_table_foo = DBLeft[:table_foo]

DBRight = Sequel.sqlite("./right.sqlite")
right_table_foo = DBRight[:table_foo]

left_table_foo.each do |left_rec|
# right_tableのレコードと比較する
end

なんかしつこく質問してしまったみたいですみません。
でも回答してくれて助かりました。では。
0511デフォルトの名無しさん2009/08/31(月) 01:39:52
WinXPで1.8.6です。
文字列を16進ダンプしたものの中に、2バイト文字が含まれているか
どうかを判定するにはどうしたら良いでしょうか?

変換コードは下記の通りです。
arr0 = dataStr.unpack("H*")[0].scan(/[0-9a-f]{2}/)
arr1= arr0.to_s + "\n"

対象のdataStrが Rec の場合 arr1 が 52,65,63 になりますが、
Rク では 52,83,4e です。この場合、真ん中の16進数の83を元に
判定するのでしょうか?
0512デフォルトの名無しさん2009/08/31(月) 01:47:10
>>511
文字コード決めないと「2バイト文字」を定義できなくないか?
0513デフォルトの名無しさん2009/08/31(月) 02:29:10
>>512
ク で 83,4e です
0514デフォルトの名無しさん2009/08/31(月) 02:36:12
zenkaku=false
arr0.each do |c|
 if c>128 do
  zenkaku=true
 end
end
■ このスレッドは過去ログ倉庫に格納されています