ラベル ruby の投稿を表示しています。 すべての投稿を表示
ラベル ruby の投稿を表示しています。 すべての投稿を表示

2014年3月29日土曜日

作成月毎にディレクトリを作成して保存する Ruby Script を書いた

作成月毎にディレクトリを作成して保存する Ruby Script を書いた

やりたいこと

毎日CSVファイルが作成されていくディレクトリがあり。
ほっておいたら知らん間に1年たっていた。
こら見難い(醜い)わということで、年月でディレクトリを作成して、
そこに分けれるようなスクリプトを作成しました。

概要

  • 2014年1月に作成されたファイルは、2014-01 ディレクトリに移動
  • 2014年2月に作成されたファイルは、2014-02 ディレクトリに移動
  • …
  • 移動先ディレクトリが存在しない場合はディレクトリを作成する

使用例

# 実行前
  ls -l
total 8
-rw-r--r--  1 oshima  staff    0  3 28 23:51 2014-02-26.csv
-rw-r--r--  1 oshima  staff    0  3 28 23:51 2014-03-26.csv
-rw-r--r--  1 oshima  staff    0  3 28 23:51 2014-03-27.csv
-rw-r--r--  1 oshima  staff    0  3 28 23:50 2014-03-28.csv
-rw-r--r--  1 oshima  staff  214  3 29 00:27 classyfy_by_month.rb

# 実行(ファイル名: 作成月が出力される)
  ruby classyfy_by_month.rb
2014-02-26.csv: 2014-03
2014-03-26.csv: 2014-03
2014-03-27.csv: 2014-03
2014-03-28.csv: 2014-03

# 実行後(ディレクトリができている)
  ls -l
total 8
drwxr-xr-x  6 oshima  staff  204  3 29 00:32 2014-03
-rw-r--r--  1 oshima  staff  214  3 29 00:27 classyfy_by_month.rb

# ディレクトリの中に各ファイルが入っている
# ファイル名でなく、作成日の月で分類
  ls -l 2014-03
total 0
-rw-r--r--  1 oshima  staff  0  3 28 23:51 2014-02-26.csv
-rw-r--r--  1 oshima  staff  0  3 28 23:51 2014-03-26.csv
-rw-r--r--  1 oshima  staff  0  3 28 23:51 2014-03-27.csv
-rw-r--r--  1 oshima  staff  0  3 28 23:50 2014-03-28.csv

code

  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年10月11日金曜日

Rubyの制御文(begin, rescue, ensure, exit など)

Rubyの制御文(begin, rescue, ensure, exit など)がどのような動きがするのか知りたかったので、サンプルを作って確認してみました。

試したのはこんな感じ。

begin
  exit
  puts "0: never"
rescue SystemExit
  puts "1: rescue"
ensure
  puts "2: ensure"
end
puts "3: after begin block"

これをtest.rbとして保存し、動かすと結果はこんな感じです。

$ ruby test.rb
1: rescue
2: ensure
3: after begin block

exit すると、SystemExit が飛ぶ。。。という感じでしょうか。

ただし、end を抜けると次の命令文がある場合には処理が実行されるようです。

exit でいきなりプッツンするわけではないみたい。

覚えておこう。


Written with StackEdit.

  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年8月2日金曜日

ActiveRecord method override

アクティブレコードのメソッドをオーバーライドしたいと思い。しらべてみました。

たとえばアクティブレコード Ore が item をひとつだけ持っている場合の定義。

class Ore < ActiveRecord::Base
has_one :item

んで。この item をとる時になんかの処理をいれたい場合。alias_method を指定する。

alias_method :original_item, :item

こうすると original_item メソッドが元々のメソッドになる。ので、適宜かきかえてやる。

例えば。

nil の場合初期化したクラスを返すならこんな感じ。

def item
  self.original_item || Item.new
end

参考にしたのはこちら。

activerecord - rails override default getter for a relationship (belongs_to) - Stack Overflow

うむ。

Written with StackEdit.

  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

Rubyの空文字判定

Rubyは実装しててベンリダナーとよく思うのですが。

nil? empty? どっちでも true 判定してくれるメソッドがあります。

その名も blank?

ありがとう。

ちなみに。ゼロはブランク判定されます。

obj = 0

if obj then "not nil"; else "nil"; end
=> "not nil"
if obj.blank? then "not blank"; else "blank"; end
=> "blank"

ちなみに。nilかどうかを判定する場合は、if文などにオブジェクトを指定してやるだけでOK。 nil?と同じ結果かな?

obj = nil
if obj then "not nil"; else "nil"; end
=> "nil"

obj = 1
if obj then "not nil"; else "nil"; end
=> "not nil"

Written with StackEdit.

  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年6月22日土曜日

Ruby で Excel

試してみた

Excelとか。どうかしてると思うのだが。。。 試してみた。

こちらのサイトを参考にさせていただきました。

RubyでExcelを操作する

で、今回のExcelはわりとデカめで、作りこんであるのだが。 open 叩いてから。。。待てど暮らせど帰って来なかった。。。 ので、不採用としました。

(自分の使い方間違ってるのか??)

ちなみに。 今回使用したファイルサイズは 約1.2MB。

バージョンアップされるのかなー。 そもそも、Rubyist はみんなExcel嫌いやろうなぁ。。。

まとめ

Excelは軽めでお願いします。 Rubyで扱うのはちっとつらいです。

  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

Rails で データベース変更

migration script 作成

コマンド
rails g migration AddColumnToTableName
最後のAddColumnToTableNameのところがクラス名になる。 キャメルケースで記述。
実行するとこんな感じ
  invoke  active_record
  create    db/migrate/20130622055021_add_column_to_table_name.rb
作成されるファイルはこんな感じ
class AddColumnToTableName < ActiveRecord::Migration
  def up
  end

  def down
  end
end

migration script 編集

up に更新内容、down に戻すときの内容を記述。 項目の追加・削除だけの場合は change メソッドでOK。 rails くんがよろしくやってくれます。
class AddColumnToTableName < ActiveRecord::Migration
  def change
    add_column :table_name, :column_name, :string #項目追加: テーブル名, 項目名, 型名
    rename_column :table_name, :before_name, :after_name #項目名変更: テーブル名, 旧項目名, 新項目名
  end
end

add_column の引数は テーブル名、カラム名、型 を指定します。

※2013年7月19日: 間違いまくっていたのでなおした

テーブル定義以外は修正してくれないみたいなので、modelなどは自分で修正する必要があります。

  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly