- 追加された行はこの色です。
- 削除された行はこの色です。
*RubyでScalaスクリプトをコンパイルするツールを作成する。 [#vd683dab]
*仕様 [#df26398e]
**ツール1 タイムスタンプスナップ機能 [#ac9ea477]
フォルダ内の.scalaファイルのタイプスタンプのスナップを取得する。
**ツール2 更新ファイル抽出機能 [#g2830135]
既存のタイムスタンプと現在のファイルのタイムスタンプを比較し更新されたファイルを取得する。
**ツール3 一括コンパイル機能 [#g906e4b2]
ファイル一覧のファイルをコンパイルする
**ツール4 特定ファイル実行機能 [#p3901436]
*ツール1 タイムスタンプスナップ機能 [#la5cc9ff]
**ディレクトリ中のファイル一覧を取得する [#ic08cdb2]
p Dir::entries("/home/take")
**rubyのディレクトリ関連の処理 [#q1973441]
***ディレクトリ中のファイル一覧を取得する [#ic08cdb2]
-コード例
p Dir::entries("/home/take")
--結果
[".", "..", "WorkbookScala.scala"]
***ワイルドカードにマッチしたファイル全てに処理を行う [#nda0b89a]
-コード例
p Dir::entries("/home/take")
--結果
[".", "..", "WorkbookScala.scala"]
---注意点
フォルダの区切り文字は\ではなく、/を使うこと
***ファイルのタイムスタンプを取得する [#ud2674ec]
-例
s = File.stat("c:/scala/user/src/WorkbookScala.scala")
puts File.mtime(fname).strftime("%Y/%m/%d %H:%M:%S") # 最終更新時刻
-結果
c:/scala/user/src/WorkbookScala.scala
2009/12/05 22:16:11
***snap_timestamp.rb [#hffed54a]
path=ARGV[0].gsub("\\","/")
ext="scala"
outfile="timestamp.txt"
buffer = ""
# **は再帰的検索。\0は複数パターンの区切り。.*は隠しファイル取得
Dir.glob("#{path}/**/*\0#{path}/**/.*" + ext).each{|name|
puts name
buffer = buffer + name + "\n"
s = File.stat(name)
timestamp = File.mtime(fname).strftime("%Y/%m/%d %H:%M:%S") # 最終更新時刻
puts timestamp
buffer = buffer + timestamp + "\n"
}
# タイムスタンプスナップを上書き更新します。
file = File.open(path + "/" + outfile, "w");
# 書き込む
file.write(buffer);
file.close
-使い方
ruby c:\scala\bin\snap_timestamp.rb "c:\scala\user\src"
--指定したフォルダにtimestamp.txtが出力されファイルのタイムスタンプのスナップショットがとれます。
**snap_timestamp_diff.rb [#a7a5adf5]
更新したファイルを出力する
#第一引数はフォルダ名
path=ARGV[0].gsub("\\","/")
ext=/.*\.scala$/
outfile="timestamp.txt"
current={}
# **は再帰的検索。\0は複数パターンの区切り。.*は隠しファイル取得
Dir.glob("#{path}/**/*\0#{path}/**/.*" ).each{|name|
if ext =~ name
s = File.stat(name)
current.store(name,File.mtime(name).strftime("%Y/%m/%d %H:%M:%S"))
end
}
# タイムスタンプ保存用ファイル読み込み
before={}
file = open(path+"/"+outfile)
buffer = file.read().split("\n");
file.close
#2行を1つの配列にまとめた配列を作成
newItem=""
newItem = nil
buffer.each{|line|
if newItem == nil
newItem=line
else
if ext =~ newItem
before.store(newItem,line)
end
newItem = nil
end
}
#タイムスタンプの比較 更新・新規追加したファイルを出力
current.each{|filepath, timestamp|
if timestamp != before.fetch(filepath)
puts filepath
end
}
-使い方 snap_timestamp_diff.rb "c:\scala\user\src"