Ruby

mechanizeの使い方

よく忘れるので。 まずrequire。 require 'mechanize' アメブロにログインしてエントリーを自動で登録する場合 agent = WWW::Mechanize.new diary_page = agent.get("http://blog.ameba.jp/ucs/entry/srventryinsertinput.do") ログイン処理。 フィールドは…

XML処理 REXMLの使い方

よく忘れるので。 こんなXMLを用意した場合の例。 <root> <a name="a1"> <b>bbb1</b> <b>bbb2</b> <b>bbb3</b> <c>ccc1</c> </a> <a> <b>bbb4</b> <b>bbb5</b> </a> <a name="a3" price="100"></a> </root> 必ずrequire require 'rexml/document' XML読み込み doc = REXML::Document.new(open("hoge.xml")) とりあえず全文dump puts doc #結果 <root> </root>

gemで旧バージョンのRailsを入手する

gem install rails -v 1.2.6

gemを使ってインストールしたプラグインを削除する

gem uninstall railsいくつもバージョンを入れている場合は、上記実行後に削除するバージョンを聞かれる。

Gem自体のアップデート

gem update --systemバージョン確認は、 gem -v

render :action

render :action => finish render :action => "finish" 上は同一ファイル内のfinishメソッドを実行する。 下は実行せずにfinish.html.erbファイルを実行する。 追記 上はfinishメソッドを実行したあと、viewには行かず、元のメソッドに戻ってくるっぽい。

さくらインターネットにgemをインストールする

