Ruby 初心者スレッド ..
[2ch|▼Menu]
653:デフォルトの名無しさん
10/01/13 06:54:52
環境によってrubygemsがアホみたいに遅くなるのはどのWindows版だっけ

654:デフォルトの名無しさん
10/01/13 07:03:58
>>653
mswin32が爆弾持ち

絶対にmingwもいれて比較すべき
遅く感じないならどっちでもいい
遅くない人もいるみたいだから

655:デフォルトの名無しさん
10/01/13 07:34:04
1.8.7のインストーラ用意してないのは、単なる手抜き?
まあ教祖自身がウィンドウズ使ってないから放置なんだろうけど。

656:デフォルトの名無しさん
10/01/13 07:55:04
マストでないので、やる人員が確保できなければ特段用意されない

657:デフォルトの名無しさん
10/01/13 08:15:41
マイクロソフトあたりが環境用意してくれるのはきっと大歓迎。


658:デフォルトの名無しさん
10/01/13 09:20:36
>>655自身が必要なら手を上げれば今なら英雄候補生

659:デフォルトの名無しさん
10/01/13 10:52:00
arr.insert(0, obj) ってなんか意味あんのかね
arr.unshift(obj) と一緒だよね
ただのデータ配列なのでキュー関連の物言いを嫌ったのかね

660:デフォルトの名無しさん
10/01/13 16:12:42
floatの内部表現を表す4バイトを指す文字列(ポインター)が欲しいのですが、どうすればいいのでしょうか
C言語で書くとこうなります。

float f[] = {1,2,3,4,5,6};
unsigned char* p = (unsigned char*)f;

OpenGLを使っていて頂点データをGPUに送るのに配列の生データが欲しいのですが……

661:デフォルトの名無しさん
10/01/13 16:49:47
>>660
pack調べろpack

662:デフォルトの名無しさん
10/01/13 17:04:11
>>661
.pack("f*")で出来た。まじサンクス。

@@vertices = [1,0,0, 0,1,0, -1,0,0].pack("f*")
@@indices = [0,1,2].pack("f*")


663:デフォルトの名無しさん
10/01/13 19:37:31
>>659
すまん。レスの趣旨がつかめん。
挿入位置によってメソッド使い分ければいいじゃんてことが言いたい?

664:デフォルトの名無しさん
10/01/14 11:08:18
スタックとみなしてる意図のメソッドと、キューとみなしてる意図のメソッドってあるよね

とかそんなことだと思う

665:デフォルトの名無しさん
10/01/14 17:43:13
たまたま何処かでそういうコードを見かけて、unshiftで事足りるのに
わざわざinsert使っているのは何故なんだっていうところだろうね。

666:デフォルトの名無しさん
10/01/14 20:04:56
バグを見つけたらどうしたらいいの?

667:デフォルトの名無しさん
10/01/14 20:16:27
[BUG] と出て落ちたとか Segmentation Fault したとかならまず検索かな
たいていは既に報告してて対処待ち

Rubygems みたいな外部ライブラリのバグっぽい感じのものならやっぱ過去の報告とか調べて
それでもなさそうなら Rubyforge や GitHub のページのバグ報告あたりに出すといい

ただ、断言してもいいけど6割はただの勘違いで、残りのうち3割5部は既に報告済みだと思う
どこのどのへんが怪しい動作と思えるのかここで言ってみ
報告のためにはそれなりに体裁とか前提条件とか洗い出さないと対処してもらいにくいけど
ここで何か言えばそのためのヒントくらいは出るかもよ

668:デフォルトの名無しさん
10/01/14 20:20:12
>>665
unshift と書いてあったら俺はキューのようなものだとみなす
キューでもないのに unshift と書いてあったらたぶんキレる
先頭に要素突っ込みたいなら insert 使え
最後に要素突っ込みたいなら << か push 使え

669:デフォルトの名無しさん
10/01/14 20:27:34
沸点低いなー

まあ確かに順番必要ないのにArray使ってる例というのは結構あって

670:デフォルトの名無しさん
10/01/14 21:33:30
バグの情報はどこにあるの?
Googleで4・50件ほど見たけど無かった。
win32でコマンドラインに特定の非ASCII文字を含むディレクトリ名を指定するとワイルドカードが展開されない

671:デフォルトの名無しさん
10/01/14 21:35:23
bugはここ
URLリンク(redmine.ruby-lang.org)
サンプルコード見せて

672:デフォルトの名無しさん
10/01/14 22:16:49
>>670
非ASCII文字の中に「表」とかの \ で終わる文字が入ってるんだろ

673:デフォルトの名無しさん
10/01/14 23:06:29
Do One Thing for Rails 3 on January 16th and 17th
URLリンク(railsbridge.org)

674:デフォルトの名無しさん
10/01/14 23:11:49
Rubyでwebアプリ作るときはcgi使うのとERB使うのと
お作法的にはどっち?

675:デフォルトの名無しさん
10/01/14 23:13:46
どっちもつかわねー、というのが答ではあるが
初心者のうちは全部使って長所短所欠点体に刻んどけという気はする
どうせ外に出したりしないだろ

676:デフォルトの名無しさん
10/01/14 23:15:09
何使うの?

677:デフォルトの名無しさん
10/01/14 23:15:28
>>670
その「特定の非ASCII文字」が何かによって答えは変わる。
シフトJISにない文字なんじゃないかと思うが如何?

678:デフォルトの名無しさん
10/01/15 00:13:11
>>644
RackやRackに基づいたもので、普通のCGIは作れるのでしょうか?
調べてみても、mod_railsとかmongrelとかの環境を作らないと
動かせないように見えるのですが...

679:デフォルトの名無しさん
10/01/15 00:20:18
>>678
できる
できるが、rack/cgi はリリースされても全く動かなかったことがある
(つまり誰も本気でテストしてなかった)というヤな過去があって

つまり誰もやってないんだよね
理屈上はできるし理屈上はRackでやるとキレイなんだけど、
CGI作るということ自体がもうあまり流行らないから

680:デフォルトの名無しさん
10/01/15 00:28:29
>>671

D:\tmp\r>ruby -e "p ARGV" D:\tmp\r\本/*
["D:\\tmp\\r\\本/*"]

D:\tmp\r>ruby -e "p ARGV" D:\tmp\r\表/*
["D:\\tmp\\r\\表/*"]

D:\tmp\r>ruby -e "p ARGV" D:\tmp\r\漢/*
["D:/tmp/r/漢/新規テキスト ドキュメント.txt"]

漢字の2バイト目が\とか{とか

681:デフォルトの名無しさん
10/01/15 02:40:12
とりあえずバージョンを書いて
1.8.7p160だと問題なかった

pの出力で日本語が出てることをみると1.9系だと思うが
1.9.1p243だと >>680 と同じ状態

Dir.glob に渡した時はちゃんと展開されるが
コマンドライン引数を展開する時はダメなんだね
UNIXだとコマンドライン引数のワイルドカードはシェルが展開するから、開発者には気付かれにくいのだろう

昔の1.8は Dir.glob自体がSJISに完全対応してなくて、コマンドライン引数にも同様の不具合があったけど
今回のはコマンドライン引数の時だけの不具合なのか


682:デフォルトの名無しさん
10/01/15 03:16:56
def set_select_quests
for i in 0..9
quest_number = rand(10)
@select_quests |= quest_number.to_a if select_quests_flag(quest_number)
end
end

def select_quests_flag(index)
return false if @select_quests.include?(index) #・・・@
return true
end

@で@select_questsに同じ要素が入っている場合falseを返す様にしたいのですが
この場合include?(val)メソッドしかないですよね?
なんかうまく動かないんですがどこか間違ってますか?

683:デフォルトの名無しさん
10/01/15 03:29:47
>>682
@select_quests << quest_number if select_quests_flag(quest_number)
かな

684:デフォルトの名無しさん
10/01/15 04:05:24
>>654
え、うそ!!!1
RubyGemsが遅いのってmswin32版のせいなの???
くっそー今まで散々苦労してきたのにー
確かにcoLinuxとかだとめっちゃ早いと思ってたわ。
mingw版だと早い?、とか

685:デフォルトの名無しさん
10/01/15 06:38:43
とりあえずgemはバージョンが古かったら
サーバ側でバージョンが古いと怒って欲しい

686:デフォルトの名無しさん
10/01/15 07:35:58
>>685
おう、そういう機能入れたから、rubygem をアップデートしてくれ

というわけで鶏と卵だ

687:デフォルトの名無しさん
10/01/15 07:43:14
>>682
def initialize
@select_quests = Array.new
...
end

def set_select_quests
(0..9).each.do |i|
quest_number = rand(10)
# @select_quests に quests_number が含まれてなかった場合追加する
@select_quests << quest_number if @select_quests.include?(quest_number)
end
end

688:デフォルトの名無しさん
10/01/15 08:06:58
>>687のifはunlessの間違いだと思う冬の朝

689:デフォルトの名無しさん
10/01/15 20:25:24
rubyはwindowsで動かすとどうして遅いの?
ずーと前からみたいだけど直すきないの?

690:デフォルトの名無しさん
10/01/15 20:28:45
開発者がアウトオブ眼中だから

691:デフォルトの名無しさん
10/01/15 20:29:00
>>689
なんでWindozeを使ってるの?
LinuxやBSDやSolaris使えばいいだけじゃないの?
文句言ってるだけで何も行動しようとしないのはなんでなの?

692:682
10/01/15 20:46:00
ありがとうございました
うまくいきました

693:デフォルトの名無しさん
10/01/15 20:46:26
>>689
めんどくさいから
いやマジで
誰にでも絶対に起こるなら直されると思うんだが実際はそうではない

694:デフォルトの名無しさん
10/01/15 20:50:00
>>689
>>691みたいな人ばっかりだから

695:デフォルトの名無しさん
10/01/15 20:55:02
>>693
だよね
むしろ嫌がらせっぽい

696:デフォルトの名無しさん
10/01/15 21:26:17
WindowsOSがやめられないので、ちょっとずつPythonに移行し始めたよ。
既存のクラスにメソッド追加したり、injectとかがちょっと使いづらい以外不満はない。

697:sage
10/01/15 21:29:39
Pythonたんは、純粋なオブジェクト指向じゃないよね。
len() とか気持ち悪い。

698:デフォルトの名無しさん
10/01/15 21:37:14
>>697
最初はそう思ってたけど慣れればそんなもんかって思えるよ。
あとは、三項演算子やcase文がないのがちょっと残念くらいなもんか。

699:デフォルトの名無しさん
10/01/15 21:38:39
>純粋なオブジェクト指向
Rubyも「+」とか「end」はオブジェクトじゃないよね

700:デフォルトの名無しさん
10/01/15 21:41:20
>699
不完全性定理というのがあってだな

701:デフォルトの名無しさん
10/01/15 22:19:11
文字列をn文字ずつ&1文字ずつに分割したいのですが
x = "ABCDEFGHIJKLMNOPQRSTUVWXY"
x = x.scan(/.{5}/)
x.collect!{|y|y.scan(/./)}
p x
=>[["A","B","C","D","E"],["F","G","H","I","J"],["K","L","M","N","O"],["P","Q","R","S","T"],["U","V","W","X","Y"]]
みたいに書くと都度、正規表現によるマッチが行われるので遅いです
もっと高速に実行する方法があったら教えてください。よろしくお願いします

702:デフォルトの名無しさん
10/01/15 22:20:42
まあ俺は自分の仕事が片付けばいいだけだから
オブジェクト指向の純粋さなんてどうでもいいわ


703:デフォルトの名無しさん
10/01/15 22:31:44
>>701
x.chars.each_slice(5).to_a とか。
Benchmark.bm で1万回ずつやった時間を比較したら半分弱の時間だった。


704:デフォルトの名無しさん
10/01/15 22:37:37
>>701
x.split(/.{5}/)
x.split(//)

がたぶん一番速い
これでも遅いという場合はそもそもそんな莫大な配列を文字から作る理由は何というとこから

705:デフォルトの名無しさん
10/01/15 23:10:56
>>704
そもそも要件を全然満たしてない件

706:デフォルトの名無しさん
10/01/15 23:17:57
enumeratorと配列の違いって何ですか?
なんとなく大体同じもののように思えるんですが

707:デフォルトの名無しさん
10/01/15 23:42:36
超巨大な集合から1つずつ取り出そうとしたとき、Enumeratorは全部を
覚えていなくてもいいぞ。
alphabets = %w(a b c d e f g h i j k l m n o p q r s t u v w x y z)

alphabets.combination(13).first(5) は造作もないが
alphabets.combination(13).to_a.first(5) はたぶんメモリ足りない。


708:デフォルトの名無しさん
10/01/16 00:46:48
>>706
数えられて、返ってくる順番が保証されないのがEnumerator
Enumeratorを継承してるので数えられて、しかも順番情報を保持するようにしたのがArray

こう考えるとSetの出番がないんだがまあ誰も覚えてないし誰も使ってないと思うので気にするな

709:デフォルトの名無しさん
10/01/16 12:34:07
>>701
シングルバイト文字限定でいいのかな?
であれば

x = "ABCDEFGHIJKLMNOPQRSTUVWXY"
res = [[]]
x.each_byte do |b|
if res[-1] < 5
res[-1] << b.chr
else
res << []
end
end

で,どうでしょう?

710:デフォルトの名無しさん
10/01/16 14:39:59
ruby1.9の正規表現で,\wがマルチバイト文字にヒットしてくれません。
以下のコードはなにか間違っていますでしょうか?

# coding: cp932
p "日本語" =~ /\w/s #=> nil

鬼車のドキュメントには\wは多バイト文字にマッチすると書かれているのですが。
URLリンク(www.geocities.jp)

711:デフォルトの名無しさん
10/01/16 14:44:55
\w は Ruby では元々 [0-9A-Za-z_] という意味のメタ文字だったので、
1.9 でもそうなってる。

712:デフォルトの名無しさん
10/01/16 14:51:19
>>711
Thanksです。
マルチバイト文字を含めた単語構成文字にマッチするナイスな正規表現ってありませんか?

あとドキュメントのURLが間違ってました。
URLリンク(www.geocities.jp)

713:710
10/01/16 14:58:14
自己レスです

# coding: cp932
"日本語" =~ /\p{Word}/s

でいけました。

714:デフォルトの名無しさん
10/01/16 15:02:56
たしか ¥d が漢数字にマッチしてしまって使いにくくなってたので
その種のは使い分けるようになったんだっけ?


715:デフォルトの名無しさん
10/01/16 17:22:03
>>709
1.9系なら↓でマルチバイトもOK

x = 'あいうえおかきくけこさしすせそ'
res = []
x.each_char.each_slice(5){|a| res << a}

716:デフォルトの名無しさん
10/01/16 17:29:26
これでもできるな

x = 'あいうえおかきくけこさしすせそ'.each_char.each_slice(5).map{|a| a}

717:デフォルトの名無しさん
10/01/16 17:32:17
Windowsのユニコードのファイル名が扱えるライブラリはありますか?

718:デフォルトの名無しさん
10/01/16 17:33:00
>>717
ありません

719:デフォルトの名無しさん
10/01/16 17:38:28
いやいやいやいや、直接API呼べば問題ないからさ
そういうライブラリがrubygemsあたりにでもないかという話だろう

でもこれで困るの日本人とかだからなー

720:701
10/01/16 18:50:38
レスありがとうございます
>>703の方法が一番早いようなのでこれを使わせてもらいます

721:デフォルトの名無しさん
10/01/17 10:37:45
皆さんはRubyのコードを何で書いてるのでしょう?
やっぱり、Emacs or vim?

補完が効くのが良いのですが・・・・


722:デフォルトの名無しさん
10/01/17 10:48:27
Emacsが無難ということに一応なってはいる

適当な統合環境が快適に動作する環境なのなら、エディタ部のコード書きの補完機能だけ使うのも悪くはない
Emacsを一度も使ったことがなくて基本キー操作から覚えなければならないというのだとすれば尚更

Emacsが好まれてるのはエディタの軽さの範疇を実際上は超えてないというのが大きい
もしEclipseやNetBeansが超サクサク動作だったならEmacsは時代遅れ度を2段階くらい上げていたはず

723:デフォルトの名無しさん
10/01/17 11:02:32
Emacsは現代的なIDEが提供するところの補完機能を厳密にはもってない
…まあ、実用上はそれほど困らないが

724:デフォルトの名無しさん
10/01/17 11:35:27
拙者は秀丸でござる。
感謝の意を込めてちゃんと送金したでござる。

725:デフォルトの名無しさん
10/01/17 11:35:48
Emacs で指がつったら vim も試してみてね by vim厨

726:デフォルトの名無しさん
10/01/17 11:46:52
>>721
主にNetBeans使ってる。IDE厨なのでw

ただし、NetBeansの最新の6.8はいろいろとバグが・・・

727:デフォルトの名無しさん
10/01/17 11:57:45
俺もいわゆるスクリプト程度しか書かないからEmacsで十分だな
でもたしかにIDEがエディタ同様に軽ければそっち使うかも

728:デフォルトの名無しさん
10/01/17 12:36:38
通常のエディタでは慣れてくると物足りない(プログラミング初心者は補完のないエディタでやること)
IDEはおおむね重いし遅いしプロジェクトとかそんなのが必要な大作ばかり作るわけじゃないから邪魔

というところにすこんと入るのがEmacs
全部できるが余分で煩雑で重い、というものを使うよりは、
やや足りなくて手作業が入るが軽快、のほうを選ぶ人は意外と多い

729:デフォルトの名無しさん
10/01/17 13:17:32
emacs自体あんまり使わないんだけど、ショートカットキー一発で
全体を整形&フィリング(emacsではこういうのかな)できる設定ないかしら。

730:デフォルトの名無しさん
10/01/17 13:20:51
あるお。
俺はCtrl-x hとかしたあと、Ctrl+Alt+\を押してる。
フィリング?は知らんけど。

731:デフォルトの名無しさん
10/01/17 13:20:54
結局>>717は無いの?

732:デフォルトの名無しさん
10/01/17 13:21:05
class C
 def hoge
  とても長いメソッド...
  local_var = value #<= ここだけを書き換えたい
  ...
 end
end

メソッド定義内のローカル変数たった一行を書き換えたいんです。
とても長いメソッドなので,class_eval{def...無意味なコピペ...end}をしたくありません。
スパッと書き換えることはできませんか?

とりあえずSCRIPT_LINES__とripperを使えば20行くらいでできるのですが,
もっとストレートな方法があるかもしれないと思い質問しました。
ちなみにbindingを使った実験には失敗しました。
よろしくお願いします。

733:デフォルトの名無しさん
10/01/17 14:05:33
>>731
本スレ行って聞いてみたら

734:デフォルトの名無しさん
10/01/17 14:22:30
Emacs が軽快とか隔世の感、とか言うのは多分年寄り。

735:デフォルトの名無しさん
10/01/17 14:32:07
今は通信速度が速いから、Emacs も簡単にダウンロードできる。
昔はフロッピーで小分けにして、配布してたな。

736:デフォルトの名無しさん
10/01/17 14:36:14
>>731
Perlの↓相当がgemにあればいいんだろうけど
URLリンク(perl-users.jp)
いまgemでサーチかけた感じだとなさそう

必要なら↑を参考にしてRubyにportしたら?

737:デフォルトの名無しさん
10/01/17 14:46:29
>>731
1.9.2で扱えるようになるかも、ってことらしい
URLリンク(blade.nagaokaut.ac.jp)

738:デフォルトの名無しさん
10/01/17 14:54:30
>>731 >>736-737
あれ、WindowsだとUNICODEファイル名ダメだったのかー
gemでモンキパッチみたいに簡単にWindowsのときだけOKにできるのとかあったら便利そうだね。
システムの根底だから難しいのかね

739:デフォルトの名無しさん
10/01/17 20:48:07
>>736-738
ありがとう。だが初心者にはハードル高すぎ
1.9.2に期待しまつ。いつごろ出るんだろ?今年の春頃?


740:デフォルトの名無しさん
10/01/17 20:52:56
一応「もう出てる」レベルではあるんだが、Windowsでは自力でソースからコンパイルしないといかん
rubygemsとかも未対応で動作しない可能性も大きい
しばらく前の1.9.1状態

来年くらいには使える状態になってるんじゃないかなあ

741:デフォルトの名無しさん
10/01/17 21:21:56
なんか直接いじればどうにかなりそうな気はするんだけどねえ

742:デフォルトの名無しさん
10/01/17 21:54:31
すいません、これ↓を使いたいんですが、何から始めればいいのか教えてください。
URLリンク(gist.github.com)

743:デフォルトの名無しさん
10/01/17 22:12:49
>>730
フィリングってのはこういうの。文章の段落内でESC qでできる。
# ながーーーーーい説明文菜がーーー否がーーー否がーーーーーーーーーーーーーーーーーーーーい

# ながーーーーーい説明文菜がーーー
# 否がーーー否がーーーーーーーーー
# ーーーーーーーーーーーい

んで、ソースコード全体を一発で整形&フィリングしたいのんよ。ruby-modeで。

744:デフォルトの名無しさん
10/01/17 22:20:06
>>742
見てわからんのならスクリプトがすこし違って詰まったときの対処も自力で全然できないということだから
素直に Ruby の勉強を進めたほうがいいような気がしないでもない

前情報として、Ruby の知識が全然ないのなら使えないよ
MySync GoogleContacts でぐぐると唯一出てくるから、
これをしたい場合は Ruby 上でこれを動かすしかないわけだけど、
まったくの一見さんが使えるようなクオリティにはそもそもなってない

を踏まえて
Ruby を適当にインストール、URL の Download からダウンロードして展開して、
au2gcontact.rb をてきとうなとこにコピー
その後、au2gcontact.rb 自身のファイルの文字コードを Shift_JIS というか CP932 に変換
MySync が吐き出したエクスポートの CSV(Shift_JISに変換済)を第 1引数に、
GoogleContacts に食わせたいファイル名を第 2引数にして、
ruby au2gcontact.rb mysync.csv output.csv
と実行
output.csv は ShiftJIS(というかCP932)だが、
これがそのまま GoogleContacts にでインポートできるかどうかまでは知らない

745:742
10/01/17 22:53:26
なんかよくわからんまま試行錯誤したら一応の目的は達しました。ありがとうございました。以下俺メモです。

rubyをインストール。
ソース(っていうのかな?)をメモ帳にコピペ。拡張子を.rbに変える。
au2gcontact.rbとaddress.csv(←LismoPortが吐き出すやつ)とgcontact.csvをC:\Documents and Settingsに置く。
コマンドプロンプトからruby au2gcontact.rb address.csv gcontact.csv
出てきたのをgmailにインポートでおk。

いやーすごいですね。感動しました。ほんとありがとうございました。

746:デフォルトの名無しさん
10/01/18 01:19:39
>>743
Emacs のスレで聞いたら adaptive-fill-mode の使い方なり filladapt.el の後継なり
何か情報が入るんでない?

747:デフォルトの名無しさん
10/01/18 03:41:47
乗り遅れた感あるけど

vim+neocomplcacheでやっとります。

748:デフォルトの名無しさん
10/01/18 09:32:46
> rubyはwindowsで動かすとどうして遅いの?
Ruby 1.8.7-p174 の select が遅かった話じゃなくて?
URLリンク(www.garbagecollect.jp)
Ruby 1.8.7-p249 にすれば直るよ。

> たしか \d が漢数字にマッチしてしまって使いにくくなってたので
Ruby 1.9.1 の初期はそうだったんだけど、この挙動はバグ扱いされて修正されたので、
Ruby 1.9.1-p378 にすれば直るよ。

749:742
10/01/18 09:33:49
追記。適当なソフトでau2gcontact.rbの文字コード変換をshift jisに変換。

750:デフォルトの名無しさん
10/01/18 15:18:11
puts "日本語".inspect
とすると、"¥123¥456" みたいな表示なりますけど、これを "日本語" のままで表示させることはできませんか。

751:デフォルトの名無しさん
10/01/18 15:35:00
1.8.7 mswin32の場合

irb(main):001:0> puts "日本語".inspect
"\223\372\226{\214\352"
=> nil
irb(main):002:0> $KCODE = "s"
=> "s"
irb(main):003:0> puts "日本語".inspect
"日本語"
=> nil


752:デフォルトの名無しさん
10/01/18 15:37:06
-Kオプションの方がわかりやすいかもしれないと思い直した

>ruby -Ks -e'puts "日本語".inspect'
"日本語"

753:739
10/01/18 18:25:32
1.9.2 preview1で試してみたけどダメだった

754:デフォルトの名無しさん
10/01/18 18:35:12
だからそういうふうにそもそも作ってないんだから標準で用意されたメソッドをどう使おうと絶対に駄目だって

755:デフォルトの名無しさん
10/01/18 19:39:35
火急的に困ってる人がいないんだろうね
見なかったことにするわけにもいかんと思うんだが、代替手段は何なのだろう
そこだけRubyを使わない?

756:デフォルトの名無しさん
10/01/18 19:58:33
1.9.2で扱えるようになるかも、ってことらしかったんで

757:デフォルトの名無しさん
10/01/18 20:21:42
#!ruby -Ku
require 'win32ole'
WIN32OLE.codepage = WIN32OLE::CP_UTF8
fso = WIN32OLE.new('Scripting.FileSystemObject')
a = fso.CreateTextFile("♡♥♡♥.txt", true)
a.WriteLine("This is a test")
a.Close()

758:デフォルトの名無しさん
10/01/18 20:35:46
笙。笙・笙。笙・.txt というファイルができました先生

759:デフォルトの名無しさん
10/01/18 20:39:55
u

760:デフォルトの名無しさん
10/01/18 21:01:23
環境とエディタによってはこのへんきちんと動作するように保存するのは微妙に難しいぞ
慣れればどうということもないんだが

761:デフォルトの名無しさん
10/01/18 21:11:27
おお! できました!! ありがとうございます!!!
これどうすればIOやDirで扱えるんですか?

762:デフォルトの名無しさん
10/01/18 21:20:06
>>761
扱えない
全部 WIN32OLE 内で完結させる必要がある
必要なのは Ruby の知識じゃないね

763:デフォルトの名無しさん
10/01/18 21:33:40
ですよねー...

764:デフォルトの名無しさん
10/01/18 21:35:43
最初と最後にリネーム処理かませば Ruby から扱うのも不可能ではないと思う

765:デフォルトの名無しさん
10/01/18 22:55:11
先生質問だよ質問

data = {/key/ => lambda{|m| "<#{m}>"}}


data.each_pair do |re, p|
 file.gsub!(re){|m| p.call(m)}
end

p file #=> key が <key> になってる

というような、
{正規表現 => キーのマッチ結果を便利に利用した結果の返り値またはただの文字列}
というデータを用いた連続置換をしたいのです
それで、data は外部から自由に与えたいのです

でも、よく考えたら lambda を作った時点では gsub の $1 も \1 もまだ無いから利用できないわけで
なにかうまい方法ないですか
eval ならなんとかなると思ったんだけど普通の置換後に使いたいだけの文字列も eval してしまいます

766:デフォルトの名無しさん
10/01/18 23:47:16
>>765
m = Regexp.last_match
puts m[0]
とかでできないかな?

あと
data.each_pair do |re, p|
 file.gsub!(re, &p)
end
でいいような気がするけど試してはいない。


767:デフォルトの名無しさん
10/01/18 23:55:48
こういうことだろうか。

to = data.each_pair.inject(from) {|result, pair| result.gsub(pair[0], &pair[1]) }


768:デフォルトの名無しさん
10/01/18 23:59:30
これではどう?

a = 'abc def'
data = [['(\w+)', '<\1>'], ['(> <)', '> < \1 > <']]
data.each{|reg, rep| a.gsub!(/#{reg}/, rep)}
a => "<abc> < > < > <def>"



769:デフォルトの名無しさん
10/01/19 00:09:09
>>768
なにそのわかりやすくしようとする気概をぜんぜん感じない例

770:デフォルトの名無しさん
10/01/19 00:10:57
>>765

766-768が書いているようにgsub!の第2引数で置換パターンを書いたほうが
単なるstringでパターンを渡せるので簡単だと思う

766,767が書いてるパターンの前の '&' って
どういう意味?

771:デフォルトの名無しさん
10/01/19 00:21:13
>>770
URLリンク(www.ruby-lang.org)

772:デフォルトの名無しさん
10/01/19 00:26:03
なるほどProcを渡してるのねthx
俺には768の方がわかりやすいな、例は見づらいが

773:デフォルトの名無しさん
10/01/19 00:42:38
だって先生が gsub はブロック使えって言ったんだもん言ったんだもん言ったんだもん

>>766-768
irb> data = {/k1/ => 'v1', /k(2)/ => 'v\1', /k3/ => lambda{|m| m.sub(/k/,'v')}}
irb> str = 'k1, k2, k3'
irb> data.each_pair do |re, p| p.kind_of?(Proc) ? str.gsub!(re, &p) : str.gsub!(re, p) end
irb> p str
"v1, v2, v3"

思ったことに近いことができましたーうおー
助かりましたせんきゅうです

774:デフォルトの名無しさん
10/01/19 03:46:28
1byte文字以外をマッチする方法を教えてください
s="123123456456"
s.gsub!(/〜/){|c|
uni_enc(c)
}
p s
=>
123%uFF11%uFF12%uFF13456%uFF14%uFF15%uFF16
みたいに1byteじゃない文字だけ変換して置換したいです
よろしくお願いします

775:デフォルトの名無しさん
10/01/19 06:56:24
$KCODE='s'
s="123123456456"
s.gsub!(/./){ |ch|
(ch.length==2) ? "(#{ch})" : ch
}
puts s;

776:デフォルトの名無しさん
10/01/19 07:36:20
1バイトじゃない文字だって言ってるのにわざわざ2バイトをチェックするとはこれいかに

777:デフォルトの名無しさん
10/01/19 14:27:57
# coding: sjis
# Ruby1.9以降か正規表現エンジンに鬼車を使用

s="123123456456"
s.gsub!(/[^\p{ASCII}]/){|c|
"%u"+c.encode('utf-8').ord.to_s(16)
}
p s

778:デフォルトの名無しさん
10/01/19 17:08:32
test = {"うし"=>5, "うま"=>3, "うし"=>1, "うし"=>2, "うま"=>4}
test.each{|key, val|
}

これを実行したら最後二つの"うし"=>2と"うま"=>4しか処理が実行されないんですが
キーの要素が一緒だと前にある奴は消されてしまうんですか?
またこれをハッシュの数分だけ実行させることはできないんでしょうか?

779:デフォルトの名無しさん
10/01/19 17:22:15
>778
ハッシュの意味を勉強してこい

780:デフォルトの名無しさん
10/01/19 17:30:11
配列の配列を使う方法
test = [ ["うし", 5], ["うま", 3], ["うし", 1], ["うし", 2], ["うま", 4] ]
test.each {|k, v| use(k, v) }

値が配列になったハッシュを使う方法
test = {"うし"=>[5, 1, 2], "うま"=>[3, 4] }
test.each {|k, a| a.each {|v| use(k, v) } }


781:デフォルトの名無しさん
10/01/19 17:44:49
文字列
a0-0 a0-1 a0-2 a0-3
a1-0 a1-1 a1-2 a1-3
a2-0 a2-1 a2-2 a2-3

から任意が選ばれた配列a
a=["a0-0","a2-2","a2-3"]
より、
配列bを作成したいのですが、
なにか良い方法はないのでしょうか?

b=[[1,0,0,0],[0,0,0,0],[0,0,1,1]]


782:デフォルトの名無しさん
10/01/19 17:51:33
只今から上位エスパー召喚の儀を執り行う

783:デフォルトの名無しさん
10/01/19 17:54:09
"a0-0" → [1, 0, 0, 0]
"a2-2" → [0, 0, 0, 0]
"a2-3" → [0, 0, 1, 1]

という対応があるように見えるのだが、2つめは [0, 0, 1, 0] ではない?
どういうルール?



784:デフォルトの名無しさん
10/01/19 17:55:50
>>782
失敗してるぞw

785:デフォルトの名無しさん
10/01/19 17:58:38
こうだな

a=["a0-0","a2-2","a2-3"]

b = Array.new(3){ Array.new(4, 0) }
a.each do |x|
if /a(\d)-(\d)/ =~ x
b.push[$~[1].to_i][$~[2].to_i] = 1
end
end
p b #=> [[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 1, 1]]


786:デフォルトの名無しさん
10/01/19 18:00:09
>>782
成功したぞw

787:785
10/01/19 18:00:44
ごめん。こうだったね。
> b.push[$~[1].to_i][$~[2].to_i] = 1
b[$~[1].to_i][$~[2].to_i] = 1


788:デフォルトの名無しさん
10/01/19 18:02:57
>>783
a0-0 は配列aにあるから 1
a0-1 はないから0
a0-2 はないから0
a0-3 はないから0
これにより[1,0,0,0]です。

a2-0 はないから0
a2-1 はないから0
a2-2 はあるから 1
a2-3 はあるから 1
これにより[0,0,1,1]です。

このようなルールです。

789:デフォルトの名無しさん
10/01/19 18:26:34
>>785
ありがとうございます。
この方法で問題なく解決しました。

790:デフォルトの名無しさん
10/01/19 22:18:49
こういう3択クイズで選んだ結果をファイルに出力して、解答ファイルと照らし合わせる場合
どうすればいいのでしょうか?

require 'cgi'
c = CGI..new
hoge = c["va"]
print "Content-type: text/html; charset=EUC-JP\n\n"
print "<html><head><title></title></head><body>\n"
print "<p>"
if hoge == 1
print "<p>問題1</p>\n"
print"<form method=\"POST\" action=\"./test.rb\">\n"
print"<input type=\"radio\" name=\"va\" value=\"2\">ア
print"<input type=\"radio\" name=\"va\" value=\"2\">イ
print"<input type=\"radio\" name=\"va\" value=\"2\">ウ
print"<input name=\"ok\" type=\"submit\" value=\"OK\">\n"
print"</form>\n"
elsif hoge == 2

end
print "</p></body></html>\n"

791:デフォルトの名無しさん
10/01/19 22:32:03
>>790
Rubyは基本、HTTPのクエリ文字列とかを隠蔽しない
そのときどんなデータがどのように送られてくるものなのか、HTTPの勉強をするといいぞ

792:デフォルトの名無しさん
10/01/19 23:06:30
>>791
ありがとうございます
勉強して何とかやってみます

793:デフォルトの名無しさん
10/01/20 08:35:06
>>791
事実だから仕方ないが、あんま威張ることじゃないけどねえ
Railsで作ってRailsで表示してRailsで受け取れば抽象度高くできそうだが、もうCGIではないな

794:デフォルトの名無しさん
10/01/20 08:36:21
そりゃ言語としてWEBだからって何かするのはPHPくらいだろう。


795:デフォルトの名無しさん
10/01/20 08:49:20
あほまるだし

796:デフォルトの名無しさん
10/01/20 12:53:24
質問です!
文字列を受け取ってスペースと記号を削除した文字列を返すメソッドを作りたいんですが
どうすればいいでしょうか?
ちなみに条件はgsubメソッドをつかうこと
記号は全角も半角も含む(","とか"。"とか"?"とか"?"とか)
どなたかお願いします


797:デフォルトの名無しさん
10/01/20 12:56:49
>>796
Rubyの宿題教えてください。2限目
スレリンク(tech板)

798:デフォルトの名無しさん
10/01/20 13:10:06
>>797
スレ違いでしたね
すいません
わざわざありがとうございます

799:デフォルトの名無しさん
10/01/20 13:48:31
RDEは軽いからお手軽なGUIのirbみたいなイメージで
自作メソッドとかの動作確認的な風に使うな

800:デフォルトの名無しさん
10/01/20 14:45:43
railsを勉強しようと思うんですが、初心者向けで
お勧めの本はありますか?あるいは、これは読んで
おくべき本でも構いません。

Webでいろいろ読んだのですが、modelのassociation
やAjaxが難しく感じました。


801:デフォルトの名無しさん
10/01/20 14:50:41
うむ、スレのテンプレすら読めんような注意力では何もかもが難しかろう

【Ruby】Ruby on Rails Part8
スレリンク(php板)

802:デフォルトの名無しさん
10/01/20 14:53:24
Railsの初心者スレってありそうでなさそうで需要ありそうだがやっぱめんどいからなしで

803:デフォルトの名無しさん
10/01/20 16:16:05
>>801
ありがとう。

804:デフォルトの名無しさん
10/01/20 16:21:54
>>800
初心者が最低限これだけあればまずはなんとかなる!って書籍を3つ。
というか俺が実際にRails初心者レベルで仕事で使った本

・RailsによるアジャイルWebアプリケーション開発
URLリンク(www.amazon.co.jp)

・Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応
URLリンク(www.amazon.co.jp)

・Railsレシピブック 183の技
URLリンク(www.amazon.co.jp)

あとは、webサイトだけど公式のガイド。ちょっとしたわからんことはまずこれ見たら大体すむ
Ruby on Rails guides
URLリンク(guides.rubyonrails.org)

毎回聞かれてるんで、Railsスレテンプレに入れといていいと思うんだ・・・

805:デフォルトの名無しさん
10/01/20 16:23:43
質問いいでしょうか?
Ruby 1.8.7にて、ブロックつきメソッドの呼び出したブロックの返り値を得たいのですが、
ブロック内で
 return "UNKO!!"
すると、
 unexpected return (LocalJumpError)
と言われます。
 break "UNKO!!"
では問題ないようなのですが、これはこういうものなのでしょうか?

806:デフォルトの名無しさん
10/01/20 17:03:26
>>804
紹介ありがとう
とりあえずそれらと公式サイトで始めてみます

807:デフォルトの名無しさん
10/01/20 17:04:09
>>805
トップレベルでreturn使っていない?
def f(a)
a.each{ return 1 }
end

a = [1,2,3]
f(a) # これはだいじょうび
a.each{ return 1 } # でもこれはダメ


808:805
10/01/20 17:50:49
>>807
ありがとうございます。
エラーでない方法をお聞きしたいというよりも、もう少し具体的に聞くべきでした。

こちらの期待する動作としては、
”UNKOoooooooOOOO!!”と”f is finisheeeeeeeedddddd!!111”ともに表示させたいのです。
breakの代わりにreturnだと”f is finisheeeeeeeedddddd!!111”が表示されませんよね・・・?(fから抜けてる?)

実際のコードではa.eachではなくeachの代わりに自分で定義したブロックを必要とするメソッドを呼び出してます

def f(a)
  puts a.each{ break "UNKOoooooooOOOO!!" }
  puts "f is finisheeeeeeeedddddd!!111"
end

a = [1,2,3]
f(a) # これはだいじょうび
#a.each{ return 1 } # でもこれはダメ

809:デフォルトの名無しさん
10/01/20 18:01:04
breakはブロックの脱出、returnはメソッドの脱出ってこと
だからそのfの中でretrunを使ったら内部ブロックでだろうとfを脱出する

同様にこれも無理
def f
 break
end
f

810:デフォルトの名無しさん
10/01/20 18:09:10
ある案件で始めてRubyをいらうことになったのですが、
訳がわからず困っています。

取り合えず、"RailsによるアジャイルWebアプリケーション開発”のT部
HelloWorldプログラムを作成して動かすまでを試してみて、
ああ、PHPでSmarty使ってMVCモデルで作成するのを自動、徹底
してる感じだなと思い、そのまま本チャンプログラムに挑みましたが・・・

・まず、.rhtmlがTopページしかなく、MVCとも.jsファイルばかり。
・ブラウザに表示してソースコードを見てみると、1万行近い
 ソースコードで表示と一致していない。
・ブラウザのURL表示がページ遷移しても常に一緒。

と、始めて見る構成でした。
私のRubyの理解が足りないと思い、U部以降を読み進めようと思いましたが
このプログラム構成が特殊だから、参考書読み進めても効果は薄く
それよりプログラムの解析を続けるべきでないかと思い直しました。

皆さんに質問ですが、こういった構成は一般的なのですか?
それなりにある手法ならば、読むべき参考書、検索のキーとなる
単語を教えていただけたらと思います。

要領得ない質問ですみませんがお願いします。。。

811:デフォルトの名無しさん
10/01/20 18:17:27
>>810
お前には絶対に無理だ

812:sage
10/01/20 18:20:39
せめて日本語で頼む。

813:デフォルトの名無しさん
10/01/20 18:31:08
>>804の罪は重い

814:デフォルトの名無しさん
10/01/20 18:34:15
これは俺でも煽る
直前読めずにスレのルールすら理解できないようでは駄目だろうな

815:810
10/01/20 18:51:22
>>814
>関連スレやURLは>>2-5あたりを見てください。
>Ruby on Rails の質問は Webプログラミング板の Rails スレへ。

これですか?
もっと詳細に質問すべきだったのかもしれませんが、
個々のプログラムの質問以前に全体として???だったもんで。。。

>>810,813
つまり、初心者レベルでないから私には到底無理ってことですか?
それならそれで上にそう報告しますので助かります。
それでもやれって言われそうですが・・・。

逆に、参考書読んだらわかるようなことを質問するなというのであれば
すみません。
参考書、全部読んでみます。

取り合えず、初心者参考書レベルの問題なのかだけでも教えて下さい。

816:デフォルトの名無しさん
10/01/20 19:11:01
>>815
君が書いてる質問の中に、Rubyそのものに関する話題は一切ない。
Railsスレへ行きなされ。

>>813が書いてるのは、たぶん、Railsスレへ行けということが示されてるのに
わざわざ餌を撒いてここに君を留まらせた罪が重いってこと。

817:810
10/01/20 19:13:22
>>816
そうですね。。。
すいません。

Railsスレにいきます。
スレ汚し失礼しました。

818:デフォルトの名無しさん
10/01/20 19:21:36
>>817
読んでないことを期待するが、40パーセントくらいしか悪くないのでそれほど謝る必要はない
残り40パーセントは>>804で、残り20パーセントはたまたま重なったタイミング

819:デフォルトの名無しさん
10/01/20 19:39:51
>>808
eachごとの結果がほしいのなら
ブロックの外で定義した配列に
欲しい結果を入れておく。
またはブロックのto_aとか

701へのレス703, 709参照。

820:804
10/01/21 10:54:34
俺の名誉のために言っておくが、>>810の言っていることは、
"RailsによるアジャイルWebアプリケーション開発”のサンプルコードの話じゃなくて、
>>810が取り組んでる仕事のコードだと思うぞ

821:804
10/01/21 10:55:31
ごめん >>816-818読んでなかった。餌まいてスマソ

822:805
10/01/21 10:56:56
ありがとうございます!

>>809
> breakはブロックの脱出、returnはメソッドの脱出ってこと

ああ!それです。まさにその1行が聞きたかったのです。
俺はもっとよい聞き方を憶えないといけないな・・・

823:デフォルトの名無しさん
10/01/21 11:43:10
こうして>>804はプライドも外聞もズタズタになったのであった。

824:デフォルトの名無しさん
10/01/21 12:57:39
1. ruby -e 'puts ARGF.read' file.txt
2. ruby -e 'puts $<.read' file.txt

1.の文では正しくfile.txtの内容が表示されるのですが、
2.の文で「指定されたファイルが見つかりません。」と怒られます。
リファレンスマニュアルの$<の項には
 「つまり定数 ARGF の別名。 」
と書いてあるので、
1.と2.で同じ結果を期待したんですけど。
どこが間違ってるんでしょうか?

Ruby1.9.1でOSはWindowsXPです。
よろしくお願いします。

825:デフォルトの名無しさん
10/01/21 13:06:28
あ,自己解決しました。
Windowsの<とか>とかってエスケープするか
""で括らなきゃいけなかったんでした。

1. ruby -e "puts ARGF.read" file.txt
2. ruby -e "puts $<.read" file.txt
または
2. ruby -e 'puts $^<.read' file.txt
なら同じ結果になりますね。
スレ汚しスマソ。

826:デフォルトの名無しさん
10/01/21 13:10:22
>>824
「指定されたファイルが見つかりません。」を出してるのは実はcmd.exeだ
「<」を誤認識してる

ということで cmd.exe から < をエスケープすればよい
cmd.exe のエスケープ文字は ^ だから、

ruby -e 'puts $^<.read' file.txt

827:816
10/01/21 14:12:27
別に810や804を責めたいわけでもないんだが、質問と回答は
適切な場所でやった方がいいよ、ってことで。

828:デフォルトの名無しさん
10/01/21 14:15:52
>>826
すみませんすみません
ありがとうございました。

829:デフォルトの名無しさん
10/01/21 14:33:03
>>810
>・まず、.rhtmlがTopページしかなく、MVCとも.jsファイルばかり。
>・ブラウザに表示してソースコードを見てみると、1万行近い
> ソースコードで表示と一致していない。
>・ブラウザのURL表示がページ遷移しても常に一緒。
> と、始めて見る構成でした。

これはAjaxでページを作ってるんだろう。Railsうんぬんはさほど関係ない。

> 私のRubyの理解が足りないと思い、

いや、JavaScriptやAjaxの知識が足りないだけだと思う。

830:デフォルトの名無しさん
10/01/21 14:34:48
>>801

831:デフォルトの名無しさん
10/01/22 17:50:52
riっていらないよね

832:デフォルトの名無しさん
10/01/22 17:58:09
rubygem パッケージマニュアルとしての ri に関しては、「とりあえず入れておく」というようなもんでもないな既に
現時点で ri を利用してないのなら、 --no-ri で飛ばしてOK
基本的にロクなこと書いてないしソースを grep したほうがおおむね速いので、rdoc もなくてもいい
rdoc がきっちりしているライブラリのみ、マニュアル読む機会があるときだけ rdoc コマンドで構成するか、
あるいはネットで公開されてる rdoc を読めばいい

833:デフォルトの名無しさん
10/01/22 19:04:47
refeはいるけど、riはいらない

834:デフォルトの名無しさん
10/01/22 19:13:46
デフォで--no-ri -no-rdocしても特にデメリットはないね
インストール速いしディスクアクセスも少なくて済むしいいことだらけ

835:デフォルトの名無しさん
10/01/22 19:37:04
俺は.gemrcに書いたが、デフォルトでそうであれ、とまでは思わない。


836:デフォルトの名無しさん
10/01/22 19:41:39
自分の作るライブラリにはRDocをていねいに書く
自分がインストールするライブラリではrdocは使わない

837:デフォルトの名無しさん
10/01/22 19:46:04
日本語でいいならコメント書くんですがー

838:デフォルトの名無しさん
10/01/22 19:54:48
>>837
あちらさんの使ってるフォント自体に日本語文字がないから、本気で表示が崩れるぞ
外国語の文字も適当に表示できるフォントの認知度が高いのは日本くらいだ

839:デフォルトの名無しさん
10/01/22 19:59:50
とりあえず日本語でコメントを書きまくり、英語の得意な人がプロジェクトに参加してくれることを祈るというのはどう
英語でコメント書くの大変だって言うような人が作るライブラリなんて、どうせ最初に使うのは日本人が主だろうしさ

840:デフォルトの名無しさん
10/01/22 20:14:17
そうだな、とりあえず日本人向けオンリーででもまず本体クオリティ上げるのが第一かもしらん
英語ドキュメント書けないからと言って諦めるのはもしかしたら勿体無さ過ぎるかもしれない

841:デフォルトの名無しさん
10/01/22 22:08:16
質問です。ある1つのディレクトリ内にあるファイルを更新時間順にソートしてファイル名を連番(数字のみ)にしようと以下のコードを書きました。


def consecutivenum(path)
i = 1
files = Dir.glob("#{path}/*").reject{|name| FileTest.directory?(name)}
files.sort{|a, b|
File.mtime(a) <=> File.mtime(b)
}.each{|name|
File.split(name)[1] =~ /.+(\..+)/
File.rename("#{name}", "#{File.split(name)[0]}/#{i}#{$1}")
i += 1
}
end

実行するとファイルが消去されたりコピーされたりしてしまいます。
試しにDir.glob(#{path}/*)だけを実行したところ、存在しないファイル名が混じっていました。
また、そのファイルをFileTest.exist?に送るとtrueが返ってきます。Windowsの隠しファイルでもありませんでした。
何がどうなっているのかさっぱりわかりません。OSはVistaでRubyのバージョンは1.8.7です。
ご助力よろしくお願いします。長々と失礼しました。

842:デフォルトの名無しさん
10/01/22 22:40:56
> 存在しないファイル名が混じっていました
存在します

または、UNICODEファイル名です
UNICODEファイル名だった場合、Rubyから扱うことはできません

843:デフォルトの名無しさん
10/01/22 23:30:17
てか存在しないファイル名とか教えてくれりゃ結構一発だったり

844:デフォルトの名無しさん
10/01/22 23:33:11
察してください、まで読んだ

845:デフォルトの名無しさん
10/01/23 00:28:53
>>842
>>843

ファイル名ですが、エクスプローラーやコマンドプロンプトのdirで確認できずにrubyで検出されたのは

6.jpg
2.ini

の二つです。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5403日前に更新/233 KB
担当:undef