*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"

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS