2010年11月22日

Ruby on Rails in_groups_of(*)

in_groups_ofとは?


配列を指定数単位で区切ることが可能

環境


ruby1.9.1
rails2.3.5

使用方法


hoge=[1,2,3,4,5]
hoge.in_groups_of(2)
=>[[1, 2], [3, 4], [5, nil]]


たとえばdivで区切りたいときに使用
<div class="hoge1">1,2</div>
<div class="hoge2">3,4</div>
<div class="hoge3">5</div>
こんな感じ
posted by RicK at 19:20| Comment(0) | TrackBack(0) | 日記

2010年11月01日

Ruby on Rail 検索キーワード取得

検索キーワード取得とは?


通常googleなどで検索してから各HPへ遷移すると思いますが、
そのとき検索に使用したキーワードを各HPで取得するということです。

環境


rails1.2.6

取得方法


取得方法は至って簡単
request.env['HTTP_REFERER']

これで取得可能です。
urlなどよけいなものもついていますが、
d=の後ろがキーワードなので、そこだけ正規表現などで取り出してください。

日本語は文字化けしているようになっていますが、
エンコードされているだけです。
デコードしてあげましょう。
CGI.unescape(request.env['HTTP_REFERER'])

まだ化けてる時がありません。その時は文字コードを修正します。
CGI.unescape(request.env['HTTP_REFERER']).kconv(Kconv::UTF8,Kconv::SJIS)

上記は、SJISからUTF8へ変換しています。

注意


検索からSSLへ遷移する場合ですが、
なんとdocomoは、HTTP_REFERERが取得できません。
昔なんかおこしたらしく、REFERERが削除されるようになったらしいです。
いやなんとも迷惑な話です。
違うページをはさんでredirectとかならできると思うのですが、
それはだめとかいわれそうですよね。。。
いぁまったく、どうしろというんですかねぇ。
posted by RicK at 16:09| Comment(0) | TrackBack(0) | 日記

2010年10月06日

Ruby on Rails Redmine

remineとは?


タスク管理ツールです。
SubVersionとかも管理できるんですが、今回はredmineのinstallです。

環境


ruby 1.8.6
rails 1.2.5
sqlite 3.5.3
CentOS 5.2
redmine 0.6.4
download /usr/local/src
ソース /var/

Redmine Install


$wget http://rubyforge.org/frs/download.php/33789/redmine-0.6.4.tar.gz
// redmine 7.0以降はrails2系でないとダメらしいです。
$ tar xvf http://rubyforge.org/frs/download.php/33789/redmine-0.6.4.tar.gz
$ cp -a redmine-0.6.4 /var/

Redmine 設定


$ cd /var/redmine-0.6.4
$ cp config/database.yml.sample config/database.yml
$ vi config/database.yml
production:
adapter: sqlite3
dbfile: redmine.db
timeout: 5000

[gem sqlite3-ruby install]
$ gem intall sqlte3-ruby

$ rake db:migrate RAILS_ENV=production
$ rake redmine:load_default_data RAILS_ENV=production
Select language: bg, cs, de, en, es, fr, he, it, ja, ko, nl, pl, pt, pt-br, ro, ru, sr, sv, zh, zh-tw [en] ja ←jaを入力してenter


Rdmine 起動


monbrelを使用して起動します。
$ vi config/mongrel_cluster.yml
port: "3000"
environment: production
log_file: /var/redmine-0.6.4/log/mongrel.mongrel.log
public_file: /var/redmine-0.6.4/public
servers: 1

$ mongrel_rails cluster::start


これでlocalhost:3000でアクセス可能です。
posted by RicK at 15:40| Comment(0) | TrackBack(0) | 日記

2010年09月14日

Ruby on Rails find first

firstとは?


firstとはその名の通り最初です。
詳細話すと終わっちゃううのこんだけ。

環境


rails 1.2.4

使いどころ


例:
@hoge = Hoge.find(:all)

こうすると@hogeの中には配列で何個かデータが取れます。

もぅ予想がついたと思いますが、この最初のデータを取り出します。
基本的に使用することはないでしょうが、
何らかの理由でallでとってから最初だけ欲しい場合、
やむなく
@hoge[0]

なんて風に書いたことあるかもしれません。
これはとてつもなくださいですよね。
なんというか初心者丸出し的な。。。

そんなわけで少しでも見た感じかっこ良くするために
@hoge.first

とするわけです。

なんとなくかっこいいですよねw
posted by RicK at 16:00| Comment(0) | TrackBack(0) | 日記

2010年09月01日

Ruby auの絵文字をメールで受け取って表示させるとエラー

現象


絵文字あるのメールを
NKF.nkf("-w",本文)

として保存して表示させると。
auの場合hメソッドをつけているにもかかわらず意味不明な記号のような漢字のようなものになって表示のときにエラーになります。
docomoだと=になります。
softbankはためしてないのでわかりません。

auの場合も、特定の絵文字のみで(例えば鉛筆の絵文字)、
他の絵文字だと保存する前に消滅したり、明らかに常用語でない漢字になって
絵文字が表示されなかったりします。

とりあえずエラーはまずいのでエラーをなくします。

環境


ruby1.8.6
NKF2.0.7

原因


どうやらNKFの2.0.7以前のものにはMIMEをエンコードすると正しく出力されないバグがあるらしいです。

対策


1、ライブラリーを2.0.8以降のものにする
2、おかしいのはutf-8らしいので、一度他の文字コードにしてから変換

自分は2でやりました。
NKF.nkf("-w",NKF.nkf("-j",本文))

こんな感じです。

結果


一応エラー自体はなくなりました。
ただ、特定の絵文字を使うと他の日本語なども巻き込んで文字化け状態で表示されます。

絵文字を抜かす処理とか絵文字だったらメール受け取らないとかの処理をしないとかもなぁ。。。
携帯は面倒ですよねほんと
posted by RicK at 17:28| Comment(0) | TrackBack(0) | 日記

2010年08月24日

Ruby on Rails formのsubmitを押すとなぜか戻るエラー

エラー概要


あるページをhttpsにかえたところauのみformがおかしくなりました。
どうおかしくなったかというと、submitボタンを押しても次の画面へ遷移せずに、
なぜかブラウザの戻るボタンと同じで前の画面へ遷移するようになりました。

エラー原因


htmlの階層構造ミス
恐らく主にdivだと思いますが、divが閉じていなかったり逆に閉じる/divだけあったりと
様々ですが、とりあえず構造ミスです。

httpsでないと発生しない上に、docomoとsoftbankでも発生しません。
おそらくauでも機種依存はあるでしょう。
まぁ階層構造のミスという単純なミスではありますが、
エラーなどは出ず、しかもauだけという気づきにくいものなのでご注意を。
posted by RicK at 18:37| Comment(0) | TrackBack(0) | 日記

2010年08月20日

公開鍵作成方法

公開鍵とは?


公開されている自分の証明とでもいえばいでしょうか。
まぁsshなどの自動ログインなどで使用されます。

作成方法


ssh-keygen -t rsa
// 鍵を作成する場所です。.ssh/id_rsaに作るのでこのままEnter
Enter file in which to save the key (/Users/hoge/.ssh/id_rsa):
// パスワード入力
Enter passphrase (empty for no passphrase):
// パスワード再入力
Enter same passphrase again:


~/.ssh/id_rsa
~/.ssh/id_rsa.pub

この2つが作成されます。
id_rsaが秘密鍵
id_rsa.pubが公開鍵です。
posted by RicK at 14:12| Comment(0) | TrackBack(0) | 日記

2010年08月06日

Ruby on Rails CSV Error

CSVとは?


データをカンマ区切りで並べたものです。

環境


rails1.2.6

Error


SYLKファイル開けない

とでる

解決


列名(カラム名ではない)が最初IDだとだめらしい
列名をidとかにすれば解決
posted by RicK at 18:55| Comment(0) | TrackBack(0) | 日記

2010年08月04日

Ruby on Rails file_column

file_columnとは?


画像をアップするためのプラグインです。

環境


rails2.2.2
app/models/hoge.rb
app/views/hoge.html.erb

install


パターン1
ruby script/plugin install

パターン2


使用方法


hogeテーブルに
t.string image

カラムを追加

$ vi hoge.rb
file_column :image,
// カラム名指定
:magick =>{version =>{
:icon => "15x15"
}
},
:web_root => "images/",
:root_path => File.join(RAILS_ROOT,"public","images")
// 上記の場所に作成される。
// ここで多少場所を変えたりはできるが、大幅に場所を変えようとするとプラグインを改造しないと無理っぽい
// カラム名指定以外はなくても問題ない

$ vi hoge.html.erb
<% form_for(@blog, :html => {:multipart => true}) do |f| %>
<%= file_column_field "image", "image", "icon" %>
// これはプラグインのヘルパー、第3引数はなくてもいいし、あればmodelで指定したサイズが作成される


サイズ指定


320x240と320x240>と320x240!の違い
・320x240:縦横比を維持して、このサイズに収まる大きさにする。
・320x240>:これより小さい画像は小さいままで拡大しない。
・320x240!:縦横比を無視して、このサイズぴったりにあわせる。

エラーなど


uninitialized constant FileColumn::ClassMethods::Inflector

解決
$ vi vender/plugins/file_column/lib/file_column.rb
Inflector.underscore(self.name).to_s
// 下記へ変更
self.name.to_s.underscore


$ vi vendor/plugins/file_column/init.rb

ここにあるrequire 'test_case'がある場合はコメントアウト

Type Error

multipart => true

の指定忘れ
posted by RicK at 16:43| Comment(0) | TrackBack(0) | 日記

2010年08月02日

Ruby技術者認定試験

Ruby技術者認定試験

受けてきました。
んでもって書いているということは合格したってことです。
というわけでこれから受けるという人に流れの説明。

参考資料



練習問題1
練習問題2

勉強方法


参考資料にあるRuby技術者認定試験公式ガイドを購入
(書店にはあんまりないのでご注意を)
この参考書の過去問を解く、、、無論合格圏外w
次に練習問題1を解く、、、もちろん合格圏外w
ついでに練習問題2も解きます。。これは結構難しいですね。

とまぁ、全部ダメダメだったわけですが、
公式ガイドを何度も読んで100問ある問題も
何度も解きまして、練習問題も3往復くらい解いて
問題をみたら答えがぱっと出るくらいになれば完璧ですね。

申し込み


受験の申し込みは1週間くらい前で十分です。
毎日やっているので混むこともほとんどないです。
PROMETRICで、Webから申し込むことができますが、
その前に、「試験予約の流れ」と「当日の受験手順」をみてください。
Ruby認定試験は、PCで行う試験で基本技術者のような
紙と鉛筆を使用して行う試験ではありませんので、
「当日の受験手順」を行ってちょっとなれておいた方がいいかもしれません。

試験直前


受験票?には、15分前集合とありましたが自分の時は10分前集合でした。
日曜日の1時で受験者人数は7人程です。
試験会場に入る前に荷物をロッカーに預けて、
持ち込めるのは、ロッカーの鍵と手渡された
メモ用紙(といっても紙でなくプラスチックのようなもんで消せないし1枚しかない、まぁいえばあとでもっとらえるらしいですが)
ペン、あとよくみてないですが注意書き?がはいった入れ物です。
机にはヘッドホンがおいてあり、音が気になる人は使用してもいいようです。

試験


さて、いよいよ試験開始です。
最初はもらったカードの番号を入力して、注意書きみたいなのが2枚ほど
続いてそこから1時間半の試験がスタートしました。
ちなみに、試験会場に入ったら自分勝手に始めていいそうです。
問題は、まぁ書いてある勉強法を行えば問題ないと思います。
とりあえず自分は、見直しマークにすべてチェックを入れてみました。
(チェック入れないと見直しできないと思って。。)
解答を全部埋めて残り時間をみてみると、残り1時間ありましたw
そこから全部を見直しマーク外しつつ見直して、
ケアレスミスが2つほどありました。
1つ目は、concatをconnectだったかなんかと間違えていた。
2つ目は、選択するのが2つなのに1つしかチェックしてなかった。
いやぁ見直しは大切ですよねw
それで全部見直した後に再度2つ選択しなくてはいけないところを
2つ以下や以上選択していないか確認してから終了しました。
終了するとアンケート画面になり、
Rubyを普段使用しているか?
Rubyをどのように使用しているか?
Rubyを初めてどのくらいか?
などを答えて終了となりました。

終わった瞬間に

合格です。
あなたの得点は90点です。

と真ん中にぽつんと出てきて危うく見逃すところでしたが、
さすがPCでやるだけあって結果がすぐ出てきますね。
ちなみに見直しをしても残り時間は30分ありました。

試験後


上の画面をみて終了ボタンを押したら無言で外の受付までいって
終了を知らせます。
合格のA4の薄ぺらな紙1枚をもらって終了です。

正式な紙?は、後日届くそうです。

ちなみに合格するために必要な点数は75%の75点です。
37~38/50で合格ということですね。
受験料は、15,750円と高めですがRubyの会社ですと、
5人以上この資格を持っていればそこから認定?してもらえるらしいです。
posted by RicK at 15:51| Comment(0) | TrackBack(0) | 日記

2010年07月30日

Ruby on Rail With PostgreSQL countで重複を除く

countで重複を除くとは?


まぁそのままですがrailsとpostgresでcountするときに重複を除く方法です。

環境


rails1.2.6
postgresql8.4.4
table1
user_id
-----
1
2
1

PostgreSQLでの使用方法


SELECT count(*) FROM table1;
=> 3
SELECT count(DISTINCT user_id) FROM table1;
=> 2


Ruby on Railsでの使用方法


Hoge.count
=> 3
Hoge.count(:user_id, :distinct => true)
=> 2
posted by RicK at 19:50| Comment(0) | TrackBack(0) | 日記

2010年07月28日

Ruby on Rails form_tagでmethodをgetにする

methodをgetとは?


通常formを使用するとpost送信になります。
しかし、たまにgetではないとダメな気もあります。

環境


rails1.2.6
app/views/hoge/hoge.rhtml

使用方法


$ vi hoge.rhtml
<% form_tag({:action=> 'boge'}, {:method => 'get'}) do %>
・・・
<% end %>

これでデータの引き渡し方法をgetへかえてくれます。
posted by RicK at 17:30| Comment(0) | TrackBack(0) | 日記

2010年07月22日

Ruby on Rails 行と列を意識したCSV出力

行と列を意識したCSV出力とは?


通常のcsv出力は1カラムが1行として出力するのが普通ですが、
例えば、クイズが1〜3の3種類あったとしてそれを
一つずつ列にして、なおかつ行に日付にします。
つまり
期間 クイズ1 クイズ2 クイズ3
5/1 title title title
5/2 title title title
5/3 title title title

このような形のcsv出力をしたいという訳です。
テーブルのカラムは
id,quiz,type,created_at

といったところです。
日付でGROUP BYなどして出力しても
期間 クイズ種類 title
5/1 クイズ1 title
5/2 クイズ2 title
5/3 クイズ3 title

このようにクイズの種類ごとに並べることはできません。

環境


rails1.2.6
table1
app/controllers/csv_controller.rb

使用方法


結構なごり押しな感じな書き方ではありますが、
2重配列を作成して吐き出す方法をとりました。
$ vi csv_controller.rb
class CsvController < ApplicationController
 def csv
  require 'csv'
  @csv = []
  start_date = Date.parse(params[:start])
  end_date = Date.parse(params[:start])
  date = end_date - start_date
  // 日付の開始と終わりのデータを取ってきています(このviewは省略)
  p_date = date.to_i + 1
  i = 0
  p_date.times do
   end_date = start_date + i
   type1 = Table1.type_titel(1, end_date)
   type2 = Table1.type_titel(2, end_date)
   type3 = Table1.type_titel(3, end_date)
   // 日付とクイズの種類を指定してデータを取り出す処理(省略)
   @csv << [end_date, type1.title, type2.title, type3.title]
   i += 1   
  end
  // これで@csvに2重配列となり、日付とそれぞれのクイズのタイトルが入ります。
  
  headers["Content-Type"] ||= "text/csv"
  headers[""Content-Disposition] ||= "attachment; filename=\hoge\"
  csv_string = FasterCSV.generate do |csv|
   csv << ["期間", "クイズ1", "クイズ2", "クイズ3"]
   // 列の名前
   @csv.each do |a_csv|
    csv << a_csv
    // ここで行を入れる
   end
  end
  render :text => csv_string.tosjis
 end
end
posted by RicK at 16:05| Comment(0) | TrackBack(0) | 日記

2010年07月20日

Postgres 曖昧join

曖昧joinとは?


曖昧といってもjoinのid=idがid=hogeでもいいとかではなく
created_at=created_atとする場合
2010-07-19 12:38:33.960312と2010-07-19 12:37:53.012715で
日付で紐付けたいが、時間が邪魔でひもづかない場合などの曖昧です。

環境


PostgreSQL8.4.4
tabe1
table2

使用方法


psql -U hoge hoge
SELECT * FROM table1 LEFT JOIN table2 ON to_char(table1.created_at, 'YYYY/MM/DD') = to_char(table2.created_at, 'YYYY/MM/DD')

このようにto_charでフォーマットを整えてあげれば、
時間を無視して、同じ日付で紐付けることが可能です。
posted by RicK at 16:32| Comment(0) | TrackBack(0) | 日記

2010年07月15日

アンドロイドアプリ作成 for Mac

流れ
環境設定構築からHello World表示まで

環境


Mac10.5 MacBookPro

アンドロイド開発環境の取得と設定



上記からMac OS X用をdownload
解凍後、Applicationフォルダに入れる。
$ vi ~/.bash_profile
export PATH=$PATH:/Applications/android-sdk-mac_86/tools

上記PATH追加

eclipseの取得



からEclipse IDE for Java Developersをdownload
解凍後、Applicationにフォルダごと入れる。

ADTのPlugin install


1. Eclipseを起動して, Helpメニューから Install New Software を選択
2. Available Software ダイアログが表示されたら、[Add....] をクリックする。
3. Add Site dialog が表示されたら、リモートサイトの名前をNameフィールドに入力する(”Android Plugin” みたいな感じに)。
Locationフィールドには以下の URLを入力する。
https://dl-ssl.google.com/android/eclipse/
注意:もし上手くいかなかったら”https”を”http”にかえて試してみる。
[OK] をクリックする。
4. Available Software ダイアログに戻ると、リスト上に”Developer Tools”という上が追加されているはず。
この行のチェックボックスをチェックすることで、これ以下の階層にある Android DDMS とAndroid Development Tools もチェックされる。 [Next] をクリックする。
5. インストール実行され、結果が Install Details dialogに表示される。 Android DDMS と Android Development Tools がリストされているはず。 [Next] をクリックして使用許諾に合意し、[Finish]をクリック。インストール処理が開始される。
 途中で警告が出たが、気にせずおk
6. Eclipseを再起動する。

パッケージのinstall


$ android

上記コマンドでandroidが起動
Available Packages選択、urlタグクリックしたら、自分の場合
No suitable XML schema validator could be found in your Java environment. Please update your version of java

エラー発生。

にてjava for Mac OS X 10.5 pdate 5をdownloadしてinstallすれば解決。
再度urlクリックで、プラグインがいろいろ表示される。
すべてにチェックをつけてinstall Selectedを押す。

仮想でバイスの作成


$ android list target

これでどのversionのアンドロイドにあわせて作るかみる
$ android create avd -n 名前 -t 上で決めたid(3とか)

Android 1.6 is a basic Android platform.
Do you wish to create a custom hardware profile [no]
と確認を求めてきます。これは「アンドロイド1.6のプラットフォームで仮想デバイスを作ります、良いですか?」という意味ですので、そのまま Enterを入力します。
Created AVD ‘android’ based on Android 1.6, with the following hardware config:
hw.lcd.density=160
とメッセージが表示されれば、仮想デバイスの作成は終了です。

パス指定


eclipseの環境設定でAndroidのSDK Location:にandroid--sdk-mac_86のパスを記述

実行


eclipseのRunからRun ASでAndroiod Applicationを選択
Androidが実行されてしばらく待っているとHello World, HelloAndroid!が表示されます。

なぜなにも書いてないのにHelloWorldが表示されるかは、次のアンドロイド説明時にします。
posted by RicK at 16:08| Comment(0) | TrackBack(0) | 日記

2010年07月13日

Ruby 配列(Array) 生成

配列とは?


以前参照

今回は、配列の生成について

環境


ruby1.8.6
irb

生成方法


$ irb
Array[1,2,3]
=> [1,2,3]

Array以外でやるとエラーなので注意
$ irb
Bay[1,2,3]
NameError: uninitialized constant Bay
from (irb):3


$ irb
Array.new(5,3)
=>[3,3,3,3,3]

配列5つ分作成、中身は第2引数

$ irb
Array.new(3){|i| i}
=>[0,1,2]

配列3つ作成、中身はブロック

$ irb
array = []
array
=>[]

これが一番楽ですかね。

$ irb
array = [1,2,3]
array
=>[1,2,3]
posted by RicK at 14:53| Comment(0) | TrackBack(0) | 日記

2010年07月08日

Mac install Rails

前回の続き

Railsのinstall


Leoperdは、最初からrubyとrailsが入っているので、
とりあえず、なにが足りないかプロジェクトを起動して確認します。
$ ruby script/server
no such file to load -- postgres (MissingSourceFile)

ruby用のpostgres入れないとですね。
$ sudo gem install postgres
gem could not find postgres locally or in a repository

???ない??じゃぁ
$ sudo gem install postgres-pr
gem could not find postgres-pr locally or in a repository

gemが悪いっぽいかなぁ
$ sudo gem update --system
$ sudo gem install postgres

なんか入んないや
$ sudo gem install postgres-pr

まぁこれでいいか、といことで入りました。
$ ruby script/server
no such file to load -- RMagick (MissingSourceFile)

Mac Portからいれます。
http://svn.macosforge.org/repository/macports/downloads/
こっから最新を落としてきて、インストーラーなので手順に従ってインストール
パスが自動で追加されるので
$ source ~/.bash_profile

を忘れずに。
んでportのupdate
$ sudo port -d selfupdate


さて、Rmagick入れましょ
$ sudo port -d sync
$ sudo port install ImageMagick
$ sudo port install rb-rmagick
$ ruby script/server
no such file to load -- rubygems (LoadError)

$ sudo port install rb-rubygems

・・・rb-rubygemsのinstall、これは、、やんない方がいいかもw
理由は、rubyとgemがなんだか新しいのはいってるっぽいw
/usr/local/bin/rubyや/usr/local/bin/gemを先に見に行っちゃって
/usr/bin/rubyと/usr/bin/gemを見に行かなくなっちゃたw

まぁ、、やっちゃったもんはしょうがないから、シンボリックリンクでもしますか
$ su -
$ cd /usr/local/bin
$ ln -s /usr/bin/ruby
$ ln -s /usr/bin/gem

うし、戻った。
$ ruby script/server
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- gruff (MissingSourceFile)
$ gem install gruff

これ、無駄に悩みましたw
Rmagick関係かなぁ?とか思って
no such file to load -- gruff

とかで検索してもほとんどないし英語だしとかでよくわかんなかったんですが、
$ sudo gem install gruff

これだけでおkですw
$ ruby script/server


お〜やっとちゃんと起動した。
なんやらよけいなこともしちゃったけど、まぁおkでしょ。
posted by RicK at 12:31| Comment(0) | TrackBack(0) | 日記

2010年07月07日

Mac install PostgreSQL

仕事用のmacが壊れたので、軽く環境設定の話

環境


MacBookPro
Mac OS X 10.5.8