こちらを参照。 ・がんちゃんのブログ: さくらのレンタルサーバにRuby on Railsをインストールする方法 途中途中でつまったのでメモ。 アクセスツール ツールは2つ用意。 ・WinSCP:WinSCP :: Official Site :: Download …ファイルアップロード・操作用(Mul…

その月の最大日付を返すユーティリティ

例えば1月なら31、2月なら28を返すようなメソッドを探したがなかったので作ってみた。 require 'date' class DateUtil def DateUtil.actual_maximum(date) d = Date.new((date >> 1).year, (date >> 1).month, 1) (d - 1).day end end クラスメソッドで呼ぶ…

%記法の書き方

例えばHTMLをRubyで扱うとき、 str = "<input type=\"text\" value=\"hoge\">" ってやったりするが。バックスラッシュ(\マーク)を書くのがめんどい。 対処法はシングルクォーテーションで囲むというのが1つ。 str = '<input type="text" value="hoge">' でも、せっかくなら%記法を使いたい。 %Q(または%!)は、文字列のダブルク…

REXMLの呼び方

doc = Document.new(open('xml_test.xml')) puts doc.get_text("a/b") #テキストノードをとるとき puts doc.elements['a'].attribute('att') #属性値を取るとき 存在しないエレメントからget_textをやると、「nil」が返ってくる。 とても良い仕様。

REXML Elementの呼び方

1つだけ取り出すときは doc = Document.new(open('xml_test.xml')) e = doc.elements[1] #添え字が1から始まることに注意 #または要素名 e = doc.elements["hoge"] ループで取り出すときは doc = Document.new(open('xml_test.xml')) doc.each_element("hoge…

REXMLを使うとき

以下を呼ぶ。 require('rexml/document') include REXML 参考:http://pub.cozmixng.org/~kou/rexml-doc-ja/classes/REXML/Elements.html

HashをValue順に並び替える

JavaでいうところのTreeMap(だったっけ)のようなことをやってみようとした。 {単語:出現回数}のようなHashがあったときに、出現回数降順に並べてみる。 まず、 result = hash.sort{|a, b| b[1] <=> a[1] } でソート。 ところが、この結果はHashでなくArra…

readlinesって一発でできるんじゃん

今までファイルを開いて全行読み込むときは io = open("hoge.txt") any = io.readlines ってやってたけど、 any = IO.readlines("hoge.txt") でできる。 これって、closeしなくていいのかな…。

ファイルに書き込めない!と言われたときは

第2引数を忘れてます。 io = open("hoge.txt", "w+") 読み込みのときは不要。

Arrayの中身でのソート

Arrayにオブジェクトが入っていて、かつ、そのオブジェクトの1パラメータでソートする場合。 class hoge attr_accessor :id end # listにhogeを複数追加 : #以下、ソート puts list.sort_by{|hoge| hoge.id} 便利すぎ。 Hashの場合は hash.sort{|a, b| a[1] …

日本語文字の処理

Rubyはバイトコードで処理するので、日本語文字の処理が直感的にできない悩みがあったけど、 jcode+JStringの組み合わせで漢字も含めて対処できるかもしれない。http://taiyaki.org/ruby/jstring/ $KCODE='u' require 'jcode' require 'jstring' str = "一太…

Lacoocanでのモジュール設定パス

ずっとわからず苦労してた。 LacoocanはRubyが使えるものの、導入されているライブラリが少なく独自のライブラリを入れようとしてたが、 何度試してもできずに苦労していた。 結論からすると、アクセス対象のRubyファイルは拡張子を「.cgi」にしなきゃいけな…

環境設定、パスなど

キャッシュになってたので、転載。●rubyのちょっとしたことrubyを使っていてちょっと疑問に思ったこと、使いやすくするためにした工夫、 どうでもいいようなことをまとめました。 ●requireはどこのパスから読み込む?巨大なプログラムを組むとなると、当然共…

WWW::Mechanizeのインストール

疑似ブラウザ的にWebサイトを扱えるモジュール。コマンドは、 gem install mechanize番号聞かれたら1を入力した。 Bulk updating Gem source index for: http://gems.rubyforge.org Install required dependency hpricot? [Yn] y Select which gem to instal…

String#sliceの挙動

当たり前っちゃあたりまえだけど、メモ 戻り値は「切り出した値」。これは破壊的メソッドを使ったときも同じ。 line ="0123456" str = line.slice(0, 3) puts str =>012 破壊的メソッドを使ったときの、自分の値は「切り出された残り」 line ="0123456" line…

UTF-8環境で半角英数字前後の半角スペースを除去する方法

Webなどでは見やすさのために英数字の前後に半角スペースを挿入していることがあるが、 そんな文章から半角スペースを取るプログラムを組みたかった。 たとえば 「Java なら Eclipse、.NET なら Visual Studio というツールがあります」なら 「JavaならEclip…

UTF-8でも文字化けさせずにコンソールでデバッグする方法

Eclipseはコンソール出力がOSに依存してしまう(WindowsはSJIS)なので、 Rubyでputsをやると文字化けしてしまう。 デバッグ時は、SJISに変換してやるしかないようだ。 require 'kconv' str = "ほげほげ" puts str.tosjis こうやれば、「ほげほげ」が出力さ…

ディレクトリがなかったら作成する

FileUtils.mkdir_p(path) unless FileTest.exist?(path) ディレクトリの作成はDir.mkdirでもいいんだけど、 FileUtils.mkdir_pを使うと階層化されたパス(/user/hoge/ababa といった形式)も渡せるのでこれが便利。 この場合、「user」「hoge」「ababa」がな…

時間のフォーマット

現在時刻をYYYYMMDDHHMISS形式で表示するには t = Time.new t.strftime("%Y%m%d%H%M%S") puts t

クラスメソッドの書き方

class Foo def Foo.bar puts "hello" end end と定義(ファイル名は「foo.rb」)。これを他のクラスから require "foo" Foo.bar とすると、「hello」が出力される。

File、あるいはDirの存在チェック

たとえば「hoge」というファイルをチェックするときは FileTest.exist?("hoge") で。戻り値はboolean。ファイルもディレクトリも同じ。

逆順ソート

Array#sortを逆順にするには ary.sort{|i| -i } が正解。 Array#reverseは、現在の並び順を真逆にするだけで、ソートはしていない。

全角文字を半角文字に変換するプログラム

require 'jcode' aaa = ("ABC") puts aaa.tr('A-Z', 'A-Z') ただし、エディタならびにRubyの文字コードを統一(UTF-8など)しておく必要あり。

テキストファイルを固定文字数で切って、行番号をつけるプログラム

抜粋 #!ruby -Ks head_figure = 3 text_length = 80 - head_figure - 2 while line = gets do line.chomp! lines = Array.new while line.gsub!( /^.{#{text_length}}/, '' ) do lines << $& end lines << line # 行番号をつけて出力 result = '' lines.each…