配列オブジェクトは範囲オブジェクトと同じく複数の要素を持つオブジェクトです。配列オブジェクトに対しては for 文などの繰り返し処理と組み合わせて利用することができます。ここでは Ruby で配列オブジェクトに対して繰り返し処理を行う方法を解説します。
API経由で取得した日付情報(String)を扱う時とか。 いつも忘れるのでメモ。 String to Time Time.parse() # Time to String > str = Time.now.to_s => "2014-04-07 10:00:00" # String to Time > time = Time.parse(str) => 2014-04-07 10:00:00 +0900
[edit] 要約 時刻を表すクラスです。 Time.now は現在の時刻を返します。 File.mtime などが返すファイルのタイムスタンプは Time オブジェクトです。 Time オブジェクトは時刻を起算時からの経過秒数で保持しています。起算時は協定世界時(UTC、もしくはその旧称から GMT とも表記されます) の 1970年1月1日午前0時です。なお、うるう秒を勘定するかどうかはシステムによります。 Time オブジェクトが格納可能な時刻の範囲は環境によって異なっていましたが、 Ruby 1.9.2 からは OS の制限の影響を受けません。 また、Time オブジェクトは協定世界時と地方時のどちらのタイムゾーンを使用するかのフラグを内部に保持しています。タイムゾーンのフラグは Marshal データに保持されます。 p Marshal.load(Marshal.dump(Tim
# Zip圧縮 def compress(path, zippath) File.unlink zippath if File.file?(zippath) Zip::File.open(zippath, Zip::File::CREATE) do |z_fp| z_fp.add(File.basename(path), path) end outpath end # Zip解凍 def uncompress(path, outpath) entrys = [] Dir.mkdir(outpath) unless Dir.exist?(outpath) # 2つ目の引数はoffset Zip::InputStream.open(path, 0) do |input| # get_next_entryするとinputのoffset(ポインタ)が動く while (entry = input.
require 'time' time = Time.now => 2016-07-01 13:03:00 +0900 # マイクロ秒部分を整数で取得 time.usec => 193967 # iso8601フォーマットでマイクロ秒含めて表示 time.iso8601(6) => "2016-07-01T13:03:00.193967+09:00" # 引数に小数点以下の桁数を入れるのでミリ秒なら3を指定する irb(main):009:0> time.iso8601(3) => "2016-07-01T13:03:00.193+09:00" # xmlschemaメソッドも同義 irb(main):010:0> time.xmlschema(3) => "2016-07-01T13:03:00.193+09:00" 文字列からTimeを生成 ISO8601フォーマットの文字列から生成す
[edit] 要約 ファイルの検査関数を集めたモジュールです。 注意 FileTest で定義された各メソッドは、システムコールに失敗しても例外を発生させません。真を返した時のみ、返り値は意味をもちます。例えば、 File.exist?('/root/.bashrc') が false を返しても、それはファイルが存在しないことを保証しません。 目次 モジュール関数 blockdev? chardev? directory? empty? executable? executable_real? exist? file? grpowned? identical? owned? pipe? readable? readable_real? setgid? setuid? size size? socket? sticky? symlink? world_readable? world_wri
Open3.capture() をつかえば、外部コマンド実行結果の stdout, stderr, 実行ステータスは得られる。 しかし コマンド実行で stdout, stderr に大量に出力される可能性がある場合、この方法ではメモリーを圧迫してしまう危険がある。 そこで、出力結果をメモリーに展開せずに、 stdout, stderr を得る方法を検討してみた。 発想としては、 system() を使う。system() の return 値で実行ステータスを判定する。 stdout, stderr はファイルにリダイレクトする。必要に応じて、ファイルの中身を参照する。 以下にコードを書いてみた。 ( ruby 1.9.3-p484) このコード例では、 system() の return 値は 常に true か falseになる。 ( リダイレクトをしないなら、 該当コマンドが無い時
Rubyの定数が、他の言語の定数とはちょっと違う意外な仕様なのは理解していたが、もうひとつ意外な仕様があることを最近知った。なんかちょっと釣りっぽいタイトルになっちゃったけど。 再代入可能な定数 Rubyの定数は、他の言語のように変更を許さない(再代入させない)定数ではないことは有名。少なくとも自分は、Rubyを始めてから結構早い段階でこの仕様について知った。そして、最初にこれを知ったとき「これって定数じゃなくね?」って思った覚えがある。 HOGE = "hoge" HOGE = "fuga" puts HOGE このように再代入しても、警告は出るものの、実際の値は変わってしまう。 2: warning: already initialized constant HOGE fuga Rubyのこういった仕様に対して、良い意味での“ゆるふわ感”を感じる。こんなにゆるくて大丈夫?と思うくらい。
ディレクトリの削除には、Dir.rmdirを使う。ただし、コマンドのrmdirと同様、このメソッドは空のディレクトリしか削除できない。 Dir.rmdir("dir") このため中身があるディレクトリは、中身を再帰的に削除しないと削除することができない。これを代わりにやってくれるのがfileutilsライブラリのFileUtils.rm_rだ。 reqiure 'fileutils' FileUtils.rm_r("dir") しかし、FileUtils.rm_rでも、読み取り専用ファイルなどが邪魔になり削除が完了しない場合がある。そのような場合に強制的に削除を行うには、FileUtils.rm_rfが利用できる。 reqiure 'fileutils' FileUtils.rm_rf("dir")
ファイル操作を行うfileutilsライブラリのメソッドは、オプションを指定することで、実際の操作は行わず、何を行うのかを出力(ドライラン)することができる。 :noopは実際の操作は行わないようにするオプションで、:verboseは何を行うのかUNIXコマンドの形式で出力するようにするオプションだ。 以下は実際にfileutilsでファイルの操作をドライランする例である。 require 'fileutils' FileUtils.mkdir('/foo', :mode => 0755, :noop => true, :verbose => true) # mkdir -m 755 /foo FileUtils.chmod_R(0777, '/foo', :noop => true, :verbose => true) # chmod -R 777 /foo FileUtils.rm_r
Time.at(1414767600) # => 2014-11-01 00:00:00 +0900 require 'time' Time.parse('2014-11-01 00:00:00').to_i # => 1414767600 # Dateも可能 Time.parse('2014-11-01').to_i # => 1414767600
if 文では条件式が「真」の場合にそのあとの処理を実行しますが、 unless 文では逆に条件式が「偽」の場合にそのあとの処理を実行します。ここでは Ruby で unless 文を使った条件分岐を記述する方法について解説します。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く