PostgreSQLのinstall


そのためにReadlineのinstall
そのためにgccのinstallが必要

macのサイトからXcodeを落としてきてインストール

Readlineのinstall
$ curl -O ftp://ftp.gnu.org/gnu/readline/readline-5.1.tar.gz
$ tar xzvf readline-5.1.tar.gz
$ cd readline-5.1
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
// なんか足りないとか出るけどきにしない


PostgresのInstal
Postgresのサイトから最新を落としてくる
$ ./configure --with-includes=/usr/local/include/readline -prefix=/usr/local/
$ make
$ sudo make install


postgresアカウント作成
$ su -
$ mkdir /usr/local/pgsql/data
$ chown postgres /usr/local/pgsql/data
$ su - postgres
$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
posted by RicK at 18:42| Comment(0) | TrackBack(0) | 日記

2010年07月05日

Ruby 正規表現のオプション

正規表現とは?


以前の内容をごらんください。

環境


ruby1.8.6
irb

オプション


i:大文字小文字の区別をしない
$ irb
/ruby/ =~ "Ruby"
=> nil
/ruby/i =~ "Ruby"
=> 0


o:一番最初に正規表現の評価が行われた時に一度だけ式展開され、同じ正規表現オブジェクトを返すようになります。
これは、ちょっと難しいです。
$ irb
a=["a","b","c"]
a.each do |x|
 if /\w/o =~ x
  puts x
 end
end
=> a
b
c

#流れ的にaだけが展開されてbcは無視されるんじゃぁないの?と言った感じですが、違います。
a=["a","b","c"]
a.each do |x|
 if /#{x}/ =~ x
  puts x
 end
end
=> a

これだとaのみ展開されます。
つまり、「一番最初に正規表現の評価が行われた時に一度だけ式展開され」これは、
//この正規表現を書く場所が一度展開されたら変わらないということです。
上記の1つ目は、\wという正規表現で変わらないため、全て表示されました。
一方2つ目は、a,b,cというように正規表現が変わろうとしたが、
oオプションにより最初のaしか式を展開しないため、
if /a/ =~ a
if /a/ =~ b
if /a/ =~ c

と言った具合に式が展開されたという事です。
これがオプションoです。
ほとんど使う事はないと思いますけどね。

x:正規表現中の空白や改行、コメントアウトを無視します。
$ irb
/foo # コメント
bar/x

これは/foobar/と同じ意味の正規表現です。

m:.が改行にもマッチする様になります。
$ irb
/a.c/ =~ "a\nc"
=> nil
/a.c/m =~ "a\nc"
=> 0


※ちなみに返ってくる値が0なのはindex0の場所がマッチしているという事です。

%r:/を勝手にエスケープしれくれます。
$ irb
%r|a/b/c|
=> /a\/b\/c/


$&:マッチした値を取り出します。
$`:マッチした前の値を取り出します。
$':マッチした後の値を取り出します。
$ irb
/b/ =~ "aabcc"
$&
=> "b"
$`
=%gt; "cc"
$'
=> "aa"
posted by RicK at 15:41| Comment(0) | TrackBack(0) | 日記

2010年07月01日

Ruby 文字列の配列化と配列からの文字列化

配列とは?


[1,2,3]こゆのです

環境


ruby1.8.6
irb

文字列から配列化


$ irb
hoge = "愛知,静岡,神奈川"
hoge.split(",")
=> ["愛知","静岡","神奈川"]
hoge
=> "愛知、静岡、神奈川"

文字列中の","を区切りとして配列を作成します。
区切りたい文字はsplitの引数に書けば","でなくても問題有りません。

配列から文字列化


$ irb
hoge = ["愛知","静岡","神奈川"]
hoge.join(",")
=> "愛知,静岡,神奈川"
hoge
=> ["愛知","静岡","神奈川"]

配列の各要素ごとを","によって区切り文字列として表示します。
区切りたい文字はjoinの引数に書けば","でなくても問題有りません。
posted by RicK at 15:48| Comment(0) | TrackBack(0) | 日